summaryrefslogtreecommitdiff
path: root/src/if_python.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2014-07-23 16:57:00 +0200
committerBram Moolenaar <Bram@vim.org>2014-07-23 16:57:00 +0200
commit12a28d4b29f1b8a42d9fb994f1d2c9cb717564ab (patch)
treef54eac4b354924ed4b79c405033ec6503e5c8503 /src/if_python.c
parent158a1b074828341767ad4ce912b346bf14189605 (diff)
downloadvim-12a28d4b29f1b8a42d9fb994f1d2c9cb717564ab.zip
updated for version 7.4.380
Problem: Loading python may cause Vim to exit. Solution: Avoid loading the "site" module. (Taro Muraoka)
Diffstat (limited to 'src/if_python.c')
-rw-r--r--src/if_python.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/if_python.c b/src/if_python.c
index c95cb5d0e..b7bfa785c 100644
--- a/src/if_python.c
+++ b/src/if_python.c
@@ -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 */
@@ -633,6 +639,9 @@ static struct
{"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