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)
This commit is contained in:
Lennart Poettering
2021-03-04 14:50:24 +09:00
committed by Yu Watanabe
parent 30cdcd628b
commit 22a0a36efa
3 changed files with 21 additions and 6 deletions
+8 -6
View File
@@ -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);
+11
View File
@@ -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;
}
+2
View File
@@ -126,3 +126,5 @@ typedef struct GptPartitionType {
} GptPartitionType;
extern const GptPartitionType gpt_partition_type_table[];
int gpt_partition_label_valid(const char *s);