Author: Armin Rigo <[email protected]>
Branch: 
Changeset: r86859:1f8c8d955c04
Date: 2016-09-04 13:47 +0200
http://bitbucket.org/pypy/pypy/changeset/1f8c8d955c04/

Log:    These specialize.arg() are not valid, because callers inside
        runicode may not give a constant at all. See updated test.

diff --git a/rpython/rlib/runicode.py b/rpython/rlib/runicode.py
--- a/rpython/rlib/runicode.py
+++ b/rpython/rlib/runicode.py
@@ -145,7 +145,6 @@
 _invalid_byte_3_of_4 = _invalid_cont_byte
 _invalid_byte_4_of_4 = _invalid_cont_byte
 
[email protected](2)
 def _invalid_byte_2_of_3(ordch1, ordch2, allow_surrogates):
     return (ordch2>>6 != 0x2 or    # 0b10
             (ordch1 == 0xe0 and ordch2 < 0xa0)
@@ -157,7 +156,6 @@
             (ordch1 == 0xf0 and ordch2 < 0x90) or
             (ordch1 == 0xf4 and ordch2 > 0x8f))
 
[email protected](5)
 def str_decode_utf_8_impl(s, size, errors, final, errorhandler,
                           allow_surrogates, result):
     if size == 0:
diff --git a/rpython/rlib/test/test_runicode.py 
b/rpython/rlib/test/test_runicode.py
--- a/rpython/rlib/test/test_runicode.py
+++ b/rpython/rlib/test/test_runicode.py
@@ -823,9 +823,15 @@
         def f(x):
 
             s1 = "".join(["\xd7\x90\xd6\x96\xeb\x96\x95\xf0\x90\x91\x93"] * x)
-            u, consumed = runicode.str_decode_utf_8(s1, len(s1), True)
-            s2 = runicode.unicode_encode_utf_8(u, len(u), True)
-            return s1 == s2
+            u, consumed = runicode.str_decode_utf_8(s1, len(s1), 'strict',
+                                                    allow_surrogates=True)
+            s2 = runicode.unicode_encode_utf_8(u, len(u), 'strict',
+                                                    allow_surrogates=True)
+            u3, consumed3 = runicode.str_decode_utf_8(s1, len(s1), 'strict',
+                                                    allow_surrogates=False)
+            s3 = runicode.unicode_encode_utf_8(u3, len(u3), 'strict',
+                                                    allow_surrogates=False)
+            return s1 == s2 == s3
         res = interpret(f, [2])
         assert res
 
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to