From: Phil Sutter Date: Fri, 22 Dec 2023 15:53:14 +0000 (+0100) Subject: datatype: Initialize rt_symbol_tables' base field X-Git-Tag: v1.1.0~139 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d9badd39deb7e2f9509be75e83477ab0a0bf2740;p=thirdparty%2Fnftables.git datatype: Initialize rt_symbol_tables' base field It is unconditionally accessed in symbol_table_print() so make sure it is initialized to either BASE_DECIMAL (arbitrary) for empty or non-existent source files or a proper value depending on entry number format. Signed-off-by: Phil Sutter --- diff --git a/src/datatype.c b/src/datatype.c index 9ca051670..4d8677982 100644 --- a/src/datatype.c +++ b/src/datatype.c @@ -893,6 +893,7 @@ struct symbol_table *rt_symbol_table_init(const char *filename) size = RT_SYM_TAB_INITIAL_SIZE; tbl = xmalloc(sizeof(*tbl) + size * sizeof(s)); + tbl->base = BASE_DECIMAL; nelems = 0; f = open_iproute2_db(filename, &path); @@ -905,10 +906,13 @@ struct symbol_table *rt_symbol_table_init(const char *filename) p++; if (*p == '#' || *p == '\n' || *p == '\0') continue; - if (sscanf(p, "0x%x %511s\n", &val, namebuf) != 2 && - sscanf(p, "0x%x %511s #", &val, namebuf) != 2 && - sscanf(p, "%u %511s\n", &val, namebuf) != 2 && - sscanf(p, "%u %511s #", &val, namebuf) != 2) { + if (sscanf(p, "0x%x %511s\n", &val, namebuf) == 2 || + sscanf(p, "0x%x %511s #", &val, namebuf) == 2) { + tbl->base = BASE_HEXADECIMAL; + } else if (sscanf(p, "%u %511s\n", &val, namebuf) == 2 || + sscanf(p, "%u %511s #", &val, namebuf) == 2) { + tbl->base = BASE_DECIMAL; + } else { fprintf(stderr, "iproute database '%s' corrupted\n", path ?: filename); break;