From 2f6749fe039c658a4bb954a97c723460cfa432d8 Mon Sep 17 00:00:00 2001 From: Gregory Oschwald Date: Tue, 2 Jan 2018 13:28:51 -0800 Subject: [PATCH] Fix segfault in expand_alternative_phrase_option string_tree_get_alternative can return NULL --- src/expand.c | 8 ++++++-- test/test_expand.c | 10 ++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/expand.c b/src/expand.c index 2268acc6..a6296ffc 100644 --- a/src/expand.c +++ b/src/expand.c @@ -1491,8 +1491,12 @@ void expand_alternative_phrase_option(cstring_array *strings, khash_t(str_set) * for (; !string_tree_iterator_done(iter); string_tree_iterator_next(iter)) { char_array_clear(temp_string); string_tree_iterator_foreach_token(iter, token, { - log_debug("token=%s\n", token); - char_array_append(temp_string, token); + if (token == NULL) { + log_debug("token=NULL\n"); + } else { + log_debug("token=%s\n", token); + char_array_append(temp_string, token); + } }) char_array_terminate(temp_string); diff --git a/test/test_expand.c b/test/test_expand.c index 9a4e4da8..e823ea53 100644 --- a/test/test_expand.c +++ b/test/test_expand.c @@ -135,6 +135,15 @@ TEST test_expansions(void) { CHECK_CALL(test_expansion_contains_with_languages("Marktstrasse", "markt strasse", options, 1, "de")); CHECK_CALL(test_expansion_contains_with_languages("Hoofdstraat", "hoofdstraat", options, 1, "nl")); CHECK_CALL(test_expansion_contains_with_languages("มงแตร", "มงแตร", options, 1, "th")); + + PASS(); +} + +TEST test_expansion_for_invalid_input(void) { + size_t num_expansions; + + // This is tested as the input caused a segfault in expand_alternative_phrase_option + libpostal_expand_address("bob-ad1233@blah.co", libpostal_get_default_options(), &num_expansions); PASS(); } @@ -314,6 +323,7 @@ SUITE(libpostal_expansion_tests) { RUN_TEST(test_po_box_root_expansions); RUN_TEST(test_expansions_language_classifier); RUN_TEST(test_expansions_no_options); + RUN_TEST(test_expansion_for_invalid_input); libpostal_teardown(); libpostal_teardown_language_classifier();