summaryrefslogtreecommitdiff
path: root/index-pack.c
diff options
context:
space:
mode:
authorNicolas Pitre <nico@cam.org>2008-10-29 23:02:45 (GMT)
committerJunio C Hamano <gitster@pobox.com>2008-11-02 23:22:34 (GMT)
commitd8f325563d85abcd9816311b3a84093b2d1cda9f (patch)
treef564b9bd64fd42b1bc38dfa8b0e80f52c78f60eb /index-pack.c
parent0e8189e2708bc1da08c77c7e1d960f420b6890a5 (diff)
downloadgit-d8f325563d85abcd9816311b3a84093b2d1cda9f.zip
git-d8f325563d85abcd9816311b3a84093b2d1cda9f.tar.gz
git-d8f325563d85abcd9816311b3a84093b2d1cda9f.tar.bz2
better validation on delta base object offsets
In one case, it was possible to have a bad offset equal to 0 effectively pointing a delta onto itself and crashing git after too many recursions. In the other cases, a negative offset could result due to off_t being signed. Catch those. Signed-off-by: Nicolas Pitre <nico@cam.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'index-pack.c')
-rw-r--r--index-pack.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/index-pack.c b/index-pack.c
index 6f89bb9..da03eee 100644
--- a/index-pack.c
+++ b/index-pack.c
@@ -334,7 +334,7 @@ static void *unpack_raw_entry(struct object_entry *obj, union delta_base *delta_
base_offset = (base_offset << 7) + (c & 127);
}
delta_base->offset = obj->idx.offset - base_offset;
- if (delta_base->offset >= obj->idx.offset)
+ if (delta_base->offset <= 0 || delta_base->offset >= obj->idx.offset)
bad_object(obj->idx.offset, "delta base offset is out of bound");
break;
case OBJ_COMMIT: