mirror of
https://github.com/vim/vim.git
synced 2025-09-25 03:54:15 -04:00
updated for version 7.3.1045
Problem: Python: No error handling for VimToPython function. Solution: Python patch 6. (ZyX)
This commit is contained in:
@@ -432,8 +432,8 @@ VimToPython(typval_T *our_tv, int depth, PyObject *lookupDict)
|
|||||||
sprintf(ptrBuf, "%p",
|
sprintf(ptrBuf, "%p",
|
||||||
our_tv->v_type == VAR_LIST ? (void *)our_tv->vval.v_list
|
our_tv->v_type == VAR_LIST ? (void *)our_tv->vval.v_list
|
||||||
: (void *)our_tv->vval.v_dict);
|
: (void *)our_tv->vval.v_dict);
|
||||||
result = PyDict_GetItemString(lookupDict, ptrBuf);
|
|
||||||
if (result != NULL)
|
if ((result = PyDict_GetItemString(lookupDict, ptrBuf)))
|
||||||
{
|
{
|
||||||
Py_INCREF(result);
|
Py_INCREF(result);
|
||||||
return result;
|
return result;
|
||||||
@@ -467,32 +467,52 @@ VimToPython(typval_T *our_tv, int depth, PyObject *lookupDict)
|
|||||||
list_T *list = our_tv->vval.v_list;
|
list_T *list = our_tv->vval.v_list;
|
||||||
listitem_T *curr;
|
listitem_T *curr;
|
||||||
|
|
||||||
result = PyList_New(0);
|
if (list == NULL)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
if (list != NULL)
|
if (!(result = PyList_New(0)))
|
||||||
|
return 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)
|
||||||
{
|
{
|
||||||
newObj = VimToPython(&curr->li_tv, depth + 1, lookupDict);
|
if (!(newObj = VimToPython(&curr->li_tv, depth + 1, lookupDict)))
|
||||||
PyList_Append(result, newObj);
|
{
|
||||||
Py_DECREF(newObj);
|
Py_DECREF(result);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
if (PyList_Append(result, newObj))
|
||||||
|
{
|
||||||
|
Py_DECREF(newObj);
|
||||||
|
Py_DECREF(result);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
Py_DECREF(newObj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (our_tv->v_type == VAR_DICT)
|
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;
|
hashtab_T *ht = &our_tv->vval.v_dict->dv_hashtab;
|
||||||
long_u todo = ht->ht_used;
|
long_u todo = ht->ht_used;
|
||||||
hashitem_T *hi;
|
hashitem_T *hi;
|
||||||
dictitem_T *di;
|
dictitem_T *di;
|
||||||
|
if (our_tv->vval.v_dict == NULL)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
PyDict_SetItemString(lookupDict, ptrBuf, result);
|
if (!(result = PyDict_New()))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
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)
|
||||||
{
|
{
|
||||||
@@ -501,10 +521,18 @@ VimToPython(typval_T *our_tv, int depth, PyObject *lookupDict)
|
|||||||
--todo;
|
--todo;
|
||||||
|
|
||||||
di = dict_lookup(hi);
|
di = dict_lookup(hi);
|
||||||
newObj = VimToPython(&di->di_tv, depth + 1, lookupDict);
|
if (!(newObj = VimToPython(&di->di_tv, depth + 1, lookupDict)))
|
||||||
PyDict_SetItemString(result, (char *)hi->hi_key, newObj);
|
{
|
||||||
Py_DECREF(newObj);
|
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[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1045,
|
||||||
/**/
|
/**/
|
||||||
1044,
|
1044,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user