diff options
author | Junio C Hamano <gitster@pobox.com> | 2010-08-31 16:34:16 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2010-08-31 16:34:16 -0700 |
commit | e3efa9c12c1797f5eeb140ebeb44ff6d210ec215 (patch) | |
tree | 053fd28b233c7a0bdb264b4ffdc8fe8b3c71e9cd | |
parent | 2acf3658a31249d1a09573e2b6870871b5323121 (diff) | |
parent | 506049c7df2c68f1db5a4bae502cfb1af0a73048 (diff) | |
download | git-e3efa9c12c1797f5eeb140ebeb44ff6d210ec215.tar.gz git-e3efa9c12c1797f5eeb140ebeb44ff6d210ec215.tar.xz |
Merge branch 'np/maint-huge-delta-generation'
* np/maint-huge-delta-generation:
fix >4GiB source delta assertion failure
-rw-r--r-- | diff-delta.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/diff-delta.c b/diff-delta.c index 464ac3ffc..93385e12b 100644 --- a/diff-delta.c +++ b/diff-delta.c @@ -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; |