1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-05-20 04:06:09 +02:00

parse_object_buffer: don't ignore errors from the object specific parsing functions

In the case of an malformed object, the object specific parsing functions
would return an error, which is currently ignored. The object can be partial
initialized in this case.

This patch make parse_object_buffer propagate such errors.

Signed-off-by: Martin Koegler <mkoegler@auto.tuwien.ac.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Martin Koegler 2008-02-03 22:22:39 +01:00 committed by Junio C Hamano
parent d4fe07f149
commit d0b8c9e561

View File

@ -140,7 +140,8 @@ struct object *parse_object_buffer(const unsigned char *sha1, enum object_type t
if (type == OBJ_BLOB) { if (type == OBJ_BLOB) {
struct blob *blob = lookup_blob(sha1); struct blob *blob = lookup_blob(sha1);
if (blob) { if (blob) {
parse_blob_buffer(blob, buffer, size); if (parse_blob_buffer(blob, buffer, size))
return NULL;
obj = &blob->object; obj = &blob->object;
} }
} else if (type == OBJ_TREE) { } else if (type == OBJ_TREE) {
@ -148,14 +149,16 @@ struct object *parse_object_buffer(const unsigned char *sha1, enum object_type t
if (tree) { if (tree) {
obj = &tree->object; obj = &tree->object;
if (!tree->object.parsed) { if (!tree->object.parsed) {
parse_tree_buffer(tree, buffer, size); if (parse_tree_buffer(tree, buffer, size))
return NULL;
eaten = 1; eaten = 1;
} }
} }
} else if (type == OBJ_COMMIT) { } else if (type == OBJ_COMMIT) {
struct commit *commit = lookup_commit(sha1); struct commit *commit = lookup_commit(sha1);
if (commit) { if (commit) {
parse_commit_buffer(commit, buffer, size); if (parse_commit_buffer(commit, buffer, size))
return NULL;
if (!commit->buffer) { if (!commit->buffer) {
commit->buffer = buffer; commit->buffer = buffer;
eaten = 1; eaten = 1;
@ -165,7 +168,8 @@ struct object *parse_object_buffer(const unsigned char *sha1, enum object_type t
} else if (type == OBJ_TAG) { } else if (type == OBJ_TAG) {
struct tag *tag = lookup_tag(sha1); struct tag *tag = lookup_tag(sha1);
if (tag) { if (tag) {
parse_tag_buffer(tag, buffer, size); if (parse_tag_buffer(tag, buffer, size))
return NULL;
obj = &tag->object; obj = &tag->object;
} }
} else { } else {