]> granicus.if.org Git - vim/commitdiff
updated for version 7.3.661 v7.3.661
authorBram Moolenaar <Bram@vim.org>
Wed, 12 Sep 2012 18:21:43 +0000 (20:21 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 12 Sep 2012 18:21:43 +0000 (20:21 +0200)
Problem:    SEGV in Python code.
Solution:   Initialize len to zero.  Use the right function depending on
            version. (Maxim Philippov)

src/if_py_both.h
src/if_python.c
src/if_python3.c
src/version.c

index 0031003eda4400063da880a1e2abc7573a16f0f2..5e12638f5e4a4a2bb38da11186089edc297b26f3 100644 (file)
@@ -74,7 +74,7 @@ static struct PyMethodDef OutputMethods[] = {
     static PyObject *
 OutputWrite(PyObject *self, PyObject *args)
 {
-    Py_ssize_t len;
+    Py_ssize_t len = 0;
     char *str = NULL;
     int error = ((OutputObject *)(self))->error;
 
index 385905e24f4838f65e4fb5264736c67d56a01efd..a20aba0f32abbd3835173107a6550d828af8ec48 100644 (file)
@@ -44,8 +44,6 @@
 # undef _XOPEN_SOURCE  /* pyconfig.h defines it as well. */
 #endif
 
-#define PY_SSIZE_T_CLEAN
-
 #include <Python.h>
 #if defined(MACOS) && !defined(MACOS_X_UNIX)
 # include "macglue.h"
 #undef main /* Defined in python.h - aargh */
 #undef HAVE_FCNTL_H /* Clash with os_win32.h */
 
+#if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02050000
+# define PY_SSIZE_T_CLEAN
+#endif
+
 static void init_structs(void);
 
 #define PyBytes_FromString PyString_FromString
@@ -358,8 +360,15 @@ static struct
     PYTHON_PROC *ptr;
 } python_funcname_table[] =
 {
+#ifndef PY_SSIZE_T_CLEAN
     {"PyArg_Parse", (PYTHON_PROC*)&dll_PyArg_Parse},
     {"PyArg_ParseTuple", (PYTHON_PROC*)&dll_PyArg_ParseTuple},
+    {"Py_BuildValue", (PYTHON_PROC*)&dll_Py_BuildValue},
+#else
+    {"_PyArg_Parse_SizeT", (PYTHON_PROC*)&dll_PyArg_Parse},
+    {"_PyArg_ParseTuple_SizeT", (PYTHON_PROC*)&dll_PyArg_ParseTuple},
+    {"_Py_BuildValue_SizeT", (PYTHON_PROC*)&dll_Py_BuildValue},
+#endif
     {"PyMem_Free", (PYTHON_PROC*)&dll_PyMem_Free},
     {"PyMem_Malloc", (PYTHON_PROC*)&dll_PyMem_Malloc},
     {"PyDict_SetItemString", (PYTHON_PROC*)&dll_PyDict_SetItemString},
@@ -422,7 +431,6 @@ static struct
     {"PySys_SetArgv", (PYTHON_PROC*)&dll_PySys_SetArgv},
     {"PyType_Type", (PYTHON_PROC*)&dll_PyType_Type},
     {"PyType_Ready", (PYTHON_PROC*)&dll_PyType_Ready},
-    {"Py_BuildValue", (PYTHON_PROC*)&dll_Py_BuildValue},
     {"Py_FindMethod", (PYTHON_PROC*)&dll_Py_FindMethod},
 # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02050000 \
        && SIZEOF_SIZE_T != SIZEOF_INT
index 0c10f8dbc717ccbdf1e98a19100cb00250303e02..43ed0e2a5ff903c1214b1e7d605ab0d9059b712f 100644 (file)
@@ -42,8 +42,6 @@
 # undef _DEBUG
 #endif
 
-#define PY_SSIZE_T_CLEAN
-
 #ifdef F_BLANK
 # undef F_BLANK
 #endif
 #undef main /* Defined in python.h - aargh */
 #undef HAVE_FCNTL_H /* Clash with os_win32.h */
 
+#if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02050000
+# define PY_SSIZE_T_CLEAN
+#endif
+
 static void init_structs(void);
 
 /* The "surrogateescape" error handler is new in Python 3.1 */
@@ -328,7 +330,13 @@ static struct
     {"PySys_SetArgv", (PYTHON_PROC*)&py3_PySys_SetArgv},
     {"Py_SetPythonHome", (PYTHON_PROC*)&py3_Py_SetPythonHome},
     {"Py_Initialize", (PYTHON_PROC*)&py3_Py_Initialize},
+#ifndef PY_SSIZE_T_CLEAN
     {"PyArg_ParseTuple", (PYTHON_PROC*)&py3_PyArg_ParseTuple},
+    {"Py_BuildValue", (PYTHON_PROC*)&py3_Py_BuildValue},
+#else
+    {"_PyArg_ParseTuple_SizeT", (PYTHON_PROC*)&py3_PyArg_ParseTuple},
+    {"_Py_BuildValue_SizeT", (PYTHON_PROC*)&py3_Py_BuildValue},
+#endif
     {"PyMem_Free", (PYTHON_PROC*)&py3_PyMem_Free},
     {"PyMem_Malloc", (PYTHON_PROC*)&py3_PyMem_Malloc},
     {"PyList_New", (PYTHON_PROC*)&py3_PyList_New},
@@ -364,7 +372,6 @@ static struct
     {"PyObject_GetIter", (PYTHON_PROC*)&py3_PyObject_GetIter},
     {"PyLong_FromLong", (PYTHON_PROC*)&py3_PyLong_FromLong},
     {"PyDict_New", (PYTHON_PROC*)&py3_PyDict_New},
-    {"Py_BuildValue", (PYTHON_PROC*)&py3_Py_BuildValue},
     {"PyType_Ready", (PYTHON_PROC*)&py3_PyType_Ready},
     {"PyDict_SetItemString", (PYTHON_PROC*)&py3_PyDict_SetItemString},
     {"PyLong_AsLong", (PYTHON_PROC*)&py3_PyLong_AsLong},
index 3851b3f88907fb8448791bd33228057222e1ef94..4b135064750541b7adbb375e30627ce10ddacf11 100644 (file)
@@ -719,6 +719,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    661,
 /**/
     660,
 /**/