Author: Amaury Forgeot d'Arc <[email protected]>
Branch: py3k
Changeset: r50640:8d91b7ba9f7c
Date: 2011-12-17 18:37 +0100
http://bitbucket.org/pypy/pypy/changeset/8d91b7ba9f7c/

Log:    Fix a crash when the 'str' unwrap_spec is given a non-ascii unicode
        string. Now it automatically converts to utf_8 bytes, like CPython.

diff --git a/pypy/interpreter/baseobjspace.py b/pypy/interpreter/baseobjspace.py
--- a/pypy/interpreter/baseobjspace.py
+++ b/pypy/interpreter/baseobjspace.py
@@ -1304,7 +1304,11 @@
         return self.str_w(w_obj)
 
     def str_w(self, w_obj):
-        return self.unicode_w(w_obj).encode('ascii')
+        try:
+            return self.unicode_w(w_obj).encode('ascii')
+        except UnicodeEncodeError:
+            w_bytes = self.call_method(w_obj, 'encode', self.wrap('utf-8'))
+            return self.bytes_w(w_bytes)
 
     def bytes_w(self, w_obj):
         return w_obj.bytes_w(self)
diff --git a/pypy/objspace/std/test/test_floatobject.py 
b/pypy/objspace/std/test/test_floatobject.py
--- a/pypy/objspace/std/test/test_floatobject.py
+++ b/pypy/objspace/std/test/test_floatobject.py
@@ -773,6 +773,8 @@
 
     def test_invalid(self):
         raises(ValueError, float.fromhex, "0P")
+        # A fullwidth Unicode digit
+        raises(ValueError, float.fromhex, "0x1p\uff10")
 
     def test_division_edgecases(self):
         import math
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to