[Python-checkins] cpython (merge 3.5 -> 3.6): Issue #29319: Prevent RunMainFromImporter overwriting sys.path[0].

steve.dower python-checkins at python.org
Sat Feb 4 18:41:33 EST 2017


https://hg.python.org/cpython/rev/0965e2967056
changeset:   106433:0965e2967056
branch:      3.6
parent:      106430:54fea351e3f9
parent:      106432:c6506f759db1
user:        Steve Dower <steve.dower at microsoft.com>
date:        Sat Feb 04 15:39:38 2017 -0800
summary:
  Issue #29319: Prevent RunMainFromImporter overwriting sys.path[0].

files:
  Misc/NEWS      |   2 ++
  Modules/main.c |  14 ++++++++++++--
  2 files changed, 14 insertions(+), 2 deletions(-)


diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,8 @@
 Core and Builtins
 -----------------
 
+- Issue #29319: Prevent RunMainFromImporter overwriting sys.path[0].
+
 - Issue #29337: Fixed possible BytesWarning when compare the code objects.
   Warnings could be emitted at compile time.
 
diff --git a/Modules/main.c b/Modules/main.c
--- a/Modules/main.c
+++ b/Modules/main.c
@@ -228,7 +228,7 @@
 static int
 RunMainFromImporter(wchar_t *filename)
 {
-    PyObject *argv0 = NULL, *importer, *sys_path;
+    PyObject *argv0 = NULL, *importer, *sys_path, *sys_path0;
     int sts;
 
     argv0 = PyUnicode_FromWideChar(filename, wcslen(filename));
@@ -253,7 +253,17 @@
         PyErr_SetString(PyExc_RuntimeError, "unable to get sys.path");
         goto error;
     }
-    if (PyList_SetItem(sys_path, 0, argv0)) {
+    sys_path0 = PyList_GetItem(sys_path, 0);
+    sts = 0;
+    if (!sys_path0) {
+        PyErr_Clear();
+        sts = PyList_Append(sys_path, argv0);
+    } else if (PyObject_IsTrue(sys_path0)) {
+        sts = PyList_Insert(sys_path, 0, argv0);
+    } else {
+        sts = PyList_SetItem(sys_path, 0, argv0);
+    }
+    if (sts) {
         argv0 = NULL;
         goto error;
     }

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list