aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPřemysl Eric Janouch <p@janouch.name>2024-12-16 09:09:03 +0100
committerPřemysl Eric Janouch <p@janouch.name>2024-12-16 09:09:03 +0100
commit32cbb152660566042ac25b00de4b19b1c90c0f5c (patch)
tree82fbbd3e655386aabb2e3bd4911c2c537e44212e
parent149938cc445f99b1aa40c490014aad72cf698dec (diff)
downloadliberty-32cbb152660566042ac25b00de4b19b1c90c0f5c.tar.gz
liberty-32cbb152660566042ac25b00de4b19b1c90c0f5c.tar.xz
liberty-32cbb152660566042ac25b00de4b19b1c90c0f5c.zip
Serialize integer-ish config keys properly
-rw-r--r--liberty.c3
-rw-r--r--tests/liberty.c5
2 files changed, 5 insertions, 3 deletions
diff --git a/liberty.c b/liberty.c
index ff7c0c7..0690e89 100644
--- a/liberty.c
+++ b/liberty.c
@@ -4833,7 +4833,8 @@ config_item_write_kv_pair (struct config_writer *self,
str_append_printf (self->output,
"%s# %s\n", indent, value->schema->comment);
- bool can_use_word = true;
+ char *end = NULL;
+ bool can_use_word = ((void) strtoll (key, &end, 10), end == key);
for (const char *p = key; *p; p++)
if (!config_tokenizer_is_word_char (*p))
can_use_word = false;
diff --git a/tests/liberty.c b/tests/liberty.c
index 92647ae..fddfb2c 100644
--- a/tests/liberty.c
+++ b/tests/liberty.c
@@ -647,7 +647,7 @@ static const struct config_schema g_config_test[] =
.type = CONFIG_ITEM_INTEGER,
.validate = test_config_validate_nonnegative,
.default_ = "1" },
- { .name = "foobar",
+ { .name = "123",
.type = CONFIG_ITEM_STRING,
.default_ = "\"qux\\x01`\" \"\"`a`" },
{}
@@ -676,10 +676,11 @@ test_config (void)
config_item_destroy (invalid);
hard_assert (!strcmp ("qux\001`a",
- config_item_get (config.root, "top.foobar", NULL)->value.string.str));
+ config_item_get (config.root, "top.123", NULL)->value.string.str));
struct str s = str_make ();
config_item_write (config.root, true, &s);
+ print_debug ("%s", s.str);
struct config_item *parsed = config_item_parse (s.str, s.len, false, NULL);
hard_assert (parsed);
config_item_destroy (parsed);