diff mercurial/patch.py @ 16650:fcb97d9a26cd stable

patch: fix segfault against unified diffs which start line is zero Since 2b1ec74c961f, if a chunk starts with "@@ -0,1", oldstart turns into a negative value. Because diffhelpers.testhunk() doesn't expect negative bstart, it bypasses "alen > blen - bstart" condition and segfaults at "PyList_GET_ITEM(b, i + bstart)".
author Yuya Nishihara <yuya@tcha.org>
date Sat, 12 May 2012 16:10:01 +0900
parents ed6a74312176
children ea7bf1d49bce 6d42c797ca6e
line wrap: on
line diff
--- a/mercurial/patch.py	Fri May 11 22:48:19 2012 -0700
+++ b/mercurial/patch.py	Sat May 12 16:10:01 2012 +0900
@@ -1014,9 +1014,9 @@
         oldstart = self.starta + top
         newstart = self.startb + top
         # zero length hunk ranges already have their start decremented
-        if self.lena:
+        if self.lena and oldstart > 0:
             oldstart -= 1
-        if self.lenb:
+        if self.lenb and newstart > 0:
             newstart -= 1
         return old, oldstart, new, newstart