Skip to content

Commit 3ababee

Browse files
committed
Check that produce headers are of correct type
1 parent 518babd commit 3ababee

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

confluent_kafka/src/confluent_kafka.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -951,16 +951,22 @@ rd_kafka_headers_t *py_headers_to_c (PyObject *headers_plist) {
951951
const char *header_key, *header_value = NULL;
952952
int header_key_len = 0, header_value_len = 0;
953953

954+
if (!PyList_Check(headers_plist)) {
955+
PyErr_SetString(PyExc_TypeError,
956+
"Headers are expected to be a "
957+
"list of (key,value) tuples");
958+
return NULL;
959+
}
960+
954961
len = PyList_Size(headers_plist);
955962
rd_headers = rd_kafka_headers_new(len);
956963

957964
for (i = 0; i < len; i++) {
958-
959965
if(!PyArg_ParseTuple(PyList_GET_ITEM(headers_plist, i), "s#z#", &header_key,
960966
&header_key_len, &header_value, &header_value_len)){
961967
rd_kafka_headers_destroy(rd_headers);
962968
PyErr_SetString(PyExc_TypeError,
963-
"Headers are expected to be a tuple of (key, value)");
969+
"Headers are expected to be a list of (key,value) tuples");
964970
return NULL;
965971
}
966972

tests/test_Producer.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,13 @@ def test_produce_headers():
7171
p.produce('mytopic', value='somedata', key='a key', headers=[('key_with_null_value', None)])
7272
p.produce('mytopic', value='somedata', key='a key', headers=[])
7373

74+
with pytest.raises(TypeError) as ex:
75+
p.produce('mytopic', value='somedata', key='a key', headers={'my': 'dict'})
76+
assert 'Headers are expected to be a list of (key,value) tuples' == str(ex.value)
77+
7478
with pytest.raises(TypeError) as ex:
7579
p.produce('mytopic', value='somedata', key='a key', headers=[('malformed_header')])
76-
assert 'Headers are expected to be a tuple of (key, value)' == str(ex.value)
80+
assert 'Headers are expected to be a list of (key,value) tuples' == str(ex.value)
7781

7882
p.flush()
7983

0 commit comments

Comments
 (0)