summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJameson Miller <jamill@microsoft.com>2012-09-26 17:21:32 -0400
committerJameson Miller <jamill@microsoft.com>2012-09-27 13:12:27 -0400
commitaddc9be4fcb88e77107557e991bd92355522d844 (patch)
tree60f4bf02508f6f331d0d72c90cf1b0fcbf8cc162
parent5942bd18bf557cc70873009c4303a421c83f0129 (diff)
downloadlibgit2-addc9be4fcb88e77107557e991bd92355522d844.tar.gz
Fix error hashing empty file.
-rw-r--r--src/odb.c2
-rw-r--r--tests-clar/status/single.c16
2 files changed, 17 insertions, 1 deletions
diff --git a/src/odb.c b/src/odb.c
index d1ffff652..d951bc51b 100644
--- a/src/odb.c
+++ b/src/odb.c
@@ -115,7 +115,7 @@ int git_odb__hashfd(git_oid *out, git_file fd, size_t size, git_otype type)
int hdr_len;
char hdr[64], buffer[2048];
git_hash_ctx *ctx;
- ssize_t read_len = -1;
+ ssize_t read_len = 0;
if (!git_object_typeisloose(type)) {
giterr_set(GITERR_INVALID, "Invalid object type for hash");
diff --git a/tests-clar/status/single.c b/tests-clar/status/single.c
index e900a31d6..292c9120a 100644
--- a/tests-clar/status/single.c
+++ b/tests-clar/status/single.c
@@ -25,5 +25,21 @@ void test_status_single__hash_single_file(void)
cl_assert(git_oid_cmp(&expected_id, &actual_id) == 0);
}
+/* test retrieving OID from an empty file apart from the ODB */
+void test_status_single__hash_single_empty_file(void)
+{
+ static const char file_name[] = "new_empty_file";
+ static const char file_contents[] = "";
+ static const char file_hash[] = "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391";
+
+ git_oid expected_id, actual_id;
+ /* initialization */
+ git_oid_fromstr(&expected_id, file_hash);
+ cl_git_mkfile(file_name, file_contents);
+ cl_set_cleanup(&cleanup__remove_file, (void *)file_name);
+
+ cl_git_pass(git_odb_hashfile(&actual_id, file_name, GIT_OBJ_BLOB));
+ cl_assert(git_oid_cmp(&expected_id, &actual_id) == 0);
+}