summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@edwardthomson.com>2018-02-01 05:11:05 -0800
committerEdward Thomson <ethomson@edwardthomson.com>2018-02-09 10:16:46 +0000
commit35ed256bb7c971e56f3f544c3529a53e39f39b28 (patch)
tree39b6d6548a2918b70998b5eb60f44ce5d465693f
parent59d99adcdeef4b08c5aec7fb3b000831e4fe21c5 (diff)
downloadlibgit2-35ed256bb7c971e56f3f544c3529a53e39f39b28.tar.gz
git_odb__hashobj: provide errors messages on failures
Provide error messages on hash failures: assert when given invalid input instead of failing with a user error; provide error messages on program errors.
-rw-r--r--src/odb.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/odb.c b/src/odb.c
index af38a8ef3..47fdd13dd 100644
--- a/src/odb.c
+++ b/src/odb.c
@@ -100,11 +100,15 @@ int git_odb__hashobj(git_oid *id, git_rawobj *obj)
assert(id && obj);
- if (!git_object_typeisloose(obj->type))
+ if (!git_object_typeisloose(obj->type)) {
+ giterr_set(GITERR_INVALID, "invalid object type");
return -1;
+ }
- if (!obj->data && obj->len != 0)
+ if (!obj->data && obj->len != 0) {
+ giterr_set(GITERR_INVALID, "invalid object");
return -1;
+ }
hdrlen = git_odb__format_object_header(header, sizeof(header), obj->len, obj->type);
@@ -806,7 +810,7 @@ int git_odb_exists_prefix(
git_oid *out, git_odb *db, const git_oid *short_id, size_t len)
{
int error;
- git_oid key = {{0}};
+ git_oid key = {{0}};
assert(db && short_id);
@@ -1106,7 +1110,7 @@ static int odb_otype_fast(git_otype *type_p, git_odb *db, const git_oid *id)
*type_p = object->cached.type;
return 0;
}
-
+
error = odb_read_header_1(&_unused, type_p, db, id, false);
if (error == GIT_PASSTHROUGH) {