From: Lennart Poettering Date: Wed, 6 Jan 2021 14:50:14 +0000 (+0100) Subject: gpt: generalize validator for GPT partition labels X-Git-Tag: v248-rc3~74 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=22a0a36efa030239b3324434c8ea98ae0472cc4f;p=thirdparty%2Fsystemd.git gpt: generalize validator for GPT partition labels This adds a proper validator function. No change in behaviour, just some minor refactoring (this should be useful elsewhere later on though) --- diff --git a/src/partition/repart.c b/src/partition/repart.c index 45e82cd0eb5..1964d9c9571 100644 --- a/src/partition/repart.c +++ b/src/partition/repart.c @@ -960,7 +960,6 @@ static int config_parse_label( void *data, void *userdata) { - _cleanup_free_ char16_t *recoded = NULL; _cleanup_free_ char *resolved = NULL; char **label = data; int r; @@ -981,11 +980,14 @@ static int config_parse_label( return 0; } - recoded = utf8_to_utf16(resolved, strlen(resolved)); - if (!recoded) - return log_oom(); - - if (char16_strlen(recoded) > 36) { + r = gpt_partition_label_valid(resolved); + if (r < 0) { + log_syntax(unit, LOG_WARNING, filename, line, r, + "Failed to check if string is valid as GPT partition label, ignoring: \"%s\" (from \"%s\")", + resolved, rvalue); + return 0; + } + if (!r) { log_syntax(unit, LOG_WARNING, filename, line, 0, "Partition label too long for GPT table, ignoring: \"%s\" (from \"%s\")", resolved, rvalue); diff --git a/src/shared/gpt.c b/src/shared/gpt.c index 15ea2f0a1f1..a96f5ee02da 100644 --- a/src/shared/gpt.c +++ b/src/shared/gpt.c @@ -2,6 +2,7 @@ #include "gpt.h" #include "string-util.h" +#include "utf8.h" const GptPartitionType gpt_partition_type_table[] = { { GPT_ROOT_X86, "root-x86" }, @@ -95,3 +96,13 @@ int gpt_partition_type_uuid_from_string(const char *s, sd_id128_t *ret) { return sd_id128_from_string(s, ret); } + +int gpt_partition_label_valid(const char *s) { + _cleanup_free_ char16_t *recoded = NULL; + + recoded = utf8_to_utf16(s, strlen(s)); + if (!recoded) + return -ENOMEM; + + return char16_strlen(recoded) <= 36; +} diff --git a/src/shared/gpt.h b/src/shared/gpt.h index 315cde6be32..2e0f50c3c64 100644 --- a/src/shared/gpt.h +++ b/src/shared/gpt.h @@ -126,3 +126,5 @@ typedef struct GptPartitionType { } GptPartitionType; extern const GptPartitionType gpt_partition_type_table[]; + +int gpt_partition_label_valid(const char *s);