Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix segfault when subscribing to a non-existent topic #4245

Merged
merged 3 commits into from
Apr 19, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 14 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
# librdkafka v2.1.1

librdkafka v2.1.1 is a maintenance release:

* Fix segmentation fault when subscribing to a non-existent topic and
calling `rd_kafka_message_leader_epoch()` on the polled `rkmessage` (#4245).


# librdkafka v2.1.0

librdkafka v2.1.0 is a feature release:
Expand Down Expand Up @@ -64,19 +72,23 @@ librdkafka v2.1.0 is a feature release:
any of the **seek**, **pause**, **resume** or **rebalancing** operation, `on_consume`
interceptors might be called incorrectly (maybe multiple times) for not consumed messages.

### Consume API
* Segmentation fault when subscribing to a non-existent topic and
calling `rd_kafka_message_leader_epoch()` on the polled `rkmessage`.



# librdkafka v2.0.2

librdkafka v2.0.2 is a bugfix release:
librdkafka v2.0.2 is a maintenance release:

* Fix OpenSSL version in Win32 nuget package (#4152).



# librdkafka v2.0.1

librdkafka v2.0.1 is a bugfix release:
librdkafka v2.0.1 is a maintenance release:

* Fixed nuget package for Linux ARM64 release (#4150).

Expand Down
2 changes: 1 addition & 1 deletion src/rdkafka_msg.c
Original file line number Diff line number Diff line change
Expand Up @@ -1563,7 +1563,7 @@ rd_kafka_message_status(const rd_kafka_message_t *rkmessage) {
int32_t rd_kafka_message_leader_epoch(const rd_kafka_message_t *rkmessage) {
rd_kafka_msg_t *rkm;

if (unlikely(!rkmessage->rkt ||
if (unlikely(!rkmessage->rkt || !rkmessage->rkt->rkt_rk ||
rkmessage->rkt->rkt_rk->rk_type != RD_KAFKA_CONSUMER))
return -1;

Expand Down
7 changes: 7 additions & 0 deletions tests/0033-regex_subscribe.c
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,13 @@ static void consumer_poll_once(rd_kafka_t *rk) {
rkmessage->partition, rkmessage->offset);

} else if (rkmessage->err == RD_KAFKA_RESP_ERR_UNKNOWN_TOPIC_OR_PART) {
/* Test segfault associated with this call is solved */
int32_t leader_epoch = rd_kafka_message_leader_epoch(rkmessage);
TEST_ASSERT(leader_epoch == -1,
"rd_kafka_message_leader_epoch should be -1"
", got %" PRId32,
leader_epoch);

if (strstr(rd_kafka_topic_name(rkmessage->rkt), "NONEXIST"))
TEST_SAY("%s: %s: error is expected for this topic\n",
rd_kafka_topic_name(rkmessage->rkt),
Expand Down