Add memmem memcheck tests

Ensure that memmem behaves as expected and doesn't yield memcheck false
positives.
This commit is contained in:
Mark Wielaard 2022-05-19 18:08:40 -04:00 committed by Andreas Arnez
parent 38acc04ac2
commit 74e180e3c4
4 changed files with 73 additions and 0 deletions

View File

@ -219,6 +219,7 @@ EXTRA_DIST = \
memalign2.stderr.exp memalign2.vgtest \
memcmptest.stderr.exp memcmptest.stderr.exp2 \
memcmptest.stdout.exp memcmptest.vgtest \
memmem.stderr.exp memmem.vgtest \
mempool.stderr.exp mempool.vgtest \
mempool2.stderr.exp mempool2.vgtest \
metadata.stderr.exp metadata.stdout.exp metadata.vgtest \
@ -417,6 +418,7 @@ check_PROGRAMS = \
malloc_usable malloc1 malloc2 malloc3 manuel1 manuel2 manuel3 \
match-overrun \
memalign_test memalign2 memcmptest mempool mempool2 mmaptest \
memmem \
mismatches new_override metadata \
nanoleak_supp nanoleak2 new_nothrow \
noisy_child \

69
memcheck/tests/memmem.c Normal file
View File

@ -0,0 +1,69 @@
#define _GNU_SOURCE
#include <assert.h>
#include <string.h>
#include <stdlib.h>
/* mallocs an mem block and fills it with A. A needs to be a zero
terminated string. The A string chars, minus the terminating zero
are copied into the returned mem block. */
static void *
create_mem (const char *a)
{
size_t len = strlen (a);
void *mem = malloc (len);
memcpy (mem, a, len);
return mem;
}
int
main ()
{
char *haystack;
char *needle;
haystack = create_mem ("a");
needle = create_mem ("a");
assert (memmem (haystack, 0, needle, 0) == haystack);
assert (memmem (haystack, 1, needle, 0) == haystack);
assert (memmem (haystack, 0, needle, 1) == NULL);
assert (memmem (haystack, 1, needle, 1) == haystack);
free (haystack);
free (needle);
haystack = create_mem ("abc");
needle = create_mem ("bc");
assert (memmem (haystack, 3, needle, 0) == haystack);
assert (memmem (haystack, 3, needle, 2) == haystack + 1);
assert (memmem (haystack + 1, 2, needle, 2) == haystack + 1);
assert (memmem (haystack + 2, 1, needle, 2) == NULL);
free (haystack);
free (needle);
haystack = create_mem ("abcabcabc");
needle = create_mem ("bca");
assert (memmem (haystack, 9, needle, 3) == haystack + 1);
free (haystack);
free (needle);
haystack = create_mem ("abcabcabc");
needle = create_mem ("bcad");
assert (memmem (haystack, 9, needle, 4) == NULL);
free (haystack);
free (needle);
haystack = create_mem ("xxxxxxxxxxxxxxxxxABC");
needle = create_mem ("ABCD");
assert (memmem (haystack, 20, needle, 2) == haystack + 17);
assert (memmem (haystack + 3, 17, needle, 2) == haystack + 17);
assert (memmem (haystack + 15, 5, needle, 2) == haystack + 17);
assert (memmem (haystack, 20, needle, 3) == haystack + 17);
assert (memmem (haystack + 3, 17, needle, 3) == haystack + 17);
assert (memmem (haystack + 15, 5, needle, 3) == haystack + 17);
assert (memmem (haystack, 20, needle, 4) == NULL);
assert (memmem (haystack + 3, 5, needle, 4) == NULL);
assert (memmem (haystack + 15, 5, needle, 4) == NULL);
free (haystack);
free (needle);
return 0;
}

View File

View File

@ -0,0 +1,2 @@
prog: memmem
vgopts: -q