mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-03 04:01:41 +00:00
revwalk: refuse push of non-commit objects
Check the type of the pushed object immediately instead of starting the walk and failing in between.
This commit is contained in:
parent
2b175ca972
commit
4e323ef0a8
@ -264,12 +264,7 @@ static int commit_parse(git_revwalk *walk, commit_object *commit)
|
|||||||
|
|
||||||
if ((error = git_odb_read(&obj, walk->odb, &commit->oid)) < 0)
|
if ((error = git_odb_read(&obj, walk->odb, &commit->oid)) < 0)
|
||||||
return error;
|
return error;
|
||||||
|
assert(obj->raw.type == GIT_OBJ_COMMIT);
|
||||||
if (obj->raw.type != GIT_OBJ_COMMIT) {
|
|
||||||
git_odb_object_free(obj);
|
|
||||||
giterr_set(GITERR_INVALID, "Failed to parse commit. Object is no commit object");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
error = commit_quick_parse(walk, commit, &obj->raw);
|
error = commit_quick_parse(walk, commit, &obj->raw);
|
||||||
git_odb_object_free(obj);
|
git_odb_object_free(obj);
|
||||||
@ -515,8 +510,21 @@ static int process_commit_parents(git_revwalk *walk, commit_object *commit)
|
|||||||
|
|
||||||
static int push_commit(git_revwalk *walk, const git_oid *oid, int uninteresting)
|
static int push_commit(git_revwalk *walk, const git_oid *oid, int uninteresting)
|
||||||
{
|
{
|
||||||
|
git_object *obj;
|
||||||
|
git_otype type;
|
||||||
commit_object *commit;
|
commit_object *commit;
|
||||||
|
|
||||||
|
if (git_object_lookup(&obj, walk->repo, oid, GIT_OBJ_ANY) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
type = git_object_type(obj);
|
||||||
|
git_object_free(obj);
|
||||||
|
|
||||||
|
if (type != GIT_OBJ_COMMIT) {
|
||||||
|
giterr_set(GITERR_INVALID, "Object is no commit object");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
commit = commit_lookup(walk, oid);
|
commit = commit_lookup(walk, oid);
|
||||||
if (commit == NULL)
|
if (commit == NULL)
|
||||||
return -1; /* error already reported by failed lookup */
|
return -1; /* error already reported by failed lookup */
|
||||||
|
@ -179,3 +179,11 @@ void test_revwalk_basic__push_head_hide_ref_nobase(void)
|
|||||||
/* git log HEAD --oneline --not refs/heads/packed | wc -l => 7 */
|
/* git log HEAD --oneline --not refs/heads/packed | wc -l => 7 */
|
||||||
cl_assert(i == 7);
|
cl_assert(i == 7);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void test_revwalk_basic__disallow_non_commit(void)
|
||||||
|
{
|
||||||
|
git_oid oid;
|
||||||
|
|
||||||
|
cl_git_pass(git_oid_fromstr(&oid, "521d87c1ec3aef9824daf6d96cc0ae3710766d91"));
|
||||||
|
cl_git_fail(git_revwalk_push(_walk, &oid));
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user