]> git.ipfire.org Git - thirdparty/git.git/commitdiff
t1450: fix quoting of NUL byte when corrupting pack
authorMartin Ågren <martin.agren@gmail.com>
Sat, 1 Aug 2020 22:06:11 +0000 (00:06 +0200)
committerJunio C Hamano <gitster@pobox.com>
Sun, 2 Aug 2020 00:46:42 +0000 (17:46 -0700)
We use

  printf '\0'

to generate a NUL byte which we then `dd` into the packfile to ensure
that we modify the first byte of the first object, thereby
(probabilistically) invalidating the checksum. Except the single quotes
we're using are interpreted to match with the ones we enclose the whole
test in. So we actually execute

  printf \0

and end up injecting the ASCII code for "0", 0x30, instead.

The comment right above this `printf` invocation says that "at least one
of [the type bits] is not zero, so setting the first byte to 0 is
sufficient". Substituting "0x30" for "0" in that comment won't do: we'd
need to reason about which bits go where and just what the packfile
looks like that we're modifying in this test.

Let's avoid all of that by actually executing

  printf "\0"

to generate a NUL byte, as intended.

Signed-off-by: Martin Ågren <martin.agren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t1450-fsck.sh

index 91a6e34f38173462d44623ce619b4ec744759e9f..45fe4eb8576be065a369b5135c05d65e2af3f697 100755 (executable)
@@ -701,7 +701,7 @@ test_expect_success 'fsck fails on corrupt packfile' '
        # at least one of which is not zero, so setting the first byte to 0 is
        # sufficient.)
        chmod a+w .git/objects/pack/pack-$pack.pack &&
-       printf '\0' | dd of=.git/objects/pack/pack-$pack.pack bs=1 conv=notrunc seek=12 &&
+       printf "\0" | dd of=.git/objects/pack/pack-$pack.pack bs=1 conv=notrunc seek=12 &&
 
        test_when_finished "rm -f .git/objects/pack/pack-$pack.*" &&
        remove_object $hsh &&