/* 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(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; }