# HG changeset patch # User Matt Mackall # Date 1266104264 21600 # Node ID 7c8266c1d15a6a5cb0dd1983ccb538c26efb8667 # Parent 6e5a47398fc5a56de732b31fdc7d8b5a7cd6ee11 parsers: fix some signed comparison issues (spotted by Steve Borho) diff -r 6e5a47398fc5 -r 7c8266c1d15a mercurial/parsers.c --- a/mercurial/parsers.c Sat Feb 13 22:10:31 2010 +0100 +++ b/mercurial/parsers.c Sat Feb 13 17:37:44 2010 -0600 @@ -194,7 +194,7 @@ mtime = ntohl(*(uint32_t *)(decode + 8)); flen = ntohl(*(uint32_t *)(decode + 12)); cur += 17; - if (flen > end - cur) { + if (cur + flen > end || cur + flen < cur) { PyErr_SetString(PyExc_ValueError, "overflow in dirstate"); goto quit; } @@ -332,7 +332,7 @@ n++; step = 64 + (inlined ? comp_len : 0); - if (end - data < step) + if (data + step > end || data + step < data) break; data += step; }