commit 46f6a3467a8a363294b271ee81bba8d96be03f91 from: Mark Jamsek date: Tue Dec 31 09:56:38 2024 UTC tog: plug object id leak in resolve_reflist_entry error path ok stsp@ commit - d2483d56ac80deca571cff32a14bef0dd238bfa6 commit + 46f6a3467a8a363294b271ee81bba8d96be03f91 blob - bb66caa58e383b540e51ea5efe6f0c6eba29fb7d blob + 621f9b5789fafceb7c5bc95156ef5dd6b791d901 --- tog/tog.c +++ tog/tog.c @@ -10052,13 +10052,11 @@ resolve_reflist_entry(struct got_object_id **commit_id switch (obj_type) { case GOT_OBJ_TYPE_COMMIT: - *commit_id = obj_id; break; case GOT_OBJ_TYPE_TAG: err = got_object_open_as_tag(&tag, repo, obj_id); if (err) goto done; - free(obj_id); err = got_object_get_type(&obj_type, repo, got_object_tag_get_object_id(tag)); if (err) @@ -10067,9 +10065,9 @@ resolve_reflist_entry(struct got_object_id **commit_id err = got_error(GOT_ERR_OBJ_TYPE); goto done; } - *commit_id = got_object_id_dup( - got_object_tag_get_object_id(tag)); - if (*commit_id == NULL) { + free(obj_id); + obj_id = got_object_id_dup(got_object_tag_get_object_id(tag)); + if (obj_id == NULL) { err = got_error_from_errno("got_object_id_dup"); goto done; } @@ -10082,10 +10080,10 @@ resolve_reflist_entry(struct got_object_id **commit_id done: if (tag) got_object_tag_close(tag); - if (err) { - free(*commit_id); - *commit_id = NULL; - } + if (err == NULL) + *commit_id = obj_id; + else + free(obj_id); return err; }