Skip to content
Permalink
Browse files

updated for version 7.3.1045

Problem:    Python: No error handling for VimToPython function.
Solution:   Python patch 6. (ZyX)
  • Loading branch information...
brammool committed May 29, 2013
1 parent 9e822c0 commit 21642ed1b4aeab32d419f310d2100999482b1079
Showing with 53 additions and 23 deletions.
  1. +51 −23 src/if_py_both.h
  2. +2 −0 src/version.c
@@ -432,8 +432,8 @@ VimToPython(typval_T *our_tv, int depth, PyObject *lookupDict)
sprintf(ptrBuf, "%p",
our_tv->v_type == VAR_LIST ? (void *)our_tv->vval.v_list
: (void *)our_tv->vval.v_dict);
result = PyDict_GetItemString(lookupDict, ptrBuf);
if (result != NULL)

if ((result = PyDict_GetItemString(lookupDict, ptrBuf)))
{
Py_INCREF(result);
return result;
@@ -467,44 +467,72 @@ VimToPython(typval_T *our_tv, int depth, PyObject *lookupDict)
list_T *list = our_tv->vval.v_list;
listitem_T *curr;

result = PyList_New(0);
if (list == NULL)
return NULL;

if (!(result = PyList_New(0)))
return NULL;

if (list != NULL)
if (PyDict_SetItemString(lookupDict, ptrBuf, result))
{
PyDict_SetItemString(lookupDict, ptrBuf, result);
Py_DECREF(result);
return NULL;
}

for (curr = list->lv_first; curr != NULL; curr = curr->li_next)
for (curr = list->lv_first; curr != NULL; curr = curr->li_next)
{
if (!(newObj = VimToPython(&curr->li_tv, depth + 1, lookupDict)))
{
Py_DECREF(result);
return NULL;
}
if (PyList_Append(result, newObj))
{
newObj = VimToPython(&curr->li_tv, depth + 1, lookupDict);
PyList_Append(result, newObj);
Py_DECREF(newObj);
Py_DECREF(result);
return NULL;
}
Py_DECREF(newObj);
}
}
else if (our_tv->v_type == VAR_DICT)
{
result = PyDict_New();

if (our_tv->vval.v_dict != NULL)
{
hashtab_T *ht = &our_tv->vval.v_dict->dv_hashtab;
long_u todo = ht->ht_used;
hashitem_T *hi;
dictitem_T *di;
hashtab_T *ht = &our_tv->vval.v_dict->dv_hashtab;
long_u todo = ht->ht_used;
hashitem_T *hi;
dictitem_T *di;
if (our_tv->vval.v_dict == NULL)
return NULL;

if (!(result = PyDict_New()))
return NULL;

PyDict_SetItemString(lookupDict, ptrBuf, result);
if (PyDict_SetItemString(lookupDict, ptrBuf, result))
{
Py_DECREF(result);
return NULL;
}

for (hi = ht->ht_array; todo > 0; ++hi)
for (hi = ht->ht_array; todo > 0; ++hi)
{
if (!HASHITEM_EMPTY(hi))
{
if (!HASHITEM_EMPTY(hi))
{
--todo;
--todo;

di = dict_lookup(hi);
newObj = VimToPython(&di->di_tv, depth + 1, lookupDict);
PyDict_SetItemString(result, (char *)hi->hi_key, newObj);
di = dict_lookup(hi);
if (!(newObj = VimToPython(&di->di_tv, depth + 1, lookupDict)))
{
Py_DECREF(result);
return NULL;
}
if (PyDict_SetItemString(result, (char *)hi->hi_key, newObj))
{
Py_DECREF(result);
Py_DECREF(newObj);
return NULL;
}
Py_DECREF(newObj);
}
}
}
@@ -728,6 +728,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1045,
/**/
1044,
/**/

0 comments on commit 21642ed

Please sign in to comment.
You can’t perform that action at this time.