From 2925e85cd6e6c63ce5ba716e5de9d24066e9aebc Mon Sep 17 00:00:00 2001 From: Steffen Jaeckel Date: Fri, 10 Mar 2023 14:51:43 +0100 Subject: [PATCH] add test-case for #1761 Signed-off-by: Steffen Jaeckel --- tests/unittests/test_common.c | 22 ++++++++++++++++++++++ tests/unittests/test_common.h | 1 + tests/unittests/unittests.c | 1 + 3 files changed, 24 insertions(+) diff --git a/tests/unittests/test_common.c b/tests/unittests/test_common.c index fa5dd59e..3812cccb 100644 --- a/tests/unittests/test_common.c +++ b/tests/unittests/test_common.c @@ -535,6 +535,28 @@ _lists_equal(GSList* a, GSList* b) return TRUE; } +void +prof_occurrences_of_large_message_tests(void** state) +{ + GSList* actual = NULL; + GSList* expected = NULL; + /* use this with the old implementation to create a segfault + * const size_t haystack_sz = 1024 * 1024; + */ + const size_t haystack_sz = 1024; + size_t haystack_cur = 0; + char* haystack = malloc(haystack_sz); + const char needle[] = "needle "; + while (haystack_sz - haystack_cur > sizeof(needle)) { + memcpy(&haystack[haystack_cur], needle, sizeof(needle) - 1); + expected = g_slist_append(expected, GINT_TO_POINTER(haystack_cur)); + haystack_cur += sizeof(needle) - 1; + } + assert_true(_lists_equal(prof_occurrences("needle", haystack, 0, FALSE, &actual), expected)); + g_slist_free(actual); + g_slist_free(expected); +} + void prof_partial_occurrences_tests(void** state) { diff --git a/tests/unittests/test_common.h b/tests/unittests/test_common.h index 46d990d9..ffcc6c9d 100644 --- a/tests/unittests/test_common.h +++ b/tests/unittests/test_common.h @@ -31,5 +31,6 @@ void strip_quotes_strips_last(void** state); void strip_quotes_strips_both(void** state); void prof_partial_occurrences_tests(void** state); void prof_whole_occurrences_tests(void** state); +void prof_occurrences_of_large_message_tests(void** state); void unique_filename_from_url_td(void** state); void format_call_external_argv_td(void** state); diff --git a/tests/unittests/unittests.c b/tests/unittests/unittests.c index e2293004..2724aaa2 100644 --- a/tests/unittests/unittests.c +++ b/tests/unittests/unittests.c @@ -620,6 +620,7 @@ main(int argc, char* argv[]) unit_test(prof_partial_occurrences_tests), unit_test(prof_whole_occurrences_tests), + unit_test(prof_occurrences_of_large_message_tests), unit_test(returns_no_commands), unit_test(returns_commands),