pyldb: Raise TypeError for an invalid ldb.Message index
authorJoseph Sutton <josephsutton@catalyst.net.nz>
Sat, 25 Sep 2021 01:39:56 +0000 (13:39 +1200)
committerAndrew Bartlett <abartlet@samba.org>
Tue, 28 Sep 2021 09:44:35 +0000 (09:44 +0000)
Previously, a TypeError was raised and subsequently overridden by a
KeyError.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=14845

Signed-off-by: Joseph Sutton <josephsutton@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
lib/ldb/pyldb.c
selftest/knownfail.d/pyldb [deleted file]

index 356a243f3c7bf7d45cfcdfd57357ec96659ba182..7c0ab6f07d445bf1d67e56adefcc28a0e830d007 100644 (file)
@@ -3433,33 +3433,25 @@ static PyObject *py_ldb_msg_keys(PyLdbMessageObject *self,
        return obj;
 }
 
-static PyObject *py_ldb_msg_getitem_helper(PyLdbMessageObject *self, PyObject *py_name)
+static PyObject *py_ldb_msg_getitem(PyLdbMessageObject *self, PyObject *py_name)
 {
-       struct ldb_message_element *el;
-       const char *name;
+       struct ldb_message_element *el = NULL;
+       const char *name = NULL;
        struct ldb_message *msg = pyldb_Message_AsMessage(self);
        name = PyUnicode_AsUTF8(py_name);
        if (name == NULL) {
-               PyErr_SetNone(PyExc_TypeError);
                return NULL;
        }
-       if (!ldb_attr_cmp(name, "dn"))
+       if (!ldb_attr_cmp(name, "dn")) {
                return pyldb_Dn_FromDn(msg->dn);
+       }
        el = ldb_msg_find_element(msg, name);
        if (el == NULL) {
-               return NULL;
-       }
-       return (PyObject *)PyLdbMessageElement_FromMessageElement(el, msg->elements);
-}
-
-static PyObject *py_ldb_msg_getitem(PyLdbMessageObject *self, PyObject *py_name)
-{
-       PyObject *ret = py_ldb_msg_getitem_helper(self, py_name);
-       if (ret == NULL) {
                PyErr_SetString(PyExc_KeyError, "No such element");
                return NULL;
        }
-       return ret;
+
+       return PyLdbMessageElement_FromMessageElement(el, msg->elements);
 }
 
 static PyObject *py_ldb_msg_get(PyLdbMessageObject *self, PyObject *args, PyObject *kwargs)
diff --git a/selftest/knownfail.d/pyldb b/selftest/knownfail.d/pyldb
deleted file mode 100644 (file)
index 8d24c45..0000000
+++ /dev/null
@@ -1 +0,0 @@
-^ldb.python.api.LdbMsgTests.test_invalid