To: vim_dev@googlegroups.com Subject: Patch 7.4.380 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 7.4.380 Problem: Loading python may cause Vim to exit. Solution: Avoid loading the "site" module. (Taro Muraoka) Files: src/if_python.c *** ../vim-7.4.379/src/if_python.c 2014-03-30 16:11:37.176530823 +0200 --- src/if_python.c 2014-07-23 16:46:42.863880615 +0200 *************** *** 295,300 **** --- 295,303 ---- # 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,445 **** --- 443,451 ---- 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,638 **** --- 639,647 ---- {"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,906 **** --- 910,919 ---- { if (!initialised) { + #if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000 + PyObject *site; + #endif + #ifdef DYNAMIC_PYTHON if (!python_enabled(TRUE)) { *************** *** 915,925 **** --- 928,956 ---- 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 *** ../vim-7.4.379/src/version.c 2014-07-23 16:33:04.079886500 +0200 --- src/version.c 2014-07-23 16:43:47.939881872 +0200 *************** *** 736,737 **** --- 736,739 ---- { /* Add new patch number below this line */ + /**/ + 380, /**/ -- Looking at Perl through Lisp glasses, Perl looks atrocious. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///