Author: Philip Jenvey <[email protected]>
Branch: py3k
Changeset: r59343:e7699f28319e
Date: 2012-12-05 17:14 -0800
http://bitbucket.org/pypy/pypy/changeset/e7699f28319e/
Log: convert OverflowErrors on bad handler results to IndexError
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
@@ -52,10 +52,17 @@
msg = ("encoding error handler must return "
"(str/bytes, int) tuple")
raise OperationError(space.w_TypeError, space.wrap(msg))
+
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/_codecs/test/test_codecs.py
b/pypy/module/_codecs/test/test_codecs.py
--- a/pypy/module/_codecs/test/test_codecs.py
+++ b/pypy/module/_codecs/test/test_codecs.py
@@ -529,6 +529,14 @@
"test.badhandler"
)
+ def test_badhandler_longindex(self):
+ import codecs
+ import sys
+ errors = 'test.badhandler_longindex'
+ codecs.register_error(errors, lambda x: ('', sys.maxsize + 1))
+ # CPython raises OverflowError here
+ raises((IndexError, OverflowError), b'apple\x92ham\x93spam'.decode,
'utf-8', errors)
+
def test_unicode_internal(self):
import codecs
import sys
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
@@ -71,6 +71,14 @@
raises(TypeError, b"abc\xDD".decode, "hz",
"test.test_decode_custom_error_handler_type")
+ def test_decode_custom_error_handler_longindex(self):
+ import codecs
+ import sys
+
codecs.register_error("test.test_decode_custom_error_handler_longindex",
+ lambda e: ('', sys.maxsize + 1))
+ raises(IndexError, b"abc\xDD".decode, "hz",
+ "test.test_decode_custom_error_handler_longindex")
+
def test_encode_hz(self):
import _codecs_cn
codec = _codecs_cn.getcodec("hz")
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit