/* * malloc test program. * * to build: * make x.o * gcc -g -o x x.o xmalloc.o lib/malloc/libmalloc.a */ /* Copyright (C) 2002 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. Bash is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Bash is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Bash. If not, see . */ #include #include #include #define USING_BASH_MALLOC #define HAVE_STRINGIZE #include "xmalloc.h" int interrupt_immediately = 0; static char xp[64]; int main(int c, char **v) { char *p; malloc_set_register(1); #if 0 free (xp); /* free unallocated memory */ #endif #if 0 p = xrealloc(xp, 128); #endif #if 0 /* * request an amount so that the bucket changes when the malloc * overhead is added to the requested size. This had better * succeed. */ p = xmalloc(25); p[0] = 'a'; p[1] = '\0'; free(p); /* sanity check on underflow checks in free() */ #endif #if 0 p = xmalloc(28); /* This works for little-endian machines like i386. */ p[-4] = '\7'; /* underflow */ p = xrealloc(p, 128); /* realloc corrupted memory */ #endif #if 0 p = xmalloc(28); /* This works for little-endian machines like i386. */ p[-4] = '\7'; /* underflow */ free(p); #endif #if 0 p = xmalloc(2); free(p); free(p); /* duplicate free */ #endif #if 0 p = xmalloc(32); free(p); p = xrealloc(p, 128); /* realloc freed mem */ #endif #if 0 p = xmalloc(64); p[64] = '\0'; p = xrealloc(p, 128); /* overflow */ #endif #if 0 p = xmalloc(64); p[64] = '\0'; free(p); /* overflow */ #endif #if 0 p = xmalloc(64); p[-1] = 'a'; free (p); /* underflow */ #endif #if 0 p = xmalloc(64); p[-1] = 'a'; p = xrealloc(p, 129); /* underflow */ #endif mregister_dump_table(); exit(0); } void fatal_error(const char *format, ...) { va_list args; fprintf(stderr, "malloc-test: "); va_start(args, format); vfprintf(stderr, format, args); fprintf(stderr, "\n"); va_end(args); exit(2); } void programming_error(const char *format, ...) { va_list args; fprintf(stderr, "malloc-test: "); va_start(args, format); vfprintf(stderr, format, args); fprintf(stderr, "\n"); va_end(args); abort(); } int signal_is_trapped(int n) { return 0; }