diff options
author | Panu Matilainen <pmatilai@redhat.com> | 2010-05-19 10:12:43 +0300 |
---|---|---|
committer | Panu Matilainen <pmatilai@redhat.com> | 2010-05-19 10:12:43 +0300 |
commit | 0e0e332b466a9784620c483faa374067381e96ce (patch) | |
tree | c48a9dce26b347d0c5728215d748f6b2641fb86d | |
parent | 2b7884ce2914c48514023dbe61dc7a126964f438 (diff) | |
download | librpm-tizen-0e0e332b466a9784620c483faa374067381e96ce.tar.gz librpm-tizen-0e0e332b466a9784620c483faa374067381e96ce.tar.bz2 librpm-tizen-0e0e332b466a9784620c483faa374067381e96ce.zip |
Handle non-existent dependency sets in python (RhBug:593553)
- rpmdsNew() returns NULL if the requested dependency type doesn't
exist in the header. The C-side API can handle NULL to all rpmds
"methods" and this is how librpm deals with non-existent sets rather
than waste memory on for empty ds structures. However the python side
wasn't expecting NULL for legal requests (but not setting error either)
and thus blowing up with SystemError exception.
- Raise TypeError on illegal arguments to rpm.ds constructor, and present
non-existent dependency sets as empty rpm.ds objects to python. This
lets python callers use iteration over ds items regardless of whether
the dependency actually exists or not. The alternative of returning
None (or raising exceptions) would break existing code for no
particularly good reason.
-rw-r--r-- | python/rpmds-py.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/python/rpmds-py.c b/python/rpmds-py.c index 771cd06c2..4587201e7 100644 --- a/python/rpmds-py.c +++ b/python/rpmds-py.c @@ -288,10 +288,11 @@ static PyObject * rpmds_new(PyTypeObject * subtype, PyObject *args, PyObject *kw } else { ds = rpmdsNew(h, tagN, 0); } + } else { + PyErr_SetString(PyExc_TypeError, "header or tuple expected"); + return NULL; } - if (ds == NULL) return NULL; - return rpmds_Wrap(subtype, ds); } |