[pypy-commit] pypy py3.5-text-utf8: (ronan, plan_rich) allow surrogates to be passed to __import__

plan_rich pypy.commits at gmail.com
Mon Feb 27 10:44:13 EST 2017


Author: Richard Plangger <planrichi at gmail.com>
Branch: py3.5-text-utf8
Changeset: r90406:cb8bf6a7d22d
Date: 2017-02-27 16:42 +0100
http://bitbucket.org/pypy/pypy/changeset/cb8bf6a7d22d/

Log:	(ronan, plan_rich) allow surrogates to be passed to __import__

diff --git a/pypy/module/imp/importing.py b/pypy/module/imp/importing.py
--- a/pypy/module/imp/importing.py
+++ b/pypy/module/imp/importing.py
@@ -67,7 +67,7 @@
 lib_pypy = os.path.join(os.path.dirname(__file__),
                         '..', '..', '..', 'lib_pypy')
 
- at unwrap_spec(modulename='text0', level=int)
+ at unwrap_spec(modulename='fsencode', level=int)
 def importhook(space, modulename, w_globals=None, w_locals=None, w_fromlist=None, level=0):
     # A minimal version, that can only import builtin and lib_pypy modules!
     assert w_locals is w_globals
diff --git a/pypy/module/imp/interp_imp.py b/pypy/module/imp/interp_imp.py
--- a/pypy/module/imp/interp_imp.py
+++ b/pypy/module/imp/interp_imp.py
@@ -5,6 +5,7 @@
 from pypy.interpreter.pycode import PyCode
 from pypy.module._io.interp_iobase import W_IOBase
 from pypy.interpreter.streamutil import wrap_streamerror
+from pypy.interpreter.error import OperationError
 
 
 def extension_suffixes(space):
@@ -72,7 +73,11 @@
     return None
 
 def is_builtin(space, w_name):
-    name = space.text0_w(w_name)
+    try:
+        name = space.text0_w(w_name)
+    except OperationError:
+        return space.newint(0)
+
     if name not in space.builtin_modules:
         return space.newint(0)
     if space.finditem(space.sys.get('modules'), w_name) is not None:
diff --git a/pypy/module/imp/test/test_import.py b/pypy/module/imp/test/test_import.py
--- a/pypy/module/imp/test/test_import.py
+++ b/pypy/module/imp/test/test_import.py
@@ -255,6 +255,10 @@
     def test_import_keywords(self):
         __import__(name='sys', level=0)
 
+    def test_import_nonutf8_encodable(self):
+        exc = raises(ImportError, __import__, '\ud800')
+        assert exc.value.args[0].startswith("No module named ")
+
     def test_import_by_filename(self):
         import pkg.a
         filename = pkg.a.__file__


More information about the pypy-commit mailing list