enum-names: Fail gracefully when passing a NULL value as enum names

This commit is contained in:
Martin Willi 2015-04-13 18:22:49 +02:00
parent e03fb1fb26
commit de1c492a0f
2 changed files with 15 additions and 1 deletions

View File

@ -291,6 +291,15 @@ START_TEST(test_enum_printf_hook_split)
} }
END_TEST END_TEST
START_TEST(test_enum_printf_hook_null)
{
char buf[16];
snprintf(buf, sizeof(buf), "%N", NULL, 7);
ck_assert_str_eq("(7)", buf);
}
END_TEST
START_TEST(test_enum_printf_hook_flags) START_TEST(test_enum_printf_hook_flags)
{ {
char buf[1024]; char buf[1024];
@ -406,6 +415,7 @@ Suite *enum_suite_create()
tc = tcase_create("enum_printf_hook"); tc = tcase_create("enum_printf_hook");
tcase_add_loop_test(tc, test_enum_printf_hook_cont, 0, countof(printf_tests_cont)); tcase_add_loop_test(tc, test_enum_printf_hook_cont, 0, countof(printf_tests_cont));
tcase_add_loop_test(tc, test_enum_printf_hook_split, 0, countof(printf_tests_split)); tcase_add_loop_test(tc, test_enum_printf_hook_split, 0, countof(printf_tests_split));
tcase_add_test(tc, test_enum_printf_hook_null);
tcase_add_loop_test(tc, test_enum_printf_hook_flags, 0, countof(printf_tests_flags)); tcase_add_loop_test(tc, test_enum_printf_hook_flags, 0, countof(printf_tests_flags));
tcase_add_loop_test(tc, test_enum_printf_hook_flags_incomplete, 0, countof(printf_tests_flags_incomplete)); tcase_add_loop_test(tc, test_enum_printf_hook_flags_incomplete, 0, countof(printf_tests_flags_incomplete));
tcase_add_loop_test(tc, test_enum_printf_hook_flags_null, 0, countof(printf_tests_flags_null)); tcase_add_loop_test(tc, test_enum_printf_hook_flags_null, 0, countof(printf_tests_flags_null));

View File

@ -26,6 +26,10 @@
*/ */
char *enum_to_name(enum_name_t *e, int val) char *enum_to_name(enum_name_t *e, int val)
{ {
if (!e)
{
return NULL;
}
do do
{ {
if (val >= e->first && val <= e->last) if (val >= e->first && val <= e->last)
@ -140,7 +144,7 @@ int enum_printf_hook(printf_hook_data_t *data, printf_hook_spec_t *spec,
int val = *((int*)(args[1])); int val = *((int*)(args[1]));
char *name, buf[512]; char *name, buf[512];
if (ed->next == ENUM_FLAG_MAGIC) if (ed && ed->next == ENUM_FLAG_MAGIC)
{ {
name = enum_flags_to_string(ed, val, buf, sizeof(buf)); name = enum_flags_to_string(ed, val, buf, sizeof(buf));
if (name == NULL) if (name == NULL)