X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=diff-delta.c;h=93385e12baa0d90ae475bd02500edf5ddcce320c;hb=926b1ec63ee045503f609e88ca445b94c06bd5d7;hp=a4e28df714b4834e5efe42fa3abb647711913d71;hpb=77f143bf3e218857ec8e5244d7e862e8e0c1a041;p=git.git diff --git a/diff-delta.c b/diff-delta.c index a4e28df71..93385e12b 100644 --- a/diff-delta.c +++ b/diff-delta.c @@ -4,7 +4,7 @@ * This code was greatly inspired by parts of LibXDiff from Davide Libenzi * http://www.xmailserver.org/xdiff-lib.html * - * Rewritten for GIT by Nicolas Pitre , (C) 2005-2007 + * Rewritten for GIT by Nicolas Pitre , (C) 2005-2007 * * This code is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -146,7 +146,14 @@ struct delta_index * create_delta_index(const void *buf, unsigned long bufsize) /* Determine index hash size. Note that indexing skips the first byte to allow for optimizing the Rabin's polynomial initialization in create_delta(). */ - entries = (bufsize - 1) / RABIN_WINDOW; + entries = (bufsize - 1) / RABIN_WINDOW; + if (bufsize >= 0xffffffffUL) { + /* + * Current delta format can't encode offsets into + * reference buffer with more than 32 bits. + */ + entries = 0xfffffffeU / RABIN_WINDOW; + } hsize = entries / 4; for (i = 4; (1u << i) < hsize && i < 31; i++); hsize = 1 << i;