Mercurial > hg
changeset 16522:a8065323c003 stable
patch: display a nice error for invalid base85 data
Before, import was terminating with a traceback. Now it says:
$ hg import --no-commit ../bad.patch
applying ../bad.patch
abort: could not decode binary patch: bad base85 character at position 66
author | Patrick Mezard <patrick@mezard.eu> |
---|---|
date | Sat, 21 Apr 2012 19:58:18 +0200 |
parents | 592701c8eac6 |
children | 727068417b95 |
files | mercurial/base85.c mercurial/patch.py tests/test-import-git.t |
diffstat | 3 files changed, 27 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/base85.c Thu Apr 26 14:24:46 2012 +0200 +++ b/mercurial/base85.c Sat Apr 21 19:58:18 2012 +0200 @@ -109,7 +109,7 @@ if (c < 0) return PyErr_Format( PyExc_ValueError, - "Bad base85 character at position %d", i); + "bad base85 character at position %d", i); acc = acc * 85 + c; } if (i++ < len) @@ -118,13 +118,13 @@ if (c < 0) return PyErr_Format( PyExc_ValueError, - "Bad base85 character at position %d", i); + "bad base85 character at position %d", i); /* overflow detection: 0xffffffff == "|NsC0", * "|NsC" == 0x03030303 */ if (acc > 0x03030303 || (acc *= 85) > 0xffffffff - c) return PyErr_Format( PyExc_ValueError, - "Bad base85 sequence at position %d", i); + "bad base85 sequence at position %d", i); acc += c; }
--- a/mercurial/patch.py Thu Apr 26 14:24:46 2012 +0200 +++ b/mercurial/patch.py Sat Apr 21 19:58:18 2012 +0200 @@ -1051,7 +1051,11 @@ l = ord(l) - ord('A') + 1 else: l = ord(l) - ord('a') + 27 - dec.append(base85.b85decode(line[1:-1])[:l]) + try: + dec.append(base85.b85decode(line[1:-1])[:l]) + except ValueError, e: + raise PatchError(_('could not decode binary patch: %s') + % str(e)) line = lr.readline() self.hunk.append(line) text = zlib.decompress(''.join(dec))
--- a/tests/test-import-git.t Thu Apr 26 14:24:46 2012 +0200 +++ b/tests/test-import-git.t Sat Apr 21 19:58:18 2012 +0200 @@ -362,6 +362,25 @@ A binary2 text2 R text2 + +Invalid base85 content + $ hg rollback + repository tip rolled back to revision 15 (undo import) + working directory now based on revision 15 + $ hg revert -aq + $ hg import -d "1000000 0" -m invalid-binary - <<"EOF" + > diff --git a/text2 b/binary2 + > rename from text2 + > rename to binary2 + > index 78981922613b2afb6025042ff6bd878ac1994e85..10efcb362e9f3b3420fcfbfc0e37f3dc16e29757 + > GIT binary patch + > literal 5 + > Mc$`b*O.$Pw00T?_*Z=?k + > + > EOF + applying patch from stdin + abort: could not decode binary patch: bad base85 character at position 6 + [255] $ cd .. Consecutive import with renames (issue2459)