From fe5babacd6a2a8f358603404ee27327c20830c03 Mon Sep 17 00:00:00 2001 From: "Kirill A. Shutemov" Date: Thu, 30 Jun 2011 00:16:23 +0300 Subject: [PATCH] filebuf: fix endless loop on writing buf > WRITE_BUFFER_SIZE Signed-off-by: Kirill A. Shutemov --- src/filebuf.c | 1 + tests/t00-core.c | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/src/filebuf.c b/src/filebuf.c index ca13e6181..01b36bcff 100644 --- a/src/filebuf.c +++ b/src/filebuf.c @@ -331,6 +331,7 @@ int git_filebuf_write(git_filebuf *file, const void *buff, size_t len) error = file->write(file, buf, len); if (error < GIT_SUCCESS) return git__rethrow(error, "Failed to write to buffer"); + return GIT_SUCCESS; } } } diff --git a/tests/t00-core.c b/tests/t00-core.c index aa0008576..31ed8c38b 100644 --- a/tests/t00-core.c +++ b/tests/t00-core.c @@ -692,6 +692,19 @@ BEGIN_TEST(filebuf1, "make sure GIT_FILEBUF_APPEND works as expected") must_pass(gitfo_unlink(test)); END_TEST +BEGIN_TEST(filebuf2, "make sure git_filebuf_write writes large buffer correctly") + git_filebuf file; + char test[] = "test"; + unsigned char buf[4096 * 4]; /* 2 * WRITE_BUFFER_SIZE */ + + memset(buf, 0xfe, sizeof(buf)); + must_pass(git_filebuf_open(&file, test, 0)); + must_pass(git_filebuf_write(&file, buf, sizeof(buf))); + must_pass(git_filebuf_commit(&file)); + + must_pass(gitfo_unlink(test)); +END_TEST + BEGIN_SUITE(core) ADD_TEST(string0); ADD_TEST(string1); @@ -716,4 +729,5 @@ BEGIN_SUITE(core) ADD_TEST(filebuf0); ADD_TEST(filebuf1); + ADD_TEST(filebuf2); END_SUITE