[PATCH v5 04/12] replay: parse commits before dereferencing them
- From
Patrick Steinhardt <ps@pks.im>
- Date
- Oct 21, 2025, 14:15 UTC
- Message-ID
- <20251021-b4-pks-history-builtin-v5-4-78d23f578fe6@pks.im>
- In-Reply-To
- <20251021-b4-pks-history-builtin-v5-0-78d23f578fe6@pks.im>
When looking up a commit it may not be parsed yet. Callers that wish to access the fields of `struct commit` have to call `repo_parse_commit()` first so that it is guaranteed to be populated.
We didn't yet care about doing so, because code paths that lead to `pick_regular_commit()` in "builtin/replay.c" already implicitly parsed the commits. But now that the function is exposed to outside callers it's quite easy to get this wrong.
Make the function easier to use by calling `repo_parse_commit()`.
Signed-off-by: Patrick Steinhardt <ps@pks.im> --- replay.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/replay.c b/replay.c index 13d75d80543..c3628d2488b 100644 --- a/replay.c +++ b/replay.c @@ -90,6 +90,9 @@ struct commit *replay_pick_regular_commit(struct repository *repo, struct commit *base, *replayed_base; struct tree *pickme_tree, *base_tree; + if (repo_parse_commit(repo, pickme)) + return NULL; + base = pickme->parents->item; replayed_base = mapped_commit(replayed_commits, base, onto);
-- 2.51.1.851.g4ebd6896fd.dirty