diff options
author | Dave Barach <dave@barachs.net> | 2018-07-26 16:16:55 -0400 |
---|---|---|
committer | Neale Ranns <nranns@cisco.com> | 2018-07-27 07:50:11 +0000 |
commit | db0a7ec72a2907036b880888fc186ef1c2195b36 (patch) | |
tree | 5b5ea7871f4171c4fd76089b17f4dca625bdb3b3 /src/vppinfra/test_vec.c | |
parent | 2d1a04371a8e61f9d5ba8b028f41fcbcec017b9c (diff) |
-DCLIB_DEBUG => turn on extra checks in dlmalloc
Also: call os_panic() on a heap botch crash, attempt to generate a
post-mortem API dump, etc.
Add an "ugly" test case to vec_test.c, to cause a configurable block
overrun.
Change-Id: I7b29a7645277f9e485e06ff83335306fedc24b71
Signed-off-by: Dave Barach <dave@barachs.net>
Diffstat (limited to 'src/vppinfra/test_vec.c')
-rw-r--r-- | src/vppinfra/test_vec.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/vppinfra/test_vec.c b/src/vppinfra/test_vec.c index ee17ef14244..d60d27b2ad2 100644 --- a/src/vppinfra/test_vec.c +++ b/src/vppinfra/test_vec.c @@ -1079,6 +1079,7 @@ test_vec_main (unformat_input_t * input) uword help = 0; uword big = 0; uword align = 0; + uword ugly = 0; while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT) { @@ -1089,6 +1090,7 @@ test_vec_main (unformat_input_t * input) && 0 == unformat (input, "dump %d", &g_dump_period) && 0 == unformat (input, "help %=", &help, 1) && 0 == unformat (input, "big %=", &big, 1) + && 0 == unformat (input, "ugly %d", &ugly) && 0 == unformat (input, "align %=", &align, 1)) { clib_error ("unknown input `%U'", format_unformat_error, input); @@ -1096,6 +1098,19 @@ test_vec_main (unformat_input_t * input) } } + /* Cause a deliberate heap botch */ + if (ugly) + { + u8 *overrun_me = 0; + int i; + + vec_validate (overrun_me, 31); + for (i = 0; i < vec_len (overrun_me) + ugly; i++) + overrun_me[i] = i; + + vec_free (overrun_me); + } + if (big) { u8 *bigboy = 0; |