From 5a369eeb6027167ae27cc82b40f9236adc87cdf3 Mon Sep 17 00:00:00 2001 From: davkor Date: Tue, 23 Feb 2021 16:06:11 +0000 Subject: Added initial fuzzer for integration with OSS-Fuzz. --- fuzz/fuzz-conv.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 fuzz/fuzz-conv.c (limited to 'fuzz') diff --git a/fuzz/fuzz-conv.c b/fuzz/fuzz-conv.c new file mode 100644 index 0000000..5817e5d --- /dev/null +++ b/fuzz/fuzz-conv.c @@ -0,0 +1,51 @@ +#include +#include +#include +#include "wc.h" + +char *get_null_terminated(const uint8_t *data, size_t size) { + char *new_str = (char *)malloc(size+1); + if (new_str == NULL){ + return NULL; + } + memcpy(new_str, data, size); + new_str[size] = '\0'; + return new_str; +} + +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size){ + if (size < 30) { + return 0; + } + + char *new_str1 = get_null_terminated(data, 20); + data += 20; size -= 20; + char *new_str2 = get_null_terminated(data, size); + + wc_ces old, from, to; + from = wc_guess_charset_short(new_str1,0); + to = wc_guess_charset_short(new_str2, 0); + + char filename[256]; + sprintf(filename, "/tmp/libfuzzer.%d", getpid()); + + FILE *fp = fopen(filename, "wb"); + if (!fp) { + return 0; + } + fwrite(data, size, 1, fp); + fclose(fp); + + FILE *f = fopen(filename, "r"); + Str s = Strfgetall(f); + wc_Str_conv_with_detect(s, &from, from, to); + if (s != NULL) { + Strfree(s); + } + + unlink(filename); + + free(new_str1); + free(new_str2); + return 0; +} -- cgit v1.2.3