]> granicus.if.org Git - vim/commitdiff
updated for version 7.4.380 v7.4.380
authorBram Moolenaar <Bram@vim.org>
Wed, 23 Jul 2014 14:57:00 +0000 (16:57 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 23 Jul 2014 14:57:00 +0000 (16:57 +0200)
Problem:    Loading python may cause Vim to exit.
Solution:   Avoid loading the "site" module. (Taro Muraoka)

src/if_python.c
src/version.c

index c95cb5d0e7d3a678297963d0e077aa85a24ce91b..b7bfa785caf421b921f57418f0ca3a2b583c874a 100644 (file)
@@ -295,6 +295,9 @@ struct PyMethodDef { Py_ssize_t a; };
 #  define PyCObject_FromVoidPtr dll_PyCObject_FromVoidPtr
 #  define PyCObject_AsVoidPtr dll_PyCObject_AsVoidPtr
 # endif
+# if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000
+#  define Py_NoSiteFlag (*dll_Py_NoSiteFlag)
+# endif
 
 /*
  * Pointers for dynamic link
@@ -440,6 +443,9 @@ static void* (*dll_PyCapsule_GetPointer)(PyObject *, char *);
 static PyObject* (*dll_PyCObject_FromVoidPtr)(void *cobj, void (*destr)(void *));
 static void* (*dll_PyCObject_AsVoidPtr)(PyObject *);
 # endif
+# if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000
+static int* dll_Py_NoSiteFlag;
+# endif
 
 static HINSTANCE hinstPython = 0; /* Instance of python.dll */
 
@@ -632,6 +638,9 @@ static struct
 # else
     {"PyCObject_FromVoidPtr", (PYTHON_PROC*)&dll_PyCObject_FromVoidPtr},
     {"PyCObject_AsVoidPtr", (PYTHON_PROC*)&dll_PyCObject_AsVoidPtr},
+# endif
+# if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000
+    {"Py_NoSiteFlag", (PYTHON_PROC*)&dll_Py_NoSiteFlag},
 # endif
     {"", NULL},
 };
@@ -901,6 +910,10 @@ Python_Init(void)
 {
     if (!initialised)
     {
+#if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000
+       PyObject *site;
+#endif
+
 #ifdef DYNAMIC_PYTHON
        if (!python_enabled(TRUE))
        {
@@ -915,11 +928,29 @@ Python_Init(void)
 
        init_structs();
 
+#if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000
+       /* Disable implicit 'import site', because it may cause Vim to exit
+        * when it can't be found. */
+       Py_NoSiteFlag++;
+#endif
+
 #if !defined(MACOS) || defined(MACOS_X_UNIX)
        Py_Initialize();
 #else
        PyMac_Initialize();
 #endif
+
+#if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000
+       /* 'import site' explicitly. */
+       site = PyImport_ImportModule("site");
+       if (site == NULL)
+       {
+           EMSG(_("E887: Sorry, this command is disabled, the Python's site module could not be loaded."));
+           goto fail;
+       }
+       Py_DECREF(site);
+#endif
+
        /* Initialise threads, and below save the state using
         * PyEval_SaveThread.  Without the call to PyEval_SaveThread, thread
         * specific state (such as the system trace hook), will be lost
index b92df32769a03b8314bcfc0dd0f27e2ea1c66a71..24fc1d9e446bcc9c0885bf2d06f443cbd99dabf8 100644 (file)
@@ -734,6 +734,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    380,
 /**/
     379,
 /**/