summaryrefslogtreecommitdiffstats
path: root/src/vppinfra/test_vec.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/vppinfra/test_vec.c')
-rw-r--r--src/vppinfra/test_vec.c15
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;