summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNelson Elhage <nelhage@nelhage.com>2018-08-16 15:10:51 +0000
committerNelson Elhage <nelhage@nelhage.com>2018-08-16 15:10:51 +0000
commitf556dea6e2ed885154dc29f6cef0b045e3d662c0 (patch)
treee1c2c16f10c7bd612993639e02e1af19d8aa5fd3
parentb8d4578abbc194afa63e15aa10665b9d3aa9c921 (diff)
downloadlibgit2-f556dea6e2ed885154dc29f6cef0b045e3d662c0.tar.gz
Add a proper write loop
-rw-r--r--fuzzers/config_file_fuzzer.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/fuzzers/config_file_fuzzer.c b/fuzzers/config_file_fuzzer.c
index 03009c8af..30a47bf2e 100644
--- a/fuzzers/config_file_fuzzer.c
+++ b/fuzzers/config_file_fuzzer.c
@@ -13,6 +13,7 @@
#include <stdio.h>
#include <unistd.h>
#include <limits.h>
+#include <errno.h>
#define UNUSED(x) (void)(x)
@@ -46,6 +47,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
{
git_config *cfg = NULL;
int err = 0;
+ size_t total = 0;
if (ftruncate(fd, 0) !=0 ) {
abort();
@@ -53,8 +55,14 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
if (lseek(fd, 0, SEEK_SET) != 0) {
abort();
}
- if ((size_t)write(fd, data, size) != size) {
- abort();
+
+ while (total < size) {
+ ssize_t written = write(fd, data, size);
+ if (written < 0 && errno != EINTR)
+ abort();
+ if (written < 0)
+ continue;
+ total += written;
}
err = git_config_open_ondisk(&cfg, path);