From 14dde316c7b64a1664c9ac98e82f4f05693d2e6f Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Mon, 7 Oct 2024 13:27:37 +0900 Subject: [PATCH] sd-json: use sd_json_dispatch_const_string() in sd_json_dispatch_string() Also, do similar for json_dispatch_user_group_name(). --- src/libsystemd/sd-json/json-util.c | 14 +++----------- src/libsystemd/sd-json/sd-json.c | 16 +++++----------- 2 files changed, 8 insertions(+), 22 deletions(-) diff --git a/src/libsystemd/sd-json/json-util.c b/src/libsystemd/sd-json/json-util.c index fb8d2f46c3..c8d67c8d55 100644 --- a/src/libsystemd/sd-json/json-util.c +++ b/src/libsystemd/sd-json/json-util.c @@ -73,17 +73,9 @@ int json_dispatch_user_group_name(const char *name, sd_json_variant *variant, sd const char *n; int r; - if (sd_json_variant_is_null(variant)) { - *s = mfree(*s); - return 0; - } - - if (!sd_json_variant_is_string(variant)) - return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not a string.", strna(name)); - - n = sd_json_variant_string(variant); - if (!valid_user_group_name(n, FLAGS_SET(flags, SD_JSON_RELAX) ? VALID_USER_RELAX : 0)) - return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not a valid user/group name.", strna(name)); + r = json_dispatch_const_user_group_name(name, variant, flags, &n); + if (r < 0) + return r; r = free_and_strdup(s, n); if (r < 0) diff --git a/src/libsystemd/sd-json/sd-json.c b/src/libsystemd/sd-json/sd-json.c index 20599114ab..33ccdcac5a 100644 --- a/src/libsystemd/sd-json/sd-json.c +++ b/src/libsystemd/sd-json/sd-json.c @@ -5376,22 +5376,16 @@ _public_ int sd_json_dispatch_double(const char *name, sd_json_variant *variant, _public_ int sd_json_dispatch_string(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata) { char **s = ASSERT_PTR(userdata); + const char *n; int r; assert_return(variant, -EINVAL); - if (sd_json_variant_is_null(variant)) { - *s = mfree(*s); - return 0; - } - - if (!sd_json_variant_is_string(variant)) - return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not a string.", strna(name)); - - if ((flags & SD_JSON_STRICT) && !string_is_safe(sd_json_variant_string(variant))) - return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' contains unsafe characters, refusing.", strna(name)); + r = sd_json_dispatch_const_string(name, variant, flags, &n); + if (r < 0) + return r; - r = free_and_strdup(s, sd_json_variant_string(variant)); + r = free_and_strdup(s, n); if (r < 0) return json_log(variant, flags, r, "Failed to allocate string: %m"); -- 2.25.1