git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 07/11] log: fix -L bounds checking bug

From
Eric Sunshine <sunshine@sunshineco.com>
Date
Jul 31, 2013, 08:15 UTC
Message-ID
<1375258545-42240-8-git-send-email-sunshine@sunshineco.com>
In-Reply-To
<1375258545-42240-1-git-send-email-sunshine@sunshineco.com>

When 12da1d1f added -L support to git-log, a broken bounds check was copied from git-blame -L which incorrectly allows -LX to extend one line past end of file without reporting an error. Instead, it generates an empty range. Fix this bug.

Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
---
 line-log.c          | 4 ++--
 t/t4211-line-log.sh | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/line-log.c b/line-log.c
index c2d01dc..1c3ac8d 100644
--- a/line-log.c
+++ b/line-log.c
@@ -594,13 +594,13 @@ parse_lines(struct commit *commit, const char *prefix, struct string_list *args)
 				    lines, &begin, &end,
 				    full_name))
 			die("malformed -L argument '%s'", range_part);
+		if (lines < end || ((lines || begin) && lines < begin))
+			die("file %s has only %lu lines", name_part, lines);
 		if (begin < 1)
 			begin = 1;
 		if (end < 1)
 			end = lines;
 		begin--;
-		if (lines < end || lines < begin)
-			die("file %s has only %ld lines", name_part, lines);
 		line_log_data_insert(&ranges, full_name, begin, end);
 
 		free_filespec(spec);
diff --git a/t/t4211-line-log.sh b/t/t4211-line-log.sh
index 769ac68..b01b3dd 100755
--- a/t/t4211-line-log.sh
+++ b/t/t4211-line-log.sh
@@ -69,7 +69,7 @@ test_expect_success '-L X (X == nlines)' '
 	git log -L $n:b.c
 '
 
-test_expect_failure '-L X (X == nlines + 1)' '
+test_expect_success '-L X (X == nlines + 1)' '
 	n=$(expr $(wc -l <b.c) + 1) &&
 	test_must_fail git log -L $n:b.c
 '
-- 
1.8.3.4.1120.gc240c48
Previous: Eric SunshineNext: Eric Sunshine
Message 12 of 17 in “blame/log -L: additional tests and bug fixes”
  1. 00/11 blame/log -L: additional tests and bug fixesEric Sunshine, Jul 31, 2013
  2. 01/11 t8001/t8002: blame: decompose overly-large testEric Sunshine, Jul 31, 2013
  3. 02/11 t8001/t8002: blame: demonstrate -L bounds checking bugEric Sunshine, Jul 31, 2013
  4. Junio C HamanoAug 5, 2013
  5. Eric SunshineAug 5, 2013
  6. Eric SunshineAug 5, 2013
  7. Junio C HamanoAug 5, 2013
  8. 03/11 t8001/t8002: blame: add empty file & partial-line testsEric Sunshine, Jul 31, 2013
  9. 04/11 blame: fix -L bounds checking bugEric Sunshine, Jul 31, 2013
  10. 05/11 t4211: log: demonstrate -L bounds checking bugEric Sunshine, Jul 31, 2013
  11. 06/11 t4211: retire soon-to-be unimplementable testsEric Sunshine, Jul 31, 2013
  12. 07/11 log: fix -L bounds checking bugEric Sunshine, Jul 31, 2013
  13. 08/11 t8001/t8002: blame: demonstrate acceptance of bogus -LX,+0 and -LX,-0Eric Sunshine, Jul 31, 2013
  14. 09/11 blame: reject empty ranges -LX,+0 and -LX,-0Eric Sunshine, Jul 31, 2013
  15. 10/11 t8001/t8002: blame: demonstrate acceptance of bogus -L,+0 and -L,-0Eric Sunshine, Jul 31, 2013
  16. 11/11 blame: reject empty ranges -L,+0 and -L,-0Eric Sunshine, Jul 31, 2013
  17. Thomas RastAug 3, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.