Mercurial > public > mercurial-scm > hg-stable
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