Re: [PATCH] Tolerate zlib deflation with window size < 32Kb

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



roberto.tyley@xxxxxxxxx writes:

> +	 * We must determine if the buffer contains the standard
> +	 * zlib-deflated stream or the experimental format based
> +	 * on the in-pack object format. Compare the header byte
> +	 * for each format:
> +	 *
> +	 * RFC1950 zlib w/ deflate : 0www1000 : 0 <= www <= 7
> +	 * Experimental pack-based : Stttssss : ttt = 1,2,3,4
> +	 *
> +	 * If bit 7 is clear and bits 0-3 equal 8, the buffer MUST be
> +	 * in standard loose-object format, UNLESS it is a Git-pack
> +	 * format object *exactly* 8 bytes in size when inflated.
> +	 *
> +	 * However, RFC1950 also specifies that the 1st 16-bit word
> +	 * must be divisible by 31 - this checksum tells us our buffer
> +	 * is in the standard format, giving a false positive only if
> +	 * the 1st word of the Git-pack format object happens to be
> +	 * divisible by 31, ie:
> +	 *      ((byte0 * 256) + byte1) % 31 = 0
> +	 *   =>        0ttt10000www1000 % 31 = 0
> +	 *
> +	 * As it happens, this case can only arise for www=3 & ttt=1
> +	 * - ie, a Commit object, which would have to be 8 bytes in
> +	 * size. As no Commit can be that small, we find that the
> +	 * combination of these two criteria (bitmask & checksum)
> +	 * can always correctly determine the buffer format.
>  	 */
>  	word = (map[0] << 8) + map[1];
> -	if (map[0] == 0x78 && !(word % 31))
> +	if ((map[0] & 0x88) == 0x08 && !(word % 31))

Are you sure about this 0x88? Isn't it 0x8F or something?

>  		return 0;
>  	else
>  		return 1;
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]