Author: Matti Picus <[email protected]>
Branch: py3.6
Changeset: r98051:3eabce9188ed
Date: 2019-11-14 09:27 -0500
http://bitbucket.org/pypy/pypy/changeset/3eabce9188ed/
Log: pass 'final' down to where it is handled, add error check
diff --git a/pypy/interpreter/unicodehelper_win32.py
b/pypy/interpreter/unicodehelper_win32.py
--- a/pypy/interpreter/unicodehelper_win32.py
+++ b/pypy/interpreter/unicodehelper_win32.py
@@ -41,13 +41,13 @@
return 0
return rwin32.WC_NO_BEST_FIT_CHARS
-def _decode_cp_error(s, errorhandler, encoding, errors, start, end):
+def _decode_cp_error(s, errorhandler, encoding, errors, final, start, end):
# late import to avoid circular import
from pypy.interpreter.unicodehelper import _str_decode_utf8_slowpath
if rwin32.GetLastError_saved() == rwin32.ERROR_NO_UNICODE_TRANSLATION:
msg = ("No mapping for the Unicode character exists in the target "
"multi-byte code page.")
- r, ignore1, ignore2 = _str_decode_utf8_slowpath(s[start:end], errors,
False, errorhandler, False)
+ r, ignore1, ignore2 = _str_decode_utf8_slowpath(s[start:end], errors,
final, errorhandler, False)
return r, end
else:
raise rwin32.lastSavedWindowsError()
@@ -77,7 +77,7 @@
return result
def _decode_helper(cp, s, flags, encoding, errors, errorhandler,
- start, end, res):
+ final, start, end, res):
if end > len(s):
end = len(s)
piece = s[start:end]
@@ -87,7 +87,7 @@
lltype.nullptr(rffi.CWCHARP.TO), 0)
if outsize == 0:
r, pos = _decode_cp_error(s, errorhandler,
- encoding, errors, start, end)
+ encoding, errors, final, start, end)
res.append(r)
return pos
@@ -96,7 +96,7 @@
if MultiByteToWideChar(cp, flags, dataptr, len(piece),
buf.raw, outsize) == 0:
r, pos = _decode_cp_error(s, errorhandler,
- encoding, errors, start, end)
+ encoding, errors, final, start, end)
res.append(r)
return pos
else:
@@ -116,14 +116,14 @@
res = StringBuilder(insize)
if errors == 'strict':
_decode_helper(cp, s, flags, encoding, errors, errorhandler,
- 0, len(s), res)
+ final, 0, len(s), res)
else:
prev_pos = 0
pos = 0
while pos < len(s):
pos = next_codepoint_pos(s, prev_pos)
- pos = _decode_helper(cp, s, flags, encoding,
- errors, errorhandler, prev_pos, pos, res)
+ pos = _decode_helper(cp, s, flags, encoding, errors,
+ errorhandler, final, prev_pos, pos, res)
prev_pos = pos
return res.build(), insize
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
@@ -716,6 +716,9 @@
@unwrap_spec(code_page=int, errors='text_or_none')
def code_page_encode(space, code_page, w_arg, errors="strict"):
# w_arg is a W_Unicode or W_Bytes?
+ if code_page < 0:
+ raise oefmt(space.w_ValueError, "invalid code page number %d",
+ code_page)
w_arg = space.convert_arg_to_w_unicode(w_arg, errors)
if errors is None:
errors = 'strict'
@@ -732,6 +735,9 @@
@unwrap_spec(code_page=int, string='bufferstr', errors='text_or_none',
w_final=WrappedDefault(False))
def code_page_decode(space, code_page, string, errors="strict",
w_final=None):
+ if code_page < 0:
+ raise oefmt(space.w_ValueError, "invalid code page number %d",
+ code_page)
if errors is None:
errors = 'strict'
final = space.is_true(w_final)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit