From 164f3d8f3d25b99a192232b7ac172e37a61e943b Mon Sep 17 00:00:00 2001 From: Mike Yuan Date: Sat, 20 Apr 2024 07:16:00 +0800 Subject: [PATCH 1/3] shared/vpick: use strdup_to where appropriate --- src/shared/vpick.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/shared/vpick.c b/src/shared/vpick.c index 41bd7301a0..0f90af0fd0 100644 --- a/src/shared/vpick.c +++ b/src/shared/vpick.c @@ -185,11 +185,9 @@ static int pin_choice( if (!result.path) return log_oom_debug(); - if (filter->version) { - result.version = strdup(filter->version); - if (!result.version) - return log_oom_debug(); - } + r = strdup_to(&result.version, filter->version); + if (r < 0) + return r; *ret = TAKE_PICK_RESULT(result); return 1; From fde8fb7466a890aa9c29dddc5f559934b5aa28eb Mon Sep 17 00:00:00 2001 From: Mike Yuan Date: Sat, 20 Apr 2024 07:16:24 +0800 Subject: [PATCH 2/3] shared/vpick: flatten errno check --- src/shared/vpick.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/shared/vpick.c b/src/shared/vpick.c index 0f90af0fd0..fe332189be 100644 --- a/src/shared/vpick.c +++ b/src/shared/vpick.c @@ -292,13 +292,12 @@ static int make_choice( return log_oom_debug(); r = chaseat(toplevel_fd, p, CHASE_AT_RESOLVE_IN_ROOT, &object_path, &object_fd); - if (r < 0) { - if (r != -ENOENT) - return log_debug_errno(r, "Failed to open '%s': %m", prefix_roota(toplevel_path, p)); - + if (r == -ENOENT) { *ret = PICK_RESULT_NULL; return 0; } + if (r < 0) + return log_debug_errno(r, "Failed to open '%s': %m", prefix_roota(toplevel_path, p)); return pin_choice( toplevel_path, From b6d31deca4acc7fd6b6e65e51386002014d4a365 Mon Sep 17 00:00:00 2001 From: Mike Yuan Date: Sat, 20 Apr 2024 07:17:04 +0800 Subject: [PATCH 3/3] shared/vpick: check deterministic suffix earlier Follow-up for 421a4ba7e4a26332c271359a7a114a1da7a2afad --- src/shared/vpick.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/shared/vpick.c b/src/shared/vpick.c index fe332189be..4720e7448d 100644 --- a/src/shared/vpick.c +++ b/src/shared/vpick.c @@ -34,6 +34,8 @@ static int format_fname( if (FLAGS_SET(flags, PICK_TRIES) || !filter->version) /* Underspecified? */ return -ENOEXEC; + if (strv_length(filter->suffix) > 1) /* suffix is not deterministic? */ + return -ENOEXEC; /* The format for names we match goes like this: * @@ -85,13 +87,9 @@ static int format_fname( return -ENOMEM; } - if (!strv_isempty(filter->suffix)) { - if (strv_length(filter->suffix) > 1) - return -ENOEXEC; - + if (!strv_isempty(filter->suffix)) if (!strextend(&fn, filter->suffix[0])) return -ENOMEM; - } if (!filename_is_valid(fn)) return -EINVAL;