diff options
author | Mike Frysinger <vapier@gentoo.org> | 2007-04-17 11:58:35 +0000 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2007-04-17 11:58:35 +0000 |
commit | 3a439916d39698cec2cf52f37d3cfb38b0307e58 (patch) | |
tree | fca96e79023d8ca086a9537ab8464a8326acd518 /test/malloc | |
parent | 513ea77f25170c75ad1e34719796f7bfd7d285d5 (diff) |
catch a small overflow in malloc-standard
Diffstat (limited to 'test/malloc')
-rw-r--r-- | test/malloc/malloc-standard-alignment.c | 42 |
1 files changed, 42 insertions, 0 deletions
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 <stdio.h> +#include <stdlib.h> +#include <sys/types.h> + +#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; +} |