0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

updated for version 7.3.661

Problem:    SEGV in Python code.
Solution:   Initialize len to zero.  Use the right function depending on
            version. (Maxim Philippov)
This commit is contained in:
Bram Moolenaar 2012-09-12 20:21:43 +02:00
parent fca93c093e
commit e8cdcef875
4 changed files with 24 additions and 7 deletions

View File

@ -74,7 +74,7 @@ static struct PyMethodDef OutputMethods[] = {
static PyObject * static PyObject *
OutputWrite(PyObject *self, PyObject *args) OutputWrite(PyObject *self, PyObject *args)
{ {
Py_ssize_t len; Py_ssize_t len = 0;
char *str = NULL; char *str = NULL;
int error = ((OutputObject *)(self))->error; int error = ((OutputObject *)(self))->error;

View File

@ -44,8 +44,6 @@
# undef _XOPEN_SOURCE /* pyconfig.h defines it as well. */ # undef _XOPEN_SOURCE /* pyconfig.h defines it as well. */
#endif #endif
#define PY_SSIZE_T_CLEAN
#include <Python.h> #include <Python.h>
#if defined(MACOS) && !defined(MACOS_X_UNIX) #if defined(MACOS) && !defined(MACOS_X_UNIX)
# include "macglue.h" # include "macglue.h"
@ -54,6 +52,10 @@
#undef main /* Defined in python.h - aargh */ #undef main /* Defined in python.h - aargh */
#undef HAVE_FCNTL_H /* Clash with os_win32.h */ #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); static void init_structs(void);
#define PyBytes_FromString PyString_FromString #define PyBytes_FromString PyString_FromString
@ -358,8 +360,15 @@ static struct
PYTHON_PROC *ptr; PYTHON_PROC *ptr;
} python_funcname_table[] = } python_funcname_table[] =
{ {
#ifndef PY_SSIZE_T_CLEAN
{"PyArg_Parse", (PYTHON_PROC*)&dll_PyArg_Parse}, {"PyArg_Parse", (PYTHON_PROC*)&dll_PyArg_Parse},
{"PyArg_ParseTuple", (PYTHON_PROC*)&dll_PyArg_ParseTuple}, {"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_Free", (PYTHON_PROC*)&dll_PyMem_Free},
{"PyMem_Malloc", (PYTHON_PROC*)&dll_PyMem_Malloc}, {"PyMem_Malloc", (PYTHON_PROC*)&dll_PyMem_Malloc},
{"PyDict_SetItemString", (PYTHON_PROC*)&dll_PyDict_SetItemString}, {"PyDict_SetItemString", (PYTHON_PROC*)&dll_PyDict_SetItemString},
@ -422,7 +431,6 @@ static struct
{"PySys_SetArgv", (PYTHON_PROC*)&dll_PySys_SetArgv}, {"PySys_SetArgv", (PYTHON_PROC*)&dll_PySys_SetArgv},
{"PyType_Type", (PYTHON_PROC*)&dll_PyType_Type}, {"PyType_Type", (PYTHON_PROC*)&dll_PyType_Type},
{"PyType_Ready", (PYTHON_PROC*)&dll_PyType_Ready}, {"PyType_Ready", (PYTHON_PROC*)&dll_PyType_Ready},
{"Py_BuildValue", (PYTHON_PROC*)&dll_Py_BuildValue},
{"Py_FindMethod", (PYTHON_PROC*)&dll_Py_FindMethod}, {"Py_FindMethod", (PYTHON_PROC*)&dll_Py_FindMethod},
# if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02050000 \ # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02050000 \
&& SIZEOF_SIZE_T != SIZEOF_INT && SIZEOF_SIZE_T != SIZEOF_INT

View File

@ -42,8 +42,6 @@
# undef _DEBUG # undef _DEBUG
#endif #endif
#define PY_SSIZE_T_CLEAN
#ifdef F_BLANK #ifdef F_BLANK
# undef F_BLANK # undef F_BLANK
#endif #endif
@ -66,6 +64,10 @@
#undef main /* Defined in python.h - aargh */ #undef main /* Defined in python.h - aargh */
#undef HAVE_FCNTL_H /* Clash with os_win32.h */ #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); static void init_structs(void);
/* The "surrogateescape" error handler is new in Python 3.1 */ /* The "surrogateescape" error handler is new in Python 3.1 */
@ -328,7 +330,13 @@ static struct
{"PySys_SetArgv", (PYTHON_PROC*)&py3_PySys_SetArgv}, {"PySys_SetArgv", (PYTHON_PROC*)&py3_PySys_SetArgv},
{"Py_SetPythonHome", (PYTHON_PROC*)&py3_Py_SetPythonHome}, {"Py_SetPythonHome", (PYTHON_PROC*)&py3_Py_SetPythonHome},
{"Py_Initialize", (PYTHON_PROC*)&py3_Py_Initialize}, {"Py_Initialize", (PYTHON_PROC*)&py3_Py_Initialize},
#ifndef PY_SSIZE_T_CLEAN
{"PyArg_ParseTuple", (PYTHON_PROC*)&py3_PyArg_ParseTuple}, {"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_Free", (PYTHON_PROC*)&py3_PyMem_Free},
{"PyMem_Malloc", (PYTHON_PROC*)&py3_PyMem_Malloc}, {"PyMem_Malloc", (PYTHON_PROC*)&py3_PyMem_Malloc},
{"PyList_New", (PYTHON_PROC*)&py3_PyList_New}, {"PyList_New", (PYTHON_PROC*)&py3_PyList_New},
@ -364,7 +372,6 @@ static struct
{"PyObject_GetIter", (PYTHON_PROC*)&py3_PyObject_GetIter}, {"PyObject_GetIter", (PYTHON_PROC*)&py3_PyObject_GetIter},
{"PyLong_FromLong", (PYTHON_PROC*)&py3_PyLong_FromLong}, {"PyLong_FromLong", (PYTHON_PROC*)&py3_PyLong_FromLong},
{"PyDict_New", (PYTHON_PROC*)&py3_PyDict_New}, {"PyDict_New", (PYTHON_PROC*)&py3_PyDict_New},
{"Py_BuildValue", (PYTHON_PROC*)&py3_Py_BuildValue},
{"PyType_Ready", (PYTHON_PROC*)&py3_PyType_Ready}, {"PyType_Ready", (PYTHON_PROC*)&py3_PyType_Ready},
{"PyDict_SetItemString", (PYTHON_PROC*)&py3_PyDict_SetItemString}, {"PyDict_SetItemString", (PYTHON_PROC*)&py3_PyDict_SetItemString},
{"PyLong_AsLong", (PYTHON_PROC*)&py3_PyLong_AsLong}, {"PyLong_AsLong", (PYTHON_PROC*)&py3_PyLong_AsLong},

View File

@ -719,6 +719,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
661,
/**/ /**/
660, 660,
/**/ /**/