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

Re: [PATCH 02/11] t8001/t8002: blame: demonstrate -L bounds checking bug

From
Junio C Hamano <gitster@pobox.com>
Date
Aug 5, 2013, 19:29 UTC
Message-ID
<7v4nb4j5qu.fsf@alter.siamese.dyndns.org>
In-Reply-To
<1375258545-42240-3-git-send-email-sunshine@sunshineco.com>
Eric Sunshine <sunshine@sunshineco.com> writes:
Show 45 quoted lines
> A bounds checking bug allows the X in -LX to extend one line past the
> end of file. For example, given a file with 5 lines, -L6 is accepted as
> valid. Demonstrate this problem.
>
> While here, also add tests to check that the remaining cases of X and Y
> in -LX,Y are handled correctly at and in the vicinity of end-of-file.
>
> Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
> ---
>  t/annotate-tests.sh | 22 ++++++++++++++++++++++
>  1 file changed, 22 insertions(+)
>
> diff --git a/t/annotate-tests.sh b/t/annotate-tests.sh
> index 3524eaf..02fbbf1 100644
> --- a/t/annotate-tests.sh
> +++ b/t/annotate-tests.sh
> @@ -225,10 +225,32 @@ test_expect_success 'blame -L /RE/,-N' '
>  	check_count -L/99/,-3 B 1 B2 1 D 1
>  '
>  
> +# 'file' ends with an incomplete line, so 'wc' reports one fewer lines than
> +# git-blame sees, hence the last line is actually $(wc...)+1.
> +test_expect_success 'blame -L X (X == nlines)' '
> +	n=$(expr $(wc -l <file) + 1) &&
> +	check_count -L$n C 1
> +'
> +
> +test_expect_failure 'blame -L X (X == nlines + 1)' '
> +	n=$(expr $(wc -l <file) + 2) &&
> +	test_must_fail $PROG -L$n file
> +'
> +
>  test_expect_success 'blame -L X (X > nlines)' '
>  	test_must_fail $PROG -L12345 file
>  '
> +test_expect_success 'blame -L ,Y (Y == nlines)' '
> +	n=$(expr $(wc -l <file) + 1) &&
> +	check_count -L,$n A 1 B 1 B1 1 B2 1 "A U Thor" 1 C 1 D 1 E 1
> +'
> +
> +test_expect_success 'blame -L ,Y (Y == nlines + 1)' '
> +	n=$(expr $(wc -l <file) + 2) &&
> +	test_must_fail $PROG -L,$n file
> +'
> +
This is somewhat curious.

Does the problem triggers only on a file that ends with an incomplete line, or the test was inserted at this location only because it was convenient and the problem exists with or without the incomplete final line?

I am guessing that it is the latter.
Thanks.
>  test_expect_success 'blame -L ,Y (Y > nlines)' '
>  	test_must_fail $PROG -L,12345 file
>  '
Previous: Eric SunshineNext: Eric Sunshine
Message 4 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.