From 3a439916d39698cec2cf52f37d3cfb38b0307e58 Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Tue, 17 Apr 2007 11:58:35 +0000 Subject: catch a small overflow in malloc-standard --- test/malloc/malloc-standard-alignment.c | 42 +++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 test/malloc/malloc-standard-alignment.c (limited to 'test/malloc') diff --git a/test/malloc/malloc-standard-alignment.c b/test/malloc/malloc-standard-alignment.c new file mode 100644 index 000000000..1b4c9b8a0 --- /dev/null +++ b/test/malloc/malloc-standard-alignment.c @@ -0,0 +1,42 @@ +/* exercise a bug found in malloc-standard when alignment + * values are out of whack and cause a small overflow into + * actual user data. + */ + +#include +#include +#include + +#define ok(p) ((void*)p > (void*)0x1000) +#define x \ + do { \ + printf("%i: phead = %p, phead->link @ %p = %p %s\n", \ + __LINE__, phead, \ + ok(phead) ? &phead->link : 0, \ + ok(phead) ? phead->link : 0, \ + ok(phead) ? phead->link == 0 ? "" : "!!!!!!!!!!!" : ""); \ + if (phead->link != NULL) exit(1); \ + } while (0); + +struct llist_s { + void *data; + struct llist_s *link; +} *phead; + +int main() +{ + char *line, *reg; + + setbuf(stdout, NULL); + setbuf(stderr, NULL); + + phead = malloc(sizeof(*phead)); + phead->link = NULL; + +x line = malloc(80); +x line = realloc(line, 2); +x reg = malloc(32); +x free(line); + +x return 0; +} -- cgit v1.2.3