mirror of
https://github.com/Zenithsiz/ftmemsim-valgrind.git
synced 2026-02-03 10:05:29 +00:00
Add memmem memcheck tests
Ensure that memmem behaves as expected and doesn't yield memcheck false positives.
This commit is contained in:
parent
38acc04ac2
commit
74e180e3c4
@ -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
69
memcheck/tests/memmem.c
Normal 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;
|
||||
}
|
||||
0
memcheck/tests/memmem.stderr.exp
Normal file
0
memcheck/tests/memmem.stderr.exp
Normal file
2
memcheck/tests/memmem.vgtest
Normal file
2
memcheck/tests/memmem.vgtest
Normal file
@ -0,0 +1,2 @@
|
||||
prog: memmem
|
||||
vgopts: -q
|
||||
Loading…
x
Reference in New Issue
Block a user