summaryrefslogtreecommitdiff
path: root/test/regression
diff options
context:
space:
mode:
authorJohn Mark Bell <jmb@netsurf-browser.org>2008-11-09 12:42:11 +0000
committerJohn Mark Bell <jmb@netsurf-browser.org>2008-11-09 12:42:11 +0000
commitfc80fc27bf89226b96bdc6ddbe1847c3908ea6a2 (patch)
tree9337ca9362c57cabff42e547b53e82c9f54dde60 /test/regression
parente53a5011237467c73c72b338570e4a455d2d1ef6 (diff)
downloadlibparserutils-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.c50
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, &params) ==
+ PARSERUTILS_BADENCODING);
+
+ params.encoding.name = "GBK";
+ assert(parserutils_filter_setopt(input,
+ PARSERUTILS_FILTER_SET_ENCODING, &params) ==
+ PARSERUTILS_BADENCODING);
+
+ parserutils_filter_destroy(input);
+
+ assert(parserutils_finalise(myrealloc, NULL) == PARSERUTILS_OK);
+
+ printf("PASS\n");
+
+ return 0;
+}