diff options
author | Donovan Baarda <abo@minkirri.apana.org.au> | 2019-10-16 22:56:04 +1100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-10-16 22:56:04 +1100 |
commit | 14dd0ddb98cfaa9fb52d80f1d1ea6a5e5dcb9fe9 (patch) | |
tree | ad05937d99cf501666a93e669bdc7aeed2308847 | |
parent | f63a03b777bd2675ec99ac7f7153f1d3dd609f7b (diff) | |
parent | 200ca3a71697178196f475cd83e440b058e579ce (diff) | |
download | librsync-14dd0ddb98cfaa9fb52d80f1d1ea6a5e5dcb9fe9.tar.gz |
Merge pull request #177 from dbaarda/fix/netint1
Fix #176 rs_int_len() for large values.
-rw-r--r-- | NEWS.md | 3 | ||||
-rw-r--r-- | src/netint.c | 13 |
2 files changed, 11 insertions, 5 deletions
@@ -4,6 +4,9 @@ NOT RELEASED YET + * Fix #176 hangs calculating deltas for files larger than 4GB. (dbaarda, + https://github.com/librsync/librsync/pull/177) + ## librsync 2.2.0 Released 2019-10-12 diff --git a/src/netint.c b/src/netint.c index 90f813f..ce45bc6 100644 --- a/src/netint.c +++ b/src/netint.c @@ -146,9 +146,12 @@ rs_result rs_suck_n4(rs_job_t *job, int *v) int rs_int_len(rs_long_t val) { - int i; - - for (i = 8; val >> i; i *= 2) ; - assert(i <= 64); - return i / 8; + if (!(val & ~(rs_long_t)0xff)) + return 1; + if (!(val & ~(rs_long_t)0xffff)) + return 2; + if (!(val & ~(rs_long_t)0xffffffff)) + return 4; + assert(!(val & ~(rs_long_t)0xffffffffffffffff)); + return 8; } |