diff options
author | John Mark Bell <jmb@netsurf-browser.org> | 2008-11-09 12:42:11 +0000 |
---|---|---|
committer | John Mark Bell <jmb@netsurf-browser.org> | 2008-11-09 12:42:11 +0000 |
commit | fc80fc27bf89226b96bdc6ddbe1847c3908ea6a2 (patch) | |
tree | 9337ca9362c57cabff42e547b53e82c9f54dde60 /test/regression | |
parent | e53a5011237467c73c72b338570e4a455d2d1ef6 (diff) | |
download | libparserutils-fc80fc27bf89226b96bdc6ddbe1847c3908ea6a2.tar.gz libparserutils-fc80fc27bf89226b96bdc6ddbe1847c3908ea6a2.tar.bz2 |
Fix double free of filter read codec when resetting to an unsupported encoding.
svn path=/trunk/libparserutils/; revision=5657
Diffstat (limited to 'test/regression')
-rw-r--r-- | test/regression/filter-badenc-segv.c | 50 |
1 files changed, 50 insertions, 0 deletions
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; +} |