Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r44763:3f3be23451d0 Date: 2011-06-06 20:07 +0200 http://bitbucket.org/pypy/pypy/changeset/3f3be23451d0/
Log: (prompted by amaury) In CPython some codecs raise IndexError but others raise OverflowError in the error handler if the integer position is out of bounds. Decided that just sticking with OverflowError to make the code simpler is a good enough solution. Fixed a few tests in lib- python to accept either IndexError or OverflowError. diff --git a/lib-python/2.7/test/test_multibytecodec.py b/lib-python/modified-2.7/test/test_multibytecodec.py copy from lib-python/2.7/test/test_multibytecodec.py copy to lib-python/modified-2.7/test/test_multibytecodec.py --- a/lib-python/2.7/test/test_multibytecodec.py +++ b/lib-python/modified-2.7/test/test_multibytecodec.py @@ -42,7 +42,7 @@ dec = codecs.getdecoder('euc-kr') myreplace = lambda exc: (u'', sys.maxint+1) codecs.register_error('test.cjktest', myreplace) - self.assertRaises(IndexError, dec, + self.assertRaises((IndexError, OverflowError), dec, 'apple\x92ham\x93spam', 'test.cjktest') def test_codingspec(self): diff --git a/lib-python/2.7/test/test_multibytecodec_support.py b/lib-python/modified-2.7/test/test_multibytecodec_support.py copy from lib-python/2.7/test/test_multibytecodec_support.py copy to lib-python/modified-2.7/test/test_multibytecodec_support.py --- a/lib-python/2.7/test/test_multibytecodec_support.py +++ b/lib-python/modified-2.7/test/test_multibytecodec_support.py @@ -107,8 +107,8 @@ def myreplace(exc): return (u'x', sys.maxint + 1) codecs.register_error("test.cjktest", myreplace) - self.assertRaises(IndexError, self.encode, self.unmappedunicode, - 'test.cjktest') + self.assertRaises((IndexError, OverflowError), self.encode, + self.unmappedunicode, 'test.cjktest') def test_callback_None_index(self): def myreplace(exc): diff --git a/pypy/module/_codecs/interp_codecs.py b/pypy/module/_codecs/interp_codecs.py --- a/pypy/module/_codecs/interp_codecs.py +++ b/pypy/module/_codecs/interp_codecs.py @@ -46,15 +46,9 @@ space.w_TypeError, msg, space.str_w(space.repr(w_res))) w_replace, w_newpos = space.fixedview(w_res, 2) - try: - newpos = space.int_w(w_newpos) - except OperationError, e: - if not e.match(space, space.w_OverflowError): - raise - newpos = -1 - else: - if newpos < 0: - newpos = len(input) + newpos + newpos = space.int_w(w_newpos) + if newpos < 0: + newpos = len(input) + newpos if newpos < 0 or newpos > len(input): raise operationerrfmt( space.w_IndexError, diff --git a/pypy/module/_multibytecodec/test/test_app_codecs.py b/pypy/module/_multibytecodec/test/test_app_codecs.py --- a/pypy/module/_multibytecodec/test/test_app_codecs.py +++ b/pypy/module/_multibytecodec/test/test_app_codecs.py @@ -64,7 +64,8 @@ import sys codecs.register_error("test.test_decode_custom_error_handler_overflow", lambda e: (u'', sys.maxint + 1)) - raises(IndexError, "abc\xDD".decode, "hz", "test.test_decode_custom_error_handler_overflow") + raises((IndexError, OverflowError), "abc\xDD".decode, "hz", + "test.test_decode_custom_error_handler_overflow") def test_encode_hz(self): import _codecs_cn _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit