summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Sutton <josephsutton@catalyst.net.nz>2021-09-25 13:39:56 +1200
committerStefan Metzmacher <metze@samba.org>2021-10-28 08:58:16 +0000
commit65f3e987675d378afd7df4445d04c86d83cde853 (patch)
treef0fb6d1d54d5bccae966f13775f6f00d1d0ae157
parent4ff0a23a04b230bab3454cf88d317304df2cb5cb (diff)
downloadsamba-65f3e987675d378afd7df4445d04c86d83cde853.tar.gz
pyldb: Raise TypeError for an invalid ldb.Message index
Previously, a TypeError was raised and subsequently overridden by a KeyError. BUG: https://bugzilla.samba.org/show_bug.cgi?id=14845 BUG: https://bugzilla.samba.org/show_bug.cgi?id=14848 Signed-off-by: Joseph Sutton <josephsutton@catalyst.net.nz> Reviewed-by: Andrew Bartlett <abartlet@samba.org> (cherry picked from commit 22353767ca75af9d9e8fa1e7da372dcb5eddfcb7)
-rw-r--r--lib/ldb/pyldb.c22
-rw-r--r--selftest/knownfail.d/pyldb1
2 files changed, 7 insertions, 16 deletions
diff --git a/lib/ldb/pyldb.c b/lib/ldb/pyldb.c
index ff6c1c6f1ab..1b2f12adf5e 100644
--- a/lib/ldb/pyldb.c
+++ b/lib/ldb/pyldb.c
@@ -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
index 8d24c4515d3..00000000000
--- a/selftest/knownfail.d/pyldb
+++ /dev/null
@@ -1 +0,0 @@
-^ldb.python.api.LdbMsgTests.test_invalid