Nicolas,

I am sorry for not including you in the first mail.
Just before Junio included you, there were these 2 mails
http://www.mail-archive.com/git@vger.kernel.org/msg34101.html
http://www.mail-archive.com/git@vger.kernel.org/msg34103.html

Stefan

On 08/15/2013 11:43 PM, Junio C Hamano wrote:
> Forwarding to the area expert...
> 
> Stefan Beller <stefanbel...@googlemail.com> writes:
> 
>> When checking the previous lines in that function, we can deduct that
>> hsize must always be smaller than (1u<<31), since 506049c7df2c6
>> (fix >4GiB source delta assertion failure), because the entries is
>> capped at an upper bound of 0xfffffffeU, so hsize contains a maximum
>> value of 0x3fffffff, which is smaller than (1u<<31), so i will never
>> be larger than 31.
>>
>> Signed-off-by: Stefan Beller <stefanbel...@googlemail.com>
>> ---
>>  diff-delta.c | 9 ++++++++-
>>  1 file changed, 8 insertions(+), 1 deletion(-)
>>
>> diff --git a/diff-delta.c b/diff-delta.c
>> index 93385e1..54da95b 100644
>> --- a/diff-delta.c
>> +++ b/diff-delta.c
>> @@ -154,8 +154,15 @@ struct delta_index * create_delta_index(const void 
>> *buf, unsigned long bufsize)
>>               */
>>              entries = 0xfffffffeU / RABIN_WINDOW;
>>      }
>> +
>> +    /*
>> +     * Do not check i < 31 in the loop, because the assignement
>> +     * previous to the loop makes sure, hsize is definitely
>> +     * smaller than 1<<31, hence the loop will always stop
>> +     * before i exceeds 31 resulting in an infinite loop.
>> +     */
>>      hsize = entries / 4;
>> -    for (i = 4; (1u << i) < hsize && i < 31; i++);
>> +    for (i = 4; (1u << i) < hsize; i++);
>>      hsize = 1 << i;
>>      hmask = hsize - 1;


Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to