From c512b2f054ce14321c8f6fae66696f880a74bbf1 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Wed, 22 Mar 2017 08:50:09 +0000 Subject: Add heap fault injection generator into tests This builds a dynamic library which can cause heap allocation (malloc) faliures after a specified number of calls. This is useful to allow tesing of memory failure allocation paths within netsurf test suites. An example test for core strings test has been added which incrementaly fails alloctions allowing all error paths in initialisation to be exercised. --- test/malloc_fig.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 test/malloc_fig.c (limited to 'test/malloc_fig.c') diff --git a/test/malloc_fig.c b/test/malloc_fig.c new file mode 100644 index 000000000..19ff91e76 --- /dev/null +++ b/test/malloc_fig.c @@ -0,0 +1,58 @@ +/* + * Copyright 2017 Vincent Sanders + * + * This file is part of NetSurf, http://www.netsurf-browser.org/ + * + * NetSurf 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; version 2 of the License. + * + * NetSurf 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 this program. If not, see . + */ + +/** + * \file + * + * heap fault injection generation. + * + * This library inject allocation faults into NetSurf tests + */ + +#define _GNU_SOURCE +#include +#include +#include +#include + +#include "test/malloc_fig.h" + +static unsigned int count = UINT_MAX; + +void malloc_limit(unsigned int newcount) +{ + count = newcount; + //fprintf(stderr, "malloc_limit %d\n", count); +} + +void* malloc(size_t size) +{ + static void* (*real_malloc)(size_t) = NULL; + void *p = NULL; + + if (real_malloc == NULL) { + real_malloc = dlsym(RTLD_NEXT, "malloc"); + } + + if (count > 0) { + p = real_malloc(size); + count--; + } + //fprintf(stderr, "malloc(%d) = %p remian:%d\n", size, p, count); + return p; +} -- cgit v1.2.3