# HG changeset patch # User Alexis S. L. Carvalho # Date 1147641732 10800 # Node ID 854954fd410a7d6e950f8ddf221be557d37b2004 # Parent 09ed44225571cf4fc05fac6388198542c03086c7 Fix revlog.parseindex parseindex could fail if read returns too little data in the right moment (e.g. when there's still leftover data from the previous iteration and read returns less than "s" bytes). diff --git a/mercurial/revlog.py b/mercurial/revlog.py --- a/mercurial/revlog.py +++ b/mercurial/revlog.py @@ -405,19 +405,17 @@ class revlog(object): if n == 0 and self.inlinedata(): # cache the first chunk self.chunkcache = (0, data) + if leftover: + data = leftover + data + leftover = None off = 0 l = len(data) while off < l: if l - off < s: leftover = data[off:] break - if leftover: - cur = leftover + data[off:off + s - len(leftover)] - off += s - len(leftover) - leftover = None - else: - cur = data[off:off + s] - off += s + cur = data[off:off + s] + off += s e = struct.unpack(self.indexformat, cur) self.index.append(e) self.nodemap[e[-1]] = n