Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/diffhelpers.py @ 37573:49b82cdb5983
patch: error out if reached to EOF while reading hunk
This was where out-of-bounds read occurred in old C extension.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Mon, 09 Apr 2018 21:06:46 +0900 |
parents | c6b8d614690a |
children | a1bcc7ff0eac |
comparison
equal
deleted
inserted
replaced
37572:c6b8d614690a | 37573:49b82cdb5983 |
---|---|
4 # | 4 # |
5 # This software may be used and distributed according to the terms of the | 5 # This software may be used and distributed according to the terms of the |
6 # GNU General Public License version 2 or any later version. | 6 # GNU General Public License version 2 or any later version. |
7 | 7 |
8 from __future__ import absolute_import | 8 from __future__ import absolute_import |
9 | |
10 from .i18n import _ | |
11 | |
12 from . import ( | |
13 error, | |
14 ) | |
9 | 15 |
10 def addlines(fp, hunk, lena, lenb, a, b): | 16 def addlines(fp, hunk, lena, lenb, a, b): |
11 """Read lines from fp into the hunk | 17 """Read lines from fp into the hunk |
12 | 18 |
13 The hunk is parsed into two arrays, a and b. a gets the old state of | 19 The hunk is parsed into two arrays, a and b. a gets the old state of |
20 num = max(todoa, todob) | 26 num = max(todoa, todob) |
21 if num == 0: | 27 if num == 0: |
22 break | 28 break |
23 for i in xrange(num): | 29 for i in xrange(num): |
24 s = fp.readline() | 30 s = fp.readline() |
31 if not s: | |
32 raise error.ParseError(_('incomplete hunk')) | |
25 if s == "\\ No newline at end of file\n": | 33 if s == "\\ No newline at end of file\n": |
26 fixnewline(hunk, a, b) | 34 fixnewline(hunk, a, b) |
27 continue | 35 continue |
28 if s == "\n": | 36 if s == "\n": |
29 # Some patches may be missing the control char | 37 # Some patches may be missing the control char |