From: <rsbecker@nexbridge.com>
To: "'Jeff King'" <peff@peff.net>
Cc: <git@vger.kernel.org>
Subject: RE: [BUG] Git 2.43.0-rc0 - t4216 unpack(Q) invalid type
Date: Fri, 3 Nov 2023 12:07:17 -0400 [thread overview]
Message-ID: <007f01da0e6f$d5031a40$7f094ec0$@nexbridge.com> (raw)
In-Reply-To: <20231103155220.GA1470570@coredump.intra.peff.net>
On November 3, 2023, Jeff King <peff@peff.net> wrote:
>On Fri, Nov 03, 2023 at 10:50:19AM -0400, rsbecker@nexbridge.com wrote:
>
>> In RC0, the following tests are failing (with verbose). They look like
>> the same root cause. Unpack("Q>".... What version does git now require for perl?
>> I have v5.30.3 available, nothing more recent.
>
>The perl used in the test suite is supposed to be vanilla enough to support any
>ancient version. The perl5 Git import doesn't have version tags that go back that far,
>but the quadwords in pack/unpack go back at least to a commit from 1998.
>
>So I suspect this is not a version issue, but rather a build-time config one. The docs
>say:
>
> Q An unsigned quad value.
> (Quads are available only if your system supports 64-bit integer
> values _and_ if Perl has been compiled to support those. Raises
> an exception otherwise.)
>
>It would probably be possible to rewrite the use of "Q" here to grab two 32-bit
>values instead. But I'd guess that on your system it is not as simple as a shift-and-
>add to then treat them as a 64-bit value, since presumably the problem is that perl's
>ints are all strictly 32-bit.
>
>What does this script produce for you:
>
> perl -e '
> my $bytes = "\1\2\3\4\5\6\7\8";
> my $q = eval { unpack("Q>", $bytes) };
> print "Q = ", defined($q) ? $q : "($@)", "\n";
> my ($n1, $n2) = unpack("NN", $bytes);
> print "n1 = $n1\n";
> print "n2 = $n2\n";
> print "computed quad = ", ($n1 << 32) | $n2, "\n";
> '
>
>I get:
>
> Q = 72623859790382904
> n1 = 16909060
> n2 = 84281144
> computed quad = 72623859790382904
>
>but I'm guessing you get an exception report for Q, and that the computed quad is
>probably equal to n2 (the shift of n1 goes totally off the end).
>
>We may not be without hope, though. These 64-bit values are file offsets we're
>reading from the chunk files. The format naturally uses 64-bit values here to
>accommodate arbitrarily large files. But in our tests, the offsets are all going to be
>relatively small. So our "$n1" in practice will always be 0.
>
>> This same problem also happens in t5318, t5319, t5324
>
>Yep. The offending code is in lib-chunk.sh, so the new tests added in all of those
>scripts which use it will run into the same problem.
What I get from Perl is
$ perl -e '
> my $bytes = "\1\2\3\4\5\6\7\8";
> my $q = eval { unpack("Q>", $bytes) };
> print "Q = ", defined($q) ? $q : "($@)", "\n";
> my ($n1, $n2) = unpack("NN", $bytes);
> print "n1 = $n1\n";
> print "n2 = $n2\n";
> print "computed quad = ", ($n1 << 32) | $n2, "\n"; '
Q = (Invalid type 'Q' in unpack at -e line 3.
)
n1 = 16909060
n2 = 84281144
computed quad = 84281144
Because perl itself is 32-bit, not 64-bit on this platform. So even moving git to 64-bit will not correct the issue.
next prev parent reply other threads:[~2023-11-03 16:07 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-03 14:50 [BUG] Git 2.43.0-rc0 - t4216 unpack(Q) invalid type rsbecker
2023-11-03 15:01 ` rsbecker
2023-11-03 15:52 ` Jeff King
2023-11-03 16:01 ` rsbecker
2023-11-03 16:20 ` [PATCH] t: avoid perl's pack/unpack "Q" specifier Jeff King
2023-11-04 1:47 ` Junio C Hamano
2023-11-04 4:59 ` Jeff King
2023-11-03 16:07 ` rsbecker [this message]
2023-11-03 16:21 ` [BUG] Git 2.43.0-rc0 - t4216 unpack(Q) invalid type Jeff King
2023-11-03 19:18 ` rsbecker
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='007f01da0e6f$d5031a40$7f094ec0$@nexbridge.com' \
--to=rsbecker@nexbridge.com \
--cc=git@vger.kernel.org \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).