[pypy-commit] pypy default: Raise an IndexError if a codec error handler returns a position that isn't an integer.
alex_gaynor
noreply at buildbot.pypy.org
Mon Jun 6 09:28:11 CEST 2011
Author: Alex Gaynor <alex.gaynor at 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")
More information about the pypy-commit
mailing list