[pypy-svn] r17936 - pypy/dist/pypy/module/_codecs

ac at codespeak.net ac at codespeak.net
Wed Sep 28 11:19:38 CEST 2005


Author: ac
Date: Wed Sep 28 11:19:38 2005
New Revision: 17936

Modified:
   pypy/dist/pypy/module/_codecs/app_codecs.py
Log:
Fix errors in decoding unicode escapes.

Modified: pypy/dist/pypy/module/_codecs/app_codecs.py
==============================================================================
--- pypy/dist/pypy/module/_codecs/app_codecs.py	(original)
+++ pypy/dist/pypy/module/_codecs/app_codecs.py	Wed Sep 28 11:19:38 2005
@@ -1404,17 +1404,18 @@
             elif ch == 'r' : p += u'\r' 
             elif ch == 'v': p += u'\013' #break; /* VT */
             elif ch == 'a': p += u'\007' # break; /* BEL, not classic C */
-            elif ch in [ '0', '1', '2', '3', '4', '5', '6', '7']:
-                x = int(s[pos, pos+3], 8)
-            #    x = ord(ch) - ord('0')
-            #    ch = s[pos]
-            #    if ('0' <= ch and ch <= '7'):
-            #        x = (x<<3) + ord(ch) - ord('0')
-            #        ch = s[pos+1]
-            #        if ('0' <= ch and ch <= '7'):
-            #            x = (x<<3) + ord(ch) - ord('0')
-            #            pos += 2
-                pos += 3
+            elif '0' <= ch <= '7':
+                x = ord(ch) - ord('0')
+                if pos < size:
+                    ch = s[pos]
+                    if '0' <= ch <= '7':
+                        pos += 1
+                        x = (x<<3) + ord(ch) - ord('0')
+                        if pos < size:
+                            ch = s[pos]
+                            if '0' <= ch <= '7':
+                                pos += 1
+                                x = (x<<3) + ord(ch) - ord('0')
                 p += unichr(x)
     ##        /* hex escapes */
     ##        /* \xXX */
@@ -1471,16 +1472,8 @@
                 else:        
                     x = unicode_call_errorhandler(errors, "unicodeescape", message, s, pos-1, look+1)
             else:
-                if (pos > size):
-                    message = "\\ at end of string"
-                    handler = lookup_error(errors)
-                    x = handler(UnicodeDecodeError("unicodeescape", s, pos,
-                                size, message))
-                    p += x[0]
-                    pos = x[1]
-                else:
-                    p += '\\'
-                    p += s[pos]
+                p += '\\'
+                p += ch
     return p
 
 def PyUnicode_EncodeRawUnicodeEscape(s, size):



More information about the Pypy-commit mailing list