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

Re: [PATCH 2/2] sha1-lookup: fix handling of duplicates in sha1_pos()

From
Eric Sunshine <sunshine@sunshineco.com>
Date
Oct 1, 2014, 14:12 UTC
Message-ID
<CAPig+cQADVFECOev+ZW9W94=Xy5nHVd4je8kuTzS53MjhxaVEw@mail.gmail.com>
In-Reply-To
<542BCCB9.4050908@web.de>
On Wed, Oct 1, 2014 at 5:43 AM, René Scharfe <l.s.r@web.de> wrote:
Show 55 quoted lines
> If the first 18 bytes of the SHA1's of all entries are the same then
> sha1_pos() dies and reports that the lower and upper limits of the
> binary search were the same that this wasn't supposed to happen.  This
> is wrong because the remaining two bytes could still differ.
>
> Furthermore: It wouldn't be a problem if they actually were the same,
> i.e. if all entries have the same SHA1.  The code already handles
> duplicates just fine otherwise.  Simply remove the erroneous check.
>
> Signed-off-by: Rene Scharfe <l.s.r@web.de>
> ---
>  sha1-lookup.c         |  2 --
>  t/t0064-sha1-array.sh | 20 ++++++++++++++++++++
>  2 files changed, 20 insertions(+), 2 deletions(-)
>
> diff --git a/sha1-lookup.c b/sha1-lookup.c
> index 2dd8515..5f06921 100644
> --- a/sha1-lookup.c
> +++ b/sha1-lookup.c
> @@ -84,8 +84,6 @@ int sha1_pos(const unsigned char *sha1, void *table, size_t nr,
>                                 die("BUG: assertion failed in binary search");
>                         }
>                 }
> -               if (18 <= ofs)
> -                       die("cannot happen -- lo and hi are identical");
>         }
>
>         do {
> diff --git a/t/t0064-sha1-array.sh b/t/t0064-sha1-array.sh
> index bd68789..3fcb8d8 100755
> --- a/t/t0064-sha1-array.sh
> +++ b/t/t0064-sha1-array.sh
> @@ -61,4 +61,24 @@ test_expect_success 'lookup with duplicates' '
>         test "$n" -le 3
>  '
>
> +test_expect_success 'lookup with almost duplicate values' '
> +       {
> +               echo "append 5555555555555555555555555555555555555555" &&
> +               echo "append 555555555555555555555555555555555555555f" &&
> +               echo20 "lookup " 55
> +       } | test-sha1-array >actual &&
> +       n=$(cat actual) &&
> +       test "$n" -eq 0
> +'
> +
> +test_expect_success 'lookup with single duplicate value' '
> +       {
> +               echo20 "append " 55 55 &&
> +               echo20 "lookup " 55
> +       } | test-sha1-array >actual &&
> +       n=$(cat actual) &&
> +       test "$n" -ge 0 &&
> +       test "$n" -le 1
> +'

An alternative would be to introduce these two tests in patch 1/2 as test_expect_failure and flip them to test_expect_success in this patch which fixes the problem.

> +
>  test_done
> --
> 2.1.2
Previous: Jeff KingNext: Eric Sunshine
Message 6 of 9 in “sha1-array: add test-sha1-array and basic tests”
  1. 1/2 sha1-array: add test-sha1-array and basic testsRené Scharfe, Oct 1, 2014
  2. 2/2 sha1-lookup: fix handling of duplicates in sha1_pos()René Scharfe, Oct 1, 2014
  3. Jeff KingOct 1, 2014
  4. René ScharfeOct 1, 2014
  5. Jeff KingOct 1, 2014
  6. Eric SunshineOct 1, 2014
  7. Eric SunshineOct 1, 2014
  8. René ScharfeOct 1, 2014
  9. Jeff KingOct 1, 2014

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.