0
0
mirror of https://github.com/vim/vim.git synced 2025-09-23 03:43:49 -04:00

updated for version 7.3.654

Problem:    When creating a Vim dictionary from Python objects an empty key
            might be used.
Solution:   Do not use empty keys, throw an IndexError. (ZyX)
This commit is contained in:
Bram Moolenaar
2012-09-05 18:45:28 +02:00
parent e2db4361d2
commit 231e1a1723
2 changed files with 23 additions and 7 deletions

View File

@@ -607,6 +607,14 @@ pyll_add(PyObject *self, pylinkedlist_T *ref, pylinkedlist_T **last)
static PyTypeObject DictionaryType; static PyTypeObject DictionaryType;
#define DICTKEY_GET_NOTEMPTY(err) \
DICTKEY_GET(err) \
if (*key == NUL) \
{ \
PyErr_SetString(PyExc_ValueError, _("empty keys are not allowed")); \
return err; \
}
typedef struct typedef struct
{ {
PyObject_HEAD PyObject_HEAD
@@ -659,7 +667,7 @@ pydict_to_tv(PyObject *obj, typval_T *tv, PyObject *lookupDict)
if (valObject == NULL) if (valObject == NULL)
return -1; return -1;
DICTKEY_GET(-1) DICTKEY_GET_NOTEMPTY(-1)
di = dictitem_alloc(key); di = dictitem_alloc(key);
@@ -730,7 +738,7 @@ pymap_to_tv(PyObject *obj, typval_T *tv, PyObject *lookupDict)
return -1; return -1;
} }
DICTKEY_GET(-1) DICTKEY_GET_NOTEMPTY(-1)
valObject = PyTuple_GetItem(litem, 1); valObject = PyTuple_GetItem(litem, 1);
if (valObject == NULL) if (valObject == NULL)
@@ -784,16 +792,22 @@ DictionaryLength(PyObject *self)
DictionaryItem(PyObject *self, PyObject *keyObject) DictionaryItem(PyObject *self, PyObject *keyObject)
{ {
char_u *key; char_u *key;
dictitem_T *val; dictitem_T *di;
DICTKEY_DECL DICTKEY_DECL
DICTKEY_GET(NULL) DICTKEY_GET_NOTEMPTY(NULL)
val = dict_find(((DictionaryObject *) (self))->dict, key, -1); di = dict_find(((DictionaryObject *) (self))->dict, key, -1);
if (di == NULL)
{
PyErr_SetString(PyExc_IndexError, _("no such key in dictionary"));
return NULL;
}
DICTKEY_UNREF DICTKEY_UNREF
return ConvertToPyObject(&val->di_tv); return ConvertToPyObject(&di->di_tv);
} }
static PyInt static PyInt
@@ -811,7 +825,7 @@ DictionaryAssItem(PyObject *self, PyObject *keyObject, PyObject *valObject)
return -1; return -1;
} }
DICTKEY_GET(-1) DICTKEY_GET_NOTEMPTY(-1)
di = dict_find(d, key, -1); di = dict_find(d, key, -1);

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 */
/**/
654,
/**/ /**/
653, 653,
/**/ /**/