summaryrefslogtreecommitdiff
path: root/src/apps/cam
diff options
context:
space:
mode:
authorBarnabás Pőcze <pobrn@protonmail.com>2024-04-29 14:24:09 +0000
committerKieran Bingham <kieran.bingham@ideasonboard.com>2024-05-21 13:22:33 +0100
commite77a2751100e38eb294f2694d9b1d100449a2770 (patch)
tree78d8ed78dda590e44ff7dc4130b4588af0452df2 /src/apps/cam
parentaee16c06913422a0ac84ee3217f87a9795e3c2d9 (diff)
treewide: Query list of cameras just once
This is more efficient since only a single vector will be constructed, and furthermore, it prevents the TOCTOU issue that might arise when the list of cameras changes between the two queries. Signed-off-by: Barnabás Pőcze <pobrn@protonmail.com> Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Diffstat (limited to 'src/apps/cam')
-rw-r--r--src/apps/cam/camera_session.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/apps/cam/camera_session.cpp b/src/apps/cam/camera_session.cpp
index f13355ba..097dc479 100644
--- a/src/apps/cam/camera_session.cpp
+++ b/src/apps/cam/camera_session.cpp
@@ -39,9 +39,14 @@ CameraSession::CameraSession(CameraManager *cm,
{
char *endptr;
unsigned long index = strtoul(cameraId.c_str(), &endptr, 10);
- if (*endptr == '\0' && index > 0 && index <= cm->cameras().size())
- camera_ = cm->cameras()[index - 1];
- else
+
+ if (*endptr == '\0' && index > 0) {
+ auto cameras = cm->cameras();
+ if (index <= cameras.size())
+ camera_ = cameras[index - 1];
+ }
+
+ if (!camera_)
camera_ = cm->get(cameraId);
if (!camera_) {