From: Kjetil Barvik <barvik@broadpark.no>
To: Nicolas Pitre <nico@cam.org>
Cc: Junio C Hamano <gitster@pobox.com>, git@vger.kernel.org
Subject: Re: [PATCH] avoid possible overflow in delta size filtering computation
Date: Wed, 25 Mar 2009 13:15:14 +0100 [thread overview]
Message-ID: <86hc1hdcj1.fsf@broadpark.no> (raw)
In-Reply-To: <alpine.LFD.2.00.0903241535010.26337@xanadu.home>
Nicolas Pitre <nico@cam.org> writes:
> On a 32-bit system, the maximum possible size for an object is less than
> 4GB, while 64-bit systems may cope with larger objects. Due to this
> limitation, variables holding object sizes are using an unsigned long
> type (32 bits on 32-bit systems, or 64 bits on 64-bit systems).
>
> When large objects are encountered, and/or people play with large delta
> depth values, it is possible for the maximum allowed delta size
> computation to overflow, especially on a 32-bit system. When this
> occurs, surviving result bits may represent a value much smaller than
> what it is supposed to be, or even zero. This prevents some objects
> from being deltified although they do get deltified when a smaller depth
> limit is used. Fix this by always performing a 64-bit multiplication.
>
> Signed-off-by: Nicolas Pitre <nico@cam.org>
I added this patch and rerun the 2 test cases form the table where
--depth is 20000 and 95000, and got the following result:
--depth=20000 => file size: 19126077 delta: 73814
--depth=95000 => file size: 19126087 delta: 73814
So, it seems that this patch almost fixed the issue. But notice that
the pack file was 10 bytes larger for the --depth=95000 case.
I made a small perl script to compare the output from 'git verify-pack
-v' of the 2 idx/pack files, and found the following difference(1)
(first line from --depth=20000 case, second from --depth=95000):
fe0a6f3e971373590714dbafd087b235ea60ac00 tree 9 19 18921247 731 96a3ec5789504e6d0f90c99fb1937af1ebd58e2d
fe0a6f3e971373590714dbafd087b235ea60ac00 tree 20 29 18921247 730 12e560f7fb28558b15e3a2008fba860f9a4b2222
'git show fe0a6f3e971373590714dbafd087b235ea60ac00' =>
tree fe0a6f3e971373590714dbafd087b235ea60ac00
Makefile
t0000-basic.sh
test-lib.sh
'git show 96a3ec5789504e6d0f90c99fb1937af1ebd58e2d' =>
tree 96a3ec5789504e6d0f90c99fb1937af1ebd58e2d
Makefile
t0000-basic.sh
t0100-environment-names.sh
t0200-update-cache.sh
t0400-ls-files.sh
t0500-ls-files.sh
t1000-checkout-cache.sh
t1001-checkout-cache.sh
test-lib.sh
'git show 12e560f7fb28558b15e3a2008fba860f9a4b2222' =>
tree 12e560f7fb28558b15e3a2008fba860f9a4b2222
Makefile
t0000-basic.sh
t0100-environment-names.sh
t0200-update-cache.sh
t0400-ls-files.sh
t0500-ls-files.sh
t1000-checkout-cache.sh
t1001-checkout-cache.sh
test-lib.sh
-- kjetil
1) there was lots of lines with different offsets, all of which was 10
larger in the --depth=95000 case.
next prev parent reply other threads:[~2009-03-25 12:16 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-03-24 19:56 [PATCH] avoid possible overflow in delta size filtering computation Nicolas Pitre
2009-03-24 20:20 ` Brandon Casey
2009-03-24 20:52 ` Nicolas Pitre
2009-03-25 0:39 ` Nicolas Pitre
2009-03-25 12:15 ` Kjetil Barvik [this message]
2009-03-25 16:18 ` Nicolas Pitre
2009-03-25 16:34 ` Kjetil Barvik
2009-03-25 19:17 ` Nicolas Pitre
2009-03-26 7:18 ` Kjetil Barvik
2009-03-27 2:23 ` Nicolas Pitre
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=86hc1hdcj1.fsf@broadpark.no \
--to=barvik@broadpark.no \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=nico@cam.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.