Commit 835b243c authored by Hye-Shik Chang's avatar Hye-Shik Chang

Bug #1379994: Fix *unicode_escape codecs to encode r'\' as r'\\'

just like string codecs.
parent e3547fd2
...@@ -615,20 +615,24 @@ class UnicodeTest( ...@@ -615,20 +615,24 @@ class UnicodeTest(
self.assertEqual(u'hello'.encode('latin-1'), 'hello') self.assertEqual(u'hello'.encode('latin-1'), 'hello')
# Roundtrip safety for BMP (just the first 1024 chars) # Roundtrip safety for BMP (just the first 1024 chars)
u = u''.join(map(unichr, xrange(1024))) for c in xrange(1024):
for encoding in ('utf-7', 'utf-8', 'utf-16', 'utf-16-le', 'utf-16-be', u = unichr(c)
'raw_unicode_escape', 'unicode_escape', 'unicode_internal'): for encoding in ('utf-7', 'utf-8', 'utf-16', 'utf-16-le',
self.assertEqual(unicode(u.encode(encoding),encoding), u) 'utf-16-be', 'raw_unicode_escape',
'unicode_escape', 'unicode_internal'):
self.assertEqual(unicode(u.encode(encoding),encoding), u)
# Roundtrip safety for BMP (just the first 256 chars) # Roundtrip safety for BMP (just the first 256 chars)
u = u''.join(map(unichr, xrange(256))) for c in xrange(256):
for encoding in ('latin-1',): u = unichr(c)
self.assertEqual(unicode(u.encode(encoding),encoding), u) for encoding in ('latin-1',):
self.assertEqual(unicode(u.encode(encoding),encoding), u)
# Roundtrip safety for BMP (just the first 128 chars) # Roundtrip safety for BMP (just the first 128 chars)
u = u''.join(map(unichr, xrange(128))) for c in xrange(128):
for encoding in ('ascii',): u = unichr(c)
self.assertEqual(unicode(u.encode(encoding),encoding), u) for encoding in ('ascii',):
self.assertEqual(unicode(u.encode(encoding),encoding), u)
# Roundtrip safety for non-BMP (just a few chars) # Roundtrip safety for non-BMP (just a few chars)
u = u'\U00010001\U00020002\U00030003\U00040004\U00050005' u = u'\U00010001\U00020002\U00030003\U00040004\U00050005'
......
...@@ -12,6 +12,9 @@ What's New in Python 2.5 alpha 1? ...@@ -12,6 +12,9 @@ What's New in Python 2.5 alpha 1?
Core and builtins Core and builtins
----------------- -----------------
- Bug #1379994: Builtin unicode_escape and raw_unicode_escape codec
now encodes backslash correctly.
- Patch #1350409: Work around signal handling bug in Visual Studio 2005. - Patch #1350409: Work around signal handling bug in Visual Studio 2005.
- Bug #1281408: Py_BuildValue now works correct even with unsigned longs - Bug #1281408: Py_BuildValue now works correct even with unsigned longs
......
...@@ -1989,9 +1989,9 @@ PyObject *unicodeescape_string(const Py_UNICODE *s, ...@@ -1989,9 +1989,9 @@ PyObject *unicodeescape_string(const Py_UNICODE *s,
while (size-- > 0) { while (size-- > 0) {
Py_UNICODE ch = *s++; Py_UNICODE ch = *s++;
/* Escape quotes */ /* Escape quotes and backslashes */
if (quotes && if ((quotes &&
(ch == (Py_UNICODE) PyString_AS_STRING(repr)[1] || ch == '\\')) { ch == (Py_UNICODE) PyString_AS_STRING(repr)[1]) || ch == '\\') {
*p++ = '\\'; *p++ = '\\';
*p++ = (char) ch; *p++ = (char) ch;
continue; continue;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment