about summary refs log tree commit diff stats
path: root/tests/unittests/test_common.c
diff options
context:
space:
mode:
authorSteffen Jaeckel <jaeckel-floss@eyet-services.de>2023-03-10 14:51:43 +0100
committerSteffen Jaeckel <jaeckel-floss@eyet-services.de>2023-03-11 15:05:03 +0100
commit2925e85cd6e6c63ce5ba716e5de9d24066e9aebc (patch)
tree735f9d7daca57d706f2f826a2ff00de8a7e1554a /tests/unittests/test_common.c
parente99c4b7128f5c95cf8665ef969848defa0d3bbd7 (diff)
downloadprofani-tty-2925e85cd6e6c63ce5ba716e5de9d24066e9aebc.tar.gz
add test-case for #1761
Signed-off-by: Steffen Jaeckel <jaeckel-floss@eyet-services.de>
Diffstat (limited to 'tests/unittests/test_common.c')
-rw-r--r--tests/unittests/test_common.c22
1 files changed, 22 insertions, 0 deletions
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
@@ -536,6 +536,28 @@ _lists_equal(GSList* a, GSList* b)
 }
 
 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)
 {
     GSList* actual = NULL;