public inbox for git@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] last-modified: verify revision argument is a commit-ish
@ 2026-01-12 16:17 Toon Claes
  2026-01-12 20:23 ` Junio C Hamano
                   ` (2 more replies)
  0 siblings, 3 replies; 55+ messages in thread
From: Toon Claes @ 2026-01-12 16:17 UTC (permalink / raw)
  To: git; +Cc: Patrick Steinhardt, Gusted, Toon Claes

Passing a tree OID to git-last-modified(1) would trigger BUG behavior.

    git last-modified HEAD^{tree}
    BUG: builtin/last-modified.c:456: paths remaining beyond boundary in last-modified

Fix this error by verifying the parsed revision is peels to a
commit-ish.

While at it, also fix a memory leak in populate_paths_from_revs().

Reported-by: Gusted <gusted@codeberg.org>
Signed-off-by: Toon Claes <toon@iotcl.com>
---
Recently there was a bug reported[1] passing a tree OID triggers a BUG:

    $ git last-modified fb06ce04173d47aaaa498385621cba8b8dfd7584
    BUG: builtin/last-modified.c:456: paths remaining beyond boundary in last-modified
    [1]    690163 IOT instruction (core dumped)  git last-modified

    `fb06ce04173d47aaaa498385621cba8b8dfd7584` is the tree commit id of web_src. I
    suppose this should've returned a nice error message or blank output.

Fix this bug by checking the revision argument.

[1]: https://lore.kernel.org/git/03f96860-29fc-42a7-a220-c3ec65eb8516@codeberg.org/
---
 builtin/last-modified.c  | 15 +++++++++++----
 t/t8020-last-modified.sh |  5 +++++
 2 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/builtin/last-modified.c b/builtin/last-modified.c
index c80f0535f6..cac94e384d 100644
--- a/builtin/last-modified.c
+++ b/builtin/last-modified.c
@@ -123,7 +123,7 @@ static void add_path_from_diff(struct diff_queue_struct *q,
 
 static int populate_paths_from_revs(struct last_modified *lm)
 {
-	int num_interesting = 0;
+	int num_interesting = 0, ret = 0;
 	struct diff_options diffopt;
 
 	/*
@@ -145,8 +145,15 @@ static int populate_paths_from_revs(struct last_modified *lm)
 		if (obj->item->flags & UNINTERESTING)
 			continue;
 
-		if (num_interesting++)
-			return error(_("last-modified can only operate on one tree at a time"));
+		if (num_interesting++) {
+			ret = error(_("last-modified can only operate on one tree at a time"));
+			break;
+		}
+
+		if (!repo_peel_to_type(lm->rev.repo, obj->path, 0, obj->item, OBJ_COMMIT)) {
+			ret = error(_("revision argument is not a commit-ish"));
+			break;
+		}
 
 		diff_tree_oid(lm->rev.repo->hash_algo->empty_tree,
 			      &obj->item->oid, "", &diffopt);
@@ -154,7 +161,7 @@ static int populate_paths_from_revs(struct last_modified *lm)
 	}
 	clear_pathspec(&diffopt.pathspec);
 
-	return 0;
+	return ret;
 }
 
 static void last_modified_emit(struct last_modified *lm,
diff --git a/t/t8020-last-modified.sh b/t/t8020-last-modified.sh
index 50f4312f71..d0d52add05 100755
--- a/t/t8020-last-modified.sh
+++ b/t/t8020-last-modified.sh
@@ -235,4 +235,9 @@ test_expect_success 'last-modified complains about unknown arguments' '
 	grep "unknown last-modified argument: --foo" err
 '
 
+test_expect_success 'last-modified expects commit-ish' '
+	test_must_fail git last-modified HEAD^{tree} 2>err &&
+	grep "revision argument is not a commit-ish" err
+'
+
 test_done

---
base-commit: d529f3a197364881746f558e5652f0236131eb86
change-id: 20260112-toon-last-modified-tree-fdd96b2feaf7


^ permalink raw reply related	[flat|nested] 55+ messages in thread

end of thread, other threads:[~2026-02-06 15:55 UTC | newest]

Thread overview: 55+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-01-12 16:17 [PATCH] last-modified: verify revision argument is a commit-ish Toon Claes
2026-01-12 20:23 ` Junio C Hamano
2026-01-13  6:54 ` Patrick Steinhardt
2026-01-14 10:24 ` [PATCH v2 0/3] Fix git-last-modified(1) bug triggered when passing a tree-ish Toon Claes
2026-01-14 10:24   ` [PATCH v2 1/3] last-modified: rewrite error message when more than one revision given Toon Claes
2026-01-14 10:56     ` Patrick Steinhardt
2026-01-15 11:33       ` Toon Claes
2026-01-15 11:54         ` Patrick Steinhardt
2026-01-15 14:34           ` Kristoffer Haugsbakk
2026-01-16  7:09             ` Patrick Steinhardt
2026-01-16 12:30               ` Toon Claes
2026-01-16 17:16               ` Junio C Hamano
2026-01-19  6:57                 ` Patrick Steinhardt
2026-01-25 11:26               ` Kristoffer Haugsbakk
2026-01-15 14:34         ` Kristoffer Haugsbakk
2026-01-14 10:24   ` [PATCH v2 2/3] last-modified: remove double error message Toon Claes
2026-01-14 10:56     ` Patrick Steinhardt
2026-01-14 10:24   ` [PATCH v2 3/3] last-modified: verify revision argument is a commit-ish Toon Claes
2026-01-14 10:56     ` Patrick Steinhardt
2026-01-15 16:02     ` Kristoffer Haugsbakk
2026-01-15 16:35       ` Junio C Hamano
2026-01-16 13:11       ` Toon Claes
2026-01-16 13:08   ` [PATCH v3 0/4] Fix git-last-modified(1) bug triggered when passing a tree-ish Toon Claes
2026-01-16 13:08     ` [PATCH v3 1/4] last-modified: rewrite error message when more than one revision given Toon Claes
2026-01-16 17:31       ` Junio C Hamano
2026-01-16 13:08     ` [PATCH v3 2/4] last-modified: fix memory leak when more than one revision is given Toon Claes
2026-01-16 13:08     ` [PATCH v3 3/4] last-modified: remove double error message Toon Claes
2026-01-16 18:22       ` Junio C Hamano
2026-01-16 13:08     ` [PATCH v3 4/4] last-modified: verify revision argument is a commit-ish Toon Claes
2026-01-16 18:24       ` Junio C Hamano
2026-01-23 14:33     ` [PATCH v4 0/4] Fix git-last-modified(1) bug triggered when passing a tree-ish Toon Claes
2026-01-23 14:33       ` [PATCH v4 1/4] last-modified: rewrite error message when more than one revision given Toon Claes
2026-01-23 17:01         ` Junio C Hamano
2026-01-23 14:33       ` [PATCH v4 2/4] last-modified: fix memory leak when more than one revision is given Toon Claes
2026-01-23 17:04         ` Junio C Hamano
2026-01-23 14:33       ` [PATCH v4 3/4] last-modified: remove double error message Toon Claes
2026-01-23 17:07         ` Junio C Hamano
2026-01-23 14:33       ` [PATCH v4 4/4] last-modified: verify revision argument is a commit-ish Toon Claes
2026-01-23 17:12         ` Junio C Hamano
2026-01-23 17:31         ` Junio C Hamano
2026-01-27 13:26       ` [PATCH v5 0/4] Fix git-last-modified(1) bug triggered when passing a tree-ish Toon Claes
2026-01-27 13:26         ` [PATCH v5 1/4] last-modified: rewrite error message when more than one commit given Toon Claes
2026-01-27 13:26         ` [PATCH v5 2/4] last-modified: fix memory leak when more than one commit is given Toon Claes
2026-01-27 13:26         ` [PATCH v5 3/4] last-modified: remove double error message Toon Claes
2026-01-27 13:26         ` [PATCH v5 4/4] last-modified: verify revision argument is a commit-ish Toon Claes
2026-01-27 22:34         ` [PATCH v5 0/4] Fix git-last-modified(1) bug triggered when passing a tree-ish Junio C Hamano
2026-01-29 14:59           ` Toon Claes
2026-01-30 14:26         ` [PATCH v6 " Toon Claes
2026-01-30 14:26           ` [PATCH v6 1/4] last-modified: rewrite error message when more than one commit given Toon Claes
2026-01-30 14:26           ` [PATCH v6 2/4] last-modified: fix memory leak when more than one commit is given Toon Claes
2026-01-30 14:26           ` [PATCH v6 3/4] last-modified: remove double error message Toon Claes
2026-01-30 14:26           ` [PATCH v6 4/4] last-modified: verify revision argument is a commit-ish Toon Claes
2026-02-06 15:55             ` Patrick Steinhardt
2026-01-30 17:07           ` [PATCH v6 0/4] Fix git-last-modified(1) bug triggered when passing a tree-ish Junio C Hamano
2026-02-06 15:55             ` Patrick Steinhardt

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox