Author: Alex Gaynor <alex.gay...@gmail.com> Branch: Changeset: r44725:87a4e92408c2 Date: 2011-06-06 09:28 +0200 http://bitbucket.org/pypy/pypy/changeset/87a4e92408c2/
Log: Raise an IndexError if a codec error handler returns a position that isn't an integer. 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 @@ -43,9 +43,15 @@ space.w_TypeError, msg, space.str_w(space.repr(w_res))) w_replace, w_newpos = space.fixedview(w_res, 2) - newpos = space.int_w(w_newpos) - if (newpos < 0): - newpos = len(input) + newpos + 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 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 @@ -59,6 +59,13 @@ u = "abc\xDD".decode("hz", "test.decode_custom_error_handler") assert u == u'abc\u1234\u5678' + def test_decode_custom_error_handler_overflow(self): + import codecs + import sys + codecs.register_error("test.test_decode_custom_error_handler_overflow", + lambda e: ('', sys.maxint + 1)) + raises(IndexError, "abc\xDD".decode, "hz", "test.test_decode_custom_error_handler_overflow") + def test_encode_hz(self): import _codecs_cn codec = _codecs_cn.getcodec("hz") _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit