diff --git a/mercurial/patch.py b/mercurial/patch.py --- a/mercurial/patch.py +++ b/mercurial/patch.py @@ -1007,17 +1007,12 @@ def iterhunks(ui, fp, sourcefile=None): current_hunk = None if ((sourcefile or state == BFILE) and ((not context and x[0] == '@') or ((context is not False) and x.startswith('***************')))): - try: - if context is None and x.startswith('***************'): - context = True - gpatch = changed.get(bfile) - create = afile == '/dev/null' or gpatch and gpatch.op == 'ADD' - remove = bfile == '/dev/null' or gpatch and gpatch.op == 'DELETE' - current_hunk = hunk(x, hunknum + 1, lr, context, create, remove) - except PatchError, err: - ui.debug(err) - current_hunk = None - continue + if context is None and x.startswith('***************'): + context = True + gpatch = changed.get(bfile) + create = afile == '/dev/null' or gpatch and gpatch.op == 'ADD' + remove = bfile == '/dev/null' or gpatch and gpatch.op == 'DELETE' + current_hunk = hunk(x, hunknum + 1, lr, context, create, remove) hunknum += 1 if emitfile: emitfile = False diff --git a/tests/test-import.t b/tests/test-import.t --- a/tests/test-import.t +++ b/tests/test-import.t @@ -150,6 +150,25 @@ import of plain diff should be ok with - $ rm -r b +import of malformed plain diff should fail + + $ hg clone -r0 a b + requesting all changes + adding changesets + adding manifests + adding file changes + added 1 changesets with 2 changes to 2 files + updating to branch default + 2 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg --cwd a diff -r0:1 > tip.patch + $ sed 's/1,1/foo/' < tip.patch > broken.patch + $ hg --cwd b import -mpatch ../broken.patch + applying ../broken.patch + abort: bad hunk #1 + [255] + $ rm -r b + + hg -R repo import put the clone in a subdir - having a directory named "a" used to hide a bug.