summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDonovan Baarda <abo@minkirri.apana.org.au>2019-10-16 22:56:04 +1100
committerGitHub <noreply@github.com>2019-10-16 22:56:04 +1100
commit14dd0ddb98cfaa9fb52d80f1d1ea6a5e5dcb9fe9 (patch)
treead05937d99cf501666a93e669bdc7aeed2308847
parentf63a03b777bd2675ec99ac7f7153f1d3dd609f7b (diff)
parent200ca3a71697178196f475cd83e440b058e579ce (diff)
downloadlibrsync-14dd0ddb98cfaa9fb52d80f1d1ea6a5e5dcb9fe9.tar.gz
Merge pull request #177 from dbaarda/fix/netint1
Fix #176 rs_int_len() for large values.
-rw-r--r--NEWS.md3
-rw-r--r--src/netint.c13
2 files changed, 11 insertions, 5 deletions
diff --git a/NEWS.md b/NEWS.md
index 7197d0d..a6e9815 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -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;
}