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

Reply via email to