changegroup: don't accept streams without proper termination
Streams should be terminated with a zero size changegroup, and read should
never be permitted to return less than requested.
--- a/mercurial/changegroup.py Mon Feb 21 20:58:54 2011 -0300
+++ b/mercurial/changegroup.py Tue Feb 22 03:02:50 2011 +0100
@@ -12,8 +12,6 @@
def getchunk(source):
"""return the next chunk from changegroup 'source' as a string"""
d = source.read(4)
- if not d:
- return ""
l = struct.unpack(">l", d)[0]
if l <= 4:
return ""
@@ -148,8 +146,6 @@
def chunklength(self):
d = self.read(4)
- if not d:
- return 0
l = max(0, struct.unpack(">l", d)[0] - 4)
if l and self.callback:
self.callback()