123456789101112131415161718192021222324252627282930313233343536373839404142 |
- /* 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(int argc, char *argv[])
- {
- 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;
- }
|