[pypy-commit] pypy stdlib-2.7.3: PyUnicode_EncodeDecimal: copy all characters, and ends the buffer with \0.
amauryfa
noreply at buildbot.pypy.org
Tue Jun 12 23:22:28 CEST 2012
Author: Amaury Forgeot d'Arc <amauryfa at gmail.com>
Branch: stdlib-2.7.3
Changeset: r55632:ebf8729428b4
Date: 2012-06-12 22:14 +0200
http://bitbucket.org/pypy/pypy/changeset/ebf8729428b4/
Log: PyUnicode_EncodeDecimal: copy all characters, and ends the buffer
with \0.
diff --git a/pypy/module/cpyext/test/test_unicodeobject.py b/pypy/module/cpyext/test/test_unicodeobject.py
--- a/pypy/module/cpyext/test/test_unicodeobject.py
+++ b/pypy/module/cpyext/test/test_unicodeobject.py
@@ -198,27 +198,35 @@
def test_encode_decimal(self, space, api):
with rffi.scoped_unicode2wcharp(u' (12, 35 ABC)') as u:
- with rffi.scoped_alloc_buffer(13) as buf:
+ with rffi.scoped_alloc_buffer(20) as buf:
res = api.PyUnicode_EncodeDecimal(u, 13, buf.raw, None)
- s = buf.str(13)
+ s = rffi.charp2str(buf.raw)
assert res == 0
assert s == ' (12, 35 ABC)'
with rffi.scoped_unicode2wcharp(u' (12, \u1234\u1235)') as u:
- with rffi.scoped_alloc_buffer(9) as buf:
+ with rffi.scoped_alloc_buffer(20) as buf:
res = api.PyUnicode_EncodeDecimal(u, 9, buf.raw, None)
assert res == -1
api.PyErr_Clear()
with rffi.scoped_unicode2wcharp(u' (12, \u1234\u1235)') as u:
- with rffi.scoped_alloc_buffer(9) as buf:
+ with rffi.scoped_alloc_buffer(20) as buf:
with rffi.scoped_str2charp("replace") as errors:
res = api.PyUnicode_EncodeDecimal(u, 9, buf.raw,
errors)
- s = buf.str(9)
+ s = rffi.charp2str(buf.raw)
assert res == 0
- assert res == " (12, ??)"
- api.PyErr_Clear()
+ assert s == " (12, ??)"
+
+ with rffi.scoped_unicode2wcharp(u'12\u1234') as u:
+ with rffi.scoped_alloc_buffer(20) as buf:
+ with rffi.scoped_str2charp("xmlcharrefreplace") as errors:
+ res = api.PyUnicode_EncodeDecimal(u, 3, buf.raw,
+ errors)
+ s = rffi.charp2str(buf.raw)
+ assert res == 0
+ assert s == "12ሴ"
def test_IS(self, space, api):
diff --git a/pypy/module/cpyext/unicodeobject.py b/pypy/module/cpyext/unicodeobject.py
--- a/pypy/module/cpyext/unicodeobject.py
+++ b/pypy/module/cpyext/unicodeobject.py
@@ -635,8 +635,12 @@
state = space.fromcache(CodecState)
result = runicode.unicode_encode_decimal(u, length, errors,
state.encode_error_handler)
- for i in range(0, length):
+ i = len(result)
+ output[i] = '\0'
+ i -= 1
+ while i >= 0:
output[i] = result[i]
+ i -= 1
return 0
@cpython_api([PyObject, PyObject], rffi.INT_real, error=-2)
More information about the pypy-commit
mailing list