changeset 4633:3857d399ab41 v7.3.1064

updated for version 7.3.1064 Problem: Python: insufficient error checking. Solution: Python patch 23. (ZyX)
author Bram Moolenaar <bram@vim.org>
date Thu, 30 May 2013 13:17:17 +0200
parents f2ecc8759d6e
children 18c8af5790e9
files src/if_py_both.h src/version.c
diffstat 2 files changed, 23 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/src/if_py_both.h
+++ b/src/if_py_both.h
@@ -3304,10 +3304,10 @@ SetBufferLineList(buf_T *buf, PyInt lo, 
 
 	for (i = 0; i < new_len; ++i)
 	{
-	    PyObject *line = PyList_GetItem(list, i);
-
-	    array[i] = StringToLine(line);
-	    if (array[i] == NULL)
+	    PyObject *line;
+
+	    if (!(line = PyList_GetItem(list, i)) ||
+		!(array[i] = StringToLine(line)))
 	    {
 		while (i)
 		    vim_free(array[--i]);
@@ -3319,7 +3319,7 @@ SetBufferLineList(buf_T *buf, PyInt lo, 
 	VimTryStart();
 	PyErr_Clear();
 
-	// START of region without "return".  Must call restore_buffer()!
+	/* START of region without "return".  Must call restore_buffer()! */
 	switch_buffer(&savebuf, buf);
 
 	if (u_save((linenr_T)(lo-1), (linenr_T)hi) == FAIL)
@@ -3400,7 +3400,7 @@ SetBufferLineList(buf_T *buf, PyInt lo, 
 	if (buf == savebuf)
 	    py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)extra);
 
-	// END of region without "return".
+	/* END of region without "return". */
 	restore_buffer(savebuf);
 
 	if (VimTryEnd())
@@ -3479,10 +3479,10 @@ InsertBufferLines(buf_T *buf, PyInt n, P
 
 	for (i = 0; i < size; ++i)
 	{
-	    PyObject *line = PyList_GetItem(lines, i);
-	    array[i] = StringToLine(line);
-
-	    if (array[i] == NULL)
+	    PyObject *line;
+
+	    if (!(line = PyList_GetItem(lines, i)) ||
+		!(array[i] = StringToLine(line)))
 	    {
 		while (i)
 		    vim_free(array[--i]);
@@ -4014,8 +4014,15 @@ BufferMark(BufferObject *self, PyObject 
 
     if (!PyArg_ParseTuple(args, "s", &pmark))
 	return NULL;
+
+    if (STRLEN(pmark) != 1)
+    {
+	PyErr_SetString(PyExc_ValueError,
+		_("mark name must be a single character"));
+	return NULL;
+    }
+
     mark = *pmark;
-
     VimTryStart();
     switch_buffer(&savebuf, self->buf);
     posp = getmark(mark, FALSE);
@@ -4258,7 +4265,7 @@ CurrentSetattr(PyObject *self UNUSED, ch
 
 	if (value->ob_type != &BufferType)
 	{
-	    PyErr_SetString(PyExc_TypeError, _("expected vim.buffer object"));
+	    PyErr_SetString(PyExc_TypeError, _("expected vim.Buffer object"));
 	    return -1;
 	}
 
@@ -4283,7 +4290,7 @@ CurrentSetattr(PyObject *self UNUSED, ch
 
 	if (value->ob_type != &WindowType)
 	{
-	    PyErr_SetString(PyExc_TypeError, _("expected vim.window object"));
+	    PyErr_SetString(PyExc_TypeError, _("expected vim.Window object"));
 	    return -1;
 	}
 
@@ -4315,7 +4322,7 @@ CurrentSetattr(PyObject *self UNUSED, ch
     {
 	if (value->ob_type != &TabPageType)
 	{
-	    PyErr_SetString(PyExc_TypeError, _("expected vim.tabpage object"));
+	    PyErr_SetString(PyExc_TypeError, _("expected vim.TabPage object"));
 	    return -1;
 	}
 
--- a/src/version.c
+++ b/src/version.c
@@ -729,6 +729,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1064,
+/**/
     1063,
 /**/
     1062,