diff options
author | Tatsuya Kinoshita <tats@debian.org> | 2021-03-25 09:55:49 +0000 |
---|---|---|
committer | Tatsuya Kinoshita <tats@debian.org> | 2021-03-25 09:55:49 +0000 |
commit | 5a1059b6f3ab031afa48c5ddcd81392444de53a9 (patch) | |
tree | fc6b03e17fac10683c4d092fb6b135ab5991bd5e /fuzz/fuzz-conv.c | |
parent | Update ChangeLog (diff) | |
download | w3m-5a1059b6f3ab031afa48c5ddcd81392444de53a9.tar.gz w3m-5a1059b6f3ab031afa48c5ddcd81392444de53a9.zip |
Prevent memory leak in fuzzer
Diffstat (limited to 'fuzz/fuzz-conv.c')
-rw-r--r-- | fuzz/fuzz-conv.c | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/fuzz/fuzz-conv.c b/fuzz/fuzz-conv.c index 5414742..ae6d31f 100644 --- a/fuzz/fuzz-conv.c +++ b/fuzz/fuzz-conv.c @@ -9,7 +9,7 @@ char *get_null_terminated(const uint8_t *data, size_t size) { char *new_str = (char *)malloc(size+1); if (new_str == NULL){ - return NULL; + exit(1); } memcpy(new_str, data, size); new_str[size] = '\0'; @@ -57,17 +57,19 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size){ sprintf(filename, "/tmp/libfuzzer.%d", getpid()); FILE *fp = fopen(filename, "wb"); - if (!fp) { - return 0; + if (fp) { + fwrite(data, size, 1, fp); + fclose(fp); } - 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); + if (f) { + Str s = Strfgetall(f); + wc_Str_conv_with_detect(s, &from, from, to); + if (s != NULL) { + Strfree(s); + } + fclose(f); } unlink(filename); |