From 8753ff0140d41d4997d3547a396bc50c43f39ac4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Siobh=C3=A1n=20Sterrett?= Date: Thu, 26 Sep 2024 13:29:43 -0400 Subject: [PATCH 1/4] Swaps topic_names and future in kws array in Admin_describe_topics() --- src/confluent_kafka/src/Admin.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/confluent_kafka/src/Admin.c b/src/confluent_kafka/src/Admin.c index c58166d6e..6b86257da 100644 --- a/src/confluent_kafka/src/Admin.c +++ b/src/confluent_kafka/src/Admin.c @@ -2305,8 +2305,8 @@ PyObject *Admin_describe_topics (Handle *self, PyObject *args, PyObject *kwargs) int topics_cnt = 0; int i = 0; - static char *kws[] = {"future", - "topic_names", + static char *kws[] = {"topic_names", + "future", /* options */ "request_timeout", "include_authorized_operations", From 54b00ba2143c88202281cb34aa11a31bb61f149c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Siobh=C3=A1n=20Sterrett?= Date: Thu, 26 Sep 2024 13:34:10 -0400 Subject: [PATCH 2/4] Raises TypeError in Admin_list_consumer_group_offset() if request is not a list --- src/confluent_kafka/src/Admin.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/confluent_kafka/src/Admin.c b/src/confluent_kafka/src/Admin.c index 6b86257da..d179530ba 100644 --- a/src/confluent_kafka/src/Admin.c +++ b/src/confluent_kafka/src/Admin.c @@ -2650,10 +2650,15 @@ PyObject *Admin_list_consumer_group_offsets (Handle *self, PyObject *args, PyObj * admin operation is finished, so we need to keep our own refcount. */ Py_INCREF(future); - if (PyList_Check(request) && - (requests_cnt = (int)PyList_Size(request)) != 1) { - PyErr_SetString(PyExc_ValueError, - "Currently we support listing only 1 consumer groups offset information"); + if (PyList_Check(request)) { + if ((int)PyList_Size(request) != 1) { + PyErr_SetString(PyExc_ValueError, + "Currently we support listing only 1 consumer groups offset inforation"); + goto err; + } + } else { + PyErr_SetString(PyExc_TypeError, + "Expected 'request' to be a list"); goto err; } From f4d5c68fc077d79615417661788138ab9a4dae7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Siobh=C3=A1n=20Sterrett?= Date: Thu, 26 Sep 2024 13:36:56 -0400 Subject: [PATCH 3/4] Raises TypeError in Admin_alter_consumer_group_offsets() if request is not a list --- src/confluent_kafka/src/Admin.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/confluent_kafka/src/Admin.c b/src/confluent_kafka/src/Admin.c index d179530ba..ad9ccf3b7 100644 --- a/src/confluent_kafka/src/Admin.c +++ b/src/confluent_kafka/src/Admin.c @@ -2794,10 +2794,15 @@ PyObject *Admin_alter_consumer_group_offsets (Handle *self, PyObject *args, PyOb * admin operation is finished, so we need to keep our own refcount. */ Py_INCREF(future); - if (PyList_Check(request) && - (requests_cnt = (int)PyList_Size(request)) != 1) { - PyErr_SetString(PyExc_ValueError, - "Currently we support alter consumer groups offset request for 1 group only"); + if (PyList_Check(request)) { + if ((int)PyList_Size(request) != 1) { + PyErr_SetString(PyExc_ValueError, + "Currently we support alter consumer groups offset request for 1 group only"); + goto err; + } + } else { + PyErr_SetString(PyExc_TypeError, + "Expected 'request' to be a list"); goto err; } From 1b62ddf8967cc61a7a6686689dd0ee119c5cd3e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Siobh=C3=A1n=20Sterrett?= Date: Thu, 26 Sep 2024 13:41:55 -0400 Subject: [PATCH 4/4] Allows elements of plist in py_to_c_parts() to be instances of a subtype of TopicPartition --- src/confluent_kafka/src/confluent_kafka.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/confluent_kafka/src/confluent_kafka.c b/src/confluent_kafka/src/confluent_kafka.c index 506c9a995..1f7723d69 100644 --- a/src/confluent_kafka/src/confluent_kafka.c +++ b/src/confluent_kafka/src/confluent_kafka.c @@ -1330,8 +1330,8 @@ rd_kafka_topic_partition_list_t *py_to_c_parts (PyObject *plist) { TopicPartition *tp = (TopicPartition *) PyList_GetItem(plist, i); - if (PyObject_Type((PyObject *)tp) != - (PyObject *)&TopicPartitionType) { + if (PyObject_TypeCheck((PyObject *)tp, + (PyObject *)&TopicPartitionType) == 0) { PyErr_Format(PyExc_TypeError, "expected %s", TopicPartitionType.tp_name);