/tags/ttn-post-libtool-1-4-3-upgrade/SWIG/Tools/WAD/Test/debug.c
C | 119 lines | 87 code | 20 blank | 12 comment | 22 complexity | 2db5e84d11316dda46715cc6cd68ef76 MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
- /* -----------------------------------------------------------------------------
- * debug.c
- *
- * This file contains a variety of different programming errors to test with
- * WAD.
- * ----------------------------------------------------------------------------- */
- #include <stdio.h>
- #include <string.h>
- #include <assert.h>
- typedef double Real;
- typedef Real Float;
- char buffer[256];
- /* A simple segmentation fault on an uninitialized pointer */
- int seg_crash() {
- int *a = 0;
- *a = 3;
- return 1;
- }
- /* Blow the process heap */
- int blowheap_crash() {
- int i;
- int *a = (int *) malloc(sizeof(int));
- for (i = 0;; i++) {
- a[i] = i;
- }
- }
- /* Buffer overflow crash on the stack */
- int overflow_crash() {
- int a[512];
- int i;
- for (i = 0; i < 1024; i++) {
- a[i] = i;
- }
- }
- /* A simple bus error. */
- int bus_crash() {
- double *a = (double *) (buffer+1);
- *a = 3.4;
- return 1;
- }
- /* An assertion */
- int abort_crash(int n) {
- assert(n > 0);
- return 1;
- }
- /* A math error (maybe) */
- int math_crash(int x, int y) {
- return x/y;
- }
- void type_crash(int a, short b, char c, unsigned long d, float f, double g) {
- int la;
- short lb;
- char lc;
- long ld;
- float lf;
- double lg;
- long ll;
- la = a;
- lb = b;
- lc = c;
- ld = ld;
- lf = lf;
- lg = lg;
- assert(0);
- }
- #ifdef NEED_MAIN
- static const char *usage="\n\
- Usage: debug type\n\
- seg - Fail with an uninitialized pointer.\n\
- bus - Fail with a bus error.\n\
- abort - Fail with an assertion error.\n\
- math - Fail with a math error.\n\
- heap - Blow the process heap.\n\
- overflow - Buffer overflow on the stack.\n\
- ";
- int main(int argc, char **argv) {
- int n;
- printf("WAD debug program.\n");
- if (argc < 2) {
- printf("%s\n", usage);
- exit(0);
- }
- if (strcmp(argv[1],"abort") == 0) {
- abort_crash(-4);
- } else if (strcmp(argv[1],"seg") ==0) {
- seg_crash();
- } else if (strcmp(argv[1],"bus") == 0) {
- bus_crash();
- } else if (strcmp(argv[1],"math") == 0) {
- math_crash(3,0);
- } else if (strcmp(argv[1],"heap") == 0) {
- blowheap_crash();
- } else if (strcmp(argv[1],"overflow") == 0) {
- overflow_crash();
- } else if (strcmp(argv[1],"type") == 0) {
- type_crash(0,2,'x',420000,3.14159,2.1828);
- }
- }
- #endif