summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin v. Löwis <martin@v.loewis.de>2002-09-09 06:17:05 (GMT)
committerMartin v. Löwis <martin@v.loewis.de>2002-09-09 06:17:05 (GMT)
commit2412853f8e65f7c4359ebf59902ad2553589b908 (patch)
treeaebb566a44b270af74495836065973125bb9e89f
parent8a64d40949fdd6adf2a25559b50f0cc7c229ab1f (diff)
downloadcpython-2412853f8e65f7c4359ebf59902ad2553589b908.zip
cpython-2412853f8e65f7c4359ebf59902ad2553589b908.tar.gz
cpython-2412853f8e65f7c4359ebf59902ad2553589b908.tar.bz2
Fix escaping of non-ASCII characters.
-rw-r--r--Lib/test/test_pep263.py1
-rw-r--r--Objects/stringobject.c6
2 files changed, 5 insertions, 2 deletions
diff --git a/Lib/test/test_pep263.py b/Lib/test/test_pep263.py
index b1ffc03..7cc5526 100644
--- a/Lib/test/test_pep263.py
+++ b/Lib/test/test_pep263.py
@@ -1,2 +1,3 @@
#! -*- coding: koi8-r -*-
assert u"ðÉÔÏÎ".encode("utf-8") == '\xd0\x9f\xd0\xb8\xd1\x82\xd0\xbe\xd0\xbd'
+assert u"\ð".encode("utf-8") == '\\\xd0\x9f'
diff --git a/Objects/stringobject.c b/Objects/stringobject.c
index dd38ee3..c090e9b 100644
--- a/Objects/stringobject.c
+++ b/Objects/stringobject.c
@@ -541,6 +541,7 @@ PyObject *PyString_DecodeEscape(const char *s,
end = s + len;
while (s < end) {
if (*s != '\\') {
+ non_esc:
#ifdef Py_USING_UNICODE
if (recode_encoding && (*s & 0x80)) {
PyObject *u, *w;
@@ -656,8 +657,9 @@ PyObject *PyString_DecodeEscape(const char *s,
#endif
default:
*p++ = '\\';
- *p++ = s[-1];
- break;
+ s--;
+ goto non_esc; /* an arbitry number of unescaped
+ UTF-8 bytes may follow. */
}
}
if (p-buf < newlen)