Skip to content

Commit d8403f7

Browse files
committed
Fix buffer overflow in c_BasicEndToEndTest.testAsyncProduceConsume
1 parent dd2f7d2 commit d8403f7

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

tests/c/c_BasicEndToEndTest.cc

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include <string.h>
2424

2525
#include <future>
26+
#include <iostream>
2627

2728
struct send_ctx {
2829
pulsar_result result;
@@ -37,13 +38,19 @@ struct receive_ctx {
3738
std::promise<void> *promise;
3839
};
3940

41+
static char *copy_string(const char *src) {
42+
size_t len = strlen(src);
43+
char *dest = (char *)malloc(len + 1);
44+
strncpy(dest, src, len);
45+
return dest;
46+
}
47+
4048
static void send_callback(pulsar_result async_result, pulsar_message_id_t *msg_id, void *ctx) {
4149
struct send_ctx *send_ctx = (struct send_ctx *)ctx;
4250
send_ctx->result = async_result;
4351
if (async_result == pulsar_result_Ok) {
4452
const char *msg_id_str = pulsar_message_id_str(msg_id);
45-
send_ctx->msg_id = (char *)malloc(strlen(msg_id_str) * sizeof(char));
46-
strcpy(send_ctx->msg_id, msg_id_str);
53+
send_ctx->msg_id = copy_string(msg_id_str);
4754
}
4855
send_ctx->promise->set_value();
4956
pulsar_message_id_free(msg_id);
@@ -54,9 +61,7 @@ static void receive_callback(pulsar_result async_result, pulsar_message_t *msg,
5461
receive_ctx->result = async_result;
5562
if (async_result == pulsar_result_Ok &&
5663
pulsar_consumer_acknowledge(receive_ctx->consumer, msg) == pulsar_result_Ok) {
57-
const char *data = (const char *)pulsar_message_get_data(msg);
58-
receive_ctx->data = (char *)malloc(strlen(data) * sizeof(char));
59-
strcpy(receive_ctx->data, data);
64+
receive_ctx->data = copy_string((const char *)pulsar_message_get_data(msg));
6065
}
6166
receive_ctx->promise->set_value();
6267
pulsar_message_free(msg);

0 commit comments

Comments
 (0)