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

Re: [PATCH v4 2/5] t5000: test tar files that overflow ustar headers

From
Johannes Sixt <j6t@kdbg.org>
Date
Jul 14, 2016, 20:52 UTC
Message-ID
<3d71cf3a-44c7-0620-0375-fb7ecf2fac13@kdbg.org>
In-Reply-To
<xmqqa8hkrvu5.fsf@gitster.mtv.corp.google.com>
Am 14.07.2016 um 19:08 schrieb Junio C Hamano:
Show 29 quoted lines
> Johannes Sixt <j6t@kdbg.org> writes:
>
>> Am 14.07.2016 um 17:47 schrieb Johannes Schindelin:
>>> On Thu, 30 Jun 2016, Jeff King wrote:
>>>> The ustar format only has room for 11 (or 12, depending on
>>>> some implementations) octal digits for the size and mtime of
>>>> each file. For values larger than this, we have to add pax
>>>> extended headers to specify the real data, and git does not
>>>> yet know how to do so.
>>>>
>>>> [...]
>>>>  t/t5000/19f9c8273ec45a8938e6999cb59b3ff66739902a | Bin 0 -> 2048 bytes
>>>
>>> It appears that this blob cannot be read when sizeof(unsigned long) == 4.
>>> This happens to break the t5000 test on Windows, where that comparison
>>> holds true.
>>
>> The problem occurs in parse_sha1_header_extended(), where the
>> calculation of the size in the object header overflows our 32-bit
>> unsigned long.
>
> OK, then we'd want something that measures how big "unsigned long"
> is, and use it as a lazy prerequisite 64BIT_LONG, tweaking the other
> patch to t0006 the other Johannes sent yesterday.
>
> Dscho?  I'll revert the merge of 'js/t0006-for-v2.9.2' out of
> 'next' so that we can replace it with your newer version, but it
> needs to be massaged to lose the strong linkage with "time", as
> it is no longer "is our time big enough", I would think.

My first thought was that this is not warranted because t0006 is about commit time stamps, but the huge-tar breakage is file sizes, and the cases should be treated differently.

But on second thought, under the hood, both boil down to the size of unsigned long in our implementation. It may make sense to tie both cases to the same prerequisite.

On third thought, however, I think the two requirements could diverge in the future. The file size case should depend on the size of size_t. The timestamp case may become dependent on the size of time_t if we decide to move timestamp handling away from unsigned long: in modern(!) Microsoft SDKs, time_t is 64 bits, but unsigned long is 32 bits, in both the 32-bit and 64-bit environments!

-- Hannes
Previous: Junio C HamanoNext: Jeff King
Message 18 of 42 in “friendlier handling of overflows in archive-tar”
  1. 0/5 friendlier handling of overflows in archive-tarJeff King, Jun 30, 2016
  2. 5/5 archive-tar: drop return valueJeff King, Jun 30, 2016
  3. 3/5 archive-tar: write extended headers for file sizes >= 8GBJeff King, Jun 30, 2016
  4. Johannes SixtJul 14, 2016
  5. Junio C HamanoJul 14, 2016
  6. Jeff KingJul 14, 2016
  7. Torsten BögershausenJul 15, 2016
  8. 4/5 archive-tar: write extended headers for far-future mtimeJeff King, Jun 30, 2016
  9. 1/5 t9300: factor out portable "head -c" replacementJeff King, Jun 30, 2016
  10. Eric SunshineJul 1, 2016
  11. Junio C HamanoJul 1, 2016
  12. Jeff KingJul 1, 2016
  13. 6/5 t5000: use test_match_signalJeff King, Jun 30, 2016
  14. 2/5 t5000: test tar files that overflow ustar headersJeff King, Jun 30, 2016
  15. Johannes SchindelinJul 14, 2016
  16. Johannes SixtJul 14, 2016
  17. Junio C HamanoJul 14, 2016
  18. Johannes SixtJul 14, 2016
  19. Jeff KingJul 14, 2016
  20. Junio C HamanoJul 14, 2016
  21. Jeff KingJul 14, 2016
  22. Torsten BögershausenJul 15, 2016
  23. Jeff KingJul 15, 2016
  24. Junio C HamanoJul 14, 2016
  25. Jeff KingJul 14, 2016
  26. Jeff KingJul 14, 2016
  27. Junio C HamanoJul 14, 2016
  28. Junio C HamanoJul 14, 2016
  29. Jeff KingJul 14, 2016
  30. Junio C HamanoJul 14, 2016
  31. Jeff KingJul 14, 2016
  32. Junio C HamanoJul 14, 2016
  33. Jeff KingJul 14, 2016
  34. Junio C HamanoJul 14, 2016
  35. 0/2 ulong may only be 32-bit wideJunio C Hamano, Jul 14, 2016
  36. 2/2 archive-tar: huge offset and future timestamps would not work on 32-bitJunio C Hamano, Jul 14, 2016
  37. Jeff KingJul 14, 2016
  38. Junio C HamanoJul 14, 2016
  39. Duy NguyenJul 16, 2016
  40. 1/2 t0006: skip "far in the future" test when unsigned long is not long enoughJunio C Hamano, Jul 14, 2016
  41. Johannes SchindelinJul 15, 2016
  42. Junio C HamanoJul 15, 2016

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.