diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/INDEX | 1 | ||||
-rw-r--r-- | test/Makefile | 2 | ||||
-rw-r--r-- | test/regression/filter-badenc-segv.c | 50 |
3 files changed, 52 insertions, 1 deletions
@@ -18,3 +18,4 @@ inputstream Inputstream handling input regression/cscodec-segv Segfault in charset codecs regression/filter-segv Segfault in input filtering regression/stream-nomem Inputstream buffer expansion +regression/filter-badenc-segv Segfault on resetting bad encoding in filter diff --git a/test/Makefile b/test/Makefile index fecfca4..0786f5d 100644 --- a/test/Makefile +++ b/test/Makefile @@ -38,7 +38,7 @@ CFLAGS := $(CFLAGS) -I$(TOP)/src/ -I$(d) TESTS_$(d) := aliases cscodec-8859 cscodec-ext8 cscodec-utf8 cscodec-utf16 \ charset dict filter inputstream parserutils rbtree TESTS_$(d) := $(TESTS_$(d)) regression/cscodec-segv regression/filter-segv \ - regression/stream-nomem + regression/stream-nomem regression/filter-badenc-segv # Items for top-level makefile to use ITEMS_CLEAN := $(ITEMS_CLEAN) \ diff --git a/test/regression/filter-badenc-segv.c b/test/regression/filter-badenc-segv.c new file mode 100644 index 0000000..c6c07f6 --- /dev/null +++ b/test/regression/filter-badenc-segv.c @@ -0,0 +1,50 @@ +#include <stdio.h> +#include <stdlib.h> + +#include <parserutils/parserutils.h> + +#include "input/filter.h" + +#include "testutils.h" + +static void *myrealloc(void *ptr, size_t len, void *pw) +{ + UNUSED(pw); + + return realloc(ptr, len); +} + +int main(int argc, char **argv) +{ + parserutils_filter *input; + parserutils_filter_optparams params; + + if (argc != 2) { + printf("Usage: %s <filename>\n", argv[0]); + return 1; + } + + assert(parserutils_initialise(argv[1], myrealloc, NULL) == + PARSERUTILS_OK); + + assert(parserutils_filter_create("UTF-8", myrealloc, NULL, &input) == + PARSERUTILS_OK); + + params.encoding.name = "GBK"; + assert(parserutils_filter_setopt(input, + PARSERUTILS_FILTER_SET_ENCODING, ¶ms) == + PARSERUTILS_BADENCODING); + + params.encoding.name = "GBK"; + assert(parserutils_filter_setopt(input, + PARSERUTILS_FILTER_SET_ENCODING, ¶ms) == + PARSERUTILS_BADENCODING); + + parserutils_filter_destroy(input); + + assert(parserutils_finalise(myrealloc, NULL) == PARSERUTILS_OK); + + printf("PASS\n"); + + return 0; +} |