This is an automated email from the ASF dual-hosted git repository.
pengzheng pushed a commit to branch feature/error_injector
in repository https://gitbox.apache.org/repos/asf/celix.git
The following commit(s) were added to refs/heads/feature/error_injector by this
push:
new 94bab53f Fix memory over-read and leak in PSA#465
94bab53f is described below
commit 94bab53f5ea913b76027226ae6669bc02989e4eb
Author: PengZheng <[email protected]>
AuthorDate: Tue Jan 17 21:56:23 2023 +0800
Fix memory over-read and leak in PSA#465
It fixed several other bugs revealed by this fix:
* memory leak in zmq receiver
* endianness bugs
* uninitialised `message.header.convertEndianess` in zmq sender
It also serves as an examples of utilizing error injector to achieve high
line/branch coverage.
---
.../src/pubsub_zmq_topic_receiver.c | 5 +
.../pubsub_admin_zmq/src/pubsub_zmq_topic_sender.c | 2 +-
.../pubsub_protocol_lib/gtest/CMakeLists.txt | 2 +-
.../gtest/src/PS_WP_common_tests.cc | 144 ++++++++++++++++++++-
.../src/pubsub_wire_protocol_common.c | 67 ++++++----
.../gtest/src/PS_WP_tests.cc | 6 +-
.../src/pubsub_wire_protocol_impl.c | 11 +-
misc/error_injector/CMakeLists.txt | 3 +-
.../{malloc => celix_properties}/CMakeLists.txt | 8 +-
.../celix_properties_ei.cpp} | 21 ++-
.../celix_properties_ei.h} | 10 +-
misc/error_injector/malloc/CMakeLists.txt | 2 +-
misc/error_injector/malloc/malloc_ei.cpp | 7 +
misc/error_injector/malloc/malloc_ei.h | 1 +
14 files changed, 233 insertions(+), 56 deletions(-)
diff --git a/bundles/pubsub/pubsub_admin_zmq/src/pubsub_zmq_topic_receiver.c
b/bundles/pubsub/pubsub_admin_zmq/src/pubsub_zmq_topic_receiver.c
index 90d93cb4..31f3a780 100644
--- a/bundles/pubsub/pubsub_admin_zmq/src/pubsub_zmq_topic_receiver.c
+++ b/bundles/pubsub/pubsub_admin_zmq/src/pubsub_zmq_topic_receiver.c
@@ -468,6 +468,7 @@ static inline void processMsg(pubsub_zmq_topic_receiver_t
*receiver, pubsub_prot
&deSerializeBuffer, 0, &deserializedMsg);
if (status == CELIX_SUCCESS) {
celix_properties_t *metadata = message->metadata.metadata;
+ bool metadataWasNull = metadata == NULL;
bool cont =
pubsubInterceptorHandler_invokePreReceive(receiver->interceptorsHandler,
msgFqn, message->header.msgId, deserializedMsg, &metadata);
bool release = true;
if (cont) {
@@ -479,6 +480,10 @@ static inline void processMsg(pubsub_zmq_topic_receiver_t
*receiver, pubsub_prot
if (release) {
pubsub_serializerHandler_freeDeserializedMsg(receiver->serializerHandler,
message->header.msgId, deserializedMsg);
}
+ if (metadataWasNull) {
+ //note that if the metadata was created by the
pubsubInterceptorHandler_invokePreReceive, this needs to be deallocated
+ celix_properties_destroy(metadata);
+ }
} else {
L_WARN("[PSA_ZMQ_TR] Cannot deserialize msg type %s for
scope/topic %s/%s", msgFqn,
receiver->scope == NULL ? "(null)" : receiver->scope,
receiver->topic);
diff --git a/bundles/pubsub/pubsub_admin_zmq/src/pubsub_zmq_topic_sender.c
b/bundles/pubsub/pubsub_admin_zmq/src/pubsub_zmq_topic_sender.c
index 3fb68f56..9db9baa2 100644
--- a/bundles/pubsub/pubsub_admin_zmq/src/pubsub_zmq_topic_sender.c
+++ b/bundles/pubsub/pubsub_admin_zmq/src/pubsub_zmq_topic_sender.c
@@ -433,6 +433,7 @@ static int psa_zmq_topicPublicationSend(void* handle,
unsigned int msgTypeId, co
pubsub_protocol_message_t message;
message.payload.payload = serializedIoVecOutput->iov_base;
message.payload.length = serializedIoVecOutput->iov_len;
+ message.header.convertEndianess = 0;
void *payloadData = NULL;
size_t payloadLength = 0;
@@ -457,7 +458,6 @@ static int psa_zmq_topicPublicationSend(void* handle,
unsigned int msgTypeId, co
message.header.payloadPartSize = payloadLength;
message.header.payloadOffset = 0;
message.header.isLastSegment = 1;
- message.header.convertEndianess = 0;
sender->protocol->encodeHeader(sender->protocol->handle, &message,
&sender->zmqBuffers.headerBuffer, &sender->zmqBuffers.headerBufferSize);
diff --git
a/bundles/pubsub/pubsub_protocol/pubsub_protocol_lib/gtest/CMakeLists.txt
b/bundles/pubsub/pubsub_protocol/pubsub_protocol_lib/gtest/CMakeLists.txt
index bba51785..47f99620 100644
--- a/bundles/pubsub/pubsub_protocol/pubsub_protocol_lib/gtest/CMakeLists.txt
+++ b/bundles/pubsub/pubsub_protocol/pubsub_protocol_lib/gtest/CMakeLists.txt
@@ -17,7 +17,7 @@
add_executable(celix_pswp_common_tests src/PS_WP_common_tests.cc)
target_include_directories(celix_pswp_common_tests PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/../src)
-target_link_libraries(celix_pswp_common_tests PRIVATE
celix_pubsub_protocol_lib GTest::gtest Celix::pubsub_spi GTest::gtest_main
malloc_ei)
+target_link_libraries(celix_pswp_common_tests PRIVATE
celix_pubsub_protocol_lib GTest::gtest Celix::pubsub_spi GTest::gtest_main
malloc_ei celix_properties_ei)
add_test(NAME celix_pswp_common_tests COMMAND celix_pswp_common_tests)
setup_target_for_coverage(celix_pswp_common_tests SCAN_DIR ..)
\ No newline at end of file
diff --git
a/bundles/pubsub/pubsub_protocol/pubsub_protocol_lib/gtest/src/PS_WP_common_tests.cc
b/bundles/pubsub/pubsub_protocol/pubsub_protocol_lib/gtest/src/PS_WP_common_tests.cc
index 25a90210..93ecabed 100644
---
a/bundles/pubsub/pubsub_protocol/pubsub_protocol_lib/gtest/src/PS_WP_common_tests.cc
+++
b/bundles/pubsub/pubsub_protocol/pubsub_protocol_lib/gtest/src/PS_WP_common_tests.cc
@@ -22,6 +22,7 @@
#include <gtest/gtest.h>
#include <iostream>
#include <cstring>
+#include <celix_properties_ei.h>
#include <malloc_ei.h>
#include "pubsub_wire_protocol_common.h"
@@ -30,7 +31,9 @@ class WireProtocolCommonTest : public ::testing::Test {
public:
WireProtocolCommonTest() = default;
~WireProtocolCommonTest() override {
- celix_ei_expect_realloc(nullptr, 0, NULL);
+ celix_ei_expect_realloc(nullptr, 0, nullptr);
+ celix_ei_expect_calloc(nullptr, 0, nullptr);
+ celix_ei_expect_celix_properties_create(nullptr, 0, nullptr);
};
};
@@ -244,3 +247,142 @@ TEST_F(WireProtocolCommonTest,
WireProtocolCommonTest_DencodeMetadataWithMultipl
celix_properties_destroy(message.metadata.metadata);
}
+TEST_F(WireProtocolCommonTest,
WireProtocolCommonTest_DencodeMetadataWithExtraEntries) {
+ pubsub_protocol_message_t message;
+ message.header.convertEndianess = 1;
+ message.metadata.metadata = nullptr;
+
+ char* data =
strdup("ABCD4:key1,6:value1,4:key2,6:value2,6:key111,8:value111,"); //note 3
entries
+ auto len = strlen(data);
+ pubsubProtocol_writeInt((unsigned char*)data, 0,
message.header.convertEndianess, 2);
+ auto status = pubsubProtocol_decodeMetadata((void*)data, len, &message);
+ // the 3rd entry should be ignored
+ EXPECT_EQ(status, CELIX_SUCCESS);
+ EXPECT_EQ(2, celix_properties_size(message.metadata.metadata));
+ EXPECT_STREQ("value1", celix_properties_get(message.metadata.metadata,
"key1", "not-found"));
+ EXPECT_STREQ("value2", celix_properties_get(message.metadata.metadata,
"key2", "not-found"));
+ EXPECT_STREQ("not-found", celix_properties_get(message.metadata.metadata,
"key111", "not-found"));
+
+ free(data);
+ celix_properties_destroy(message.metadata.metadata);
+}
+
+TEST_F(WireProtocolCommonTest,
WireProtocolCommonTest_DencodeMetadataMissingEntries) {
+ pubsub_protocol_message_t message;
+ message.header.convertEndianess = 1;
+ message.metadata.metadata = nullptr;
+
+ char* data =
strdup("ABCD4:key1,6:value1,4:key2,6:value2,6:key111,8:value111,"); //note 3
entries
+ auto len = strlen(data);
+ pubsubProtocol_writeInt((unsigned char*)data, 0,
message.header.convertEndianess, 4);
+ auto status = pubsubProtocol_decodeMetadata((void*)data, len, &message);
+
+ EXPECT_EQ(status, CELIX_INVALID_SYNTAX);
+ EXPECT_EQ(nullptr, message.metadata.metadata);
+
+ free(data);
+}
+
+TEST_F(WireProtocolCommonTest,
WireProtocolCommonTest_DecodeMetadataWithSingleEntryWithIncompleteValue) {
+ pubsub_protocol_message_t message;
+ message.header.convertEndianess = 0;
+ message.metadata.metadata = nullptr;
+
+ char* data = strdup("ABCD4:key1,6:val,"); //note 1 entry with short value
+ auto len = strlen(data);
+ pubsubProtocol_writeInt((unsigned char*)data, 0,
message.header.convertEndianess, 1);
+ auto status = pubsubProtocol_decodeMetadata((void*)data, len, &message);
+
+ EXPECT_EQ(status, CELIX_INVALID_SYNTAX);
+ EXPECT_EQ(nullptr, message.metadata.metadata);
+
+ free(data);
+}
+
+TEST_F(WireProtocolCommonTest, WireProtocolCommonTest_DecodeMetadataTooShort) {
+ pubsub_protocol_message_t message;
+ message.header.convertEndianess = 0;
+ message.metadata.metadata = nullptr;
+
+ char* data = strdup("ABCD4:key1,6:value1,"); //note 1 entry
+ pubsubProtocol_writeInt((unsigned char*)data, 0,
message.header.convertEndianess, 1);
+ auto status = pubsubProtocol_decodeMetadata((void*)data, 3, &message); //
not enough data for `nOfElements`
+
+ EXPECT_EQ(status, CELIX_INVALID_SYNTAX);
+ EXPECT_EQ(nullptr, message.metadata.metadata);
+
+ free(data);
+}
+
+TEST_F(WireProtocolCommonTest, WireProtocolCommonTest_DecodeEmptyMetadata) {
+ pubsub_protocol_message_t message;
+ message.header.convertEndianess = 0;
+ message.metadata.metadata = nullptr;
+
+ uint32_t data = 0;
+ auto status = pubsubProtocol_decodeMetadata((void*)&data, 4, &message);
+
+ EXPECT_EQ(status, CELIX_SUCCESS);
+ EXPECT_EQ(nullptr, message.metadata.metadata);
+
+ // incorrect `nOfElements`
+ data = 4;
+ status = pubsubProtocol_decodeMetadata((void*)&data, 4, &message);
+
+ EXPECT_EQ(status, CELIX_INVALID_SYNTAX);
+ EXPECT_EQ(nullptr, message.metadata.metadata);
+}
+
+TEST_F(WireProtocolCommonTest,
WireProtocolCommonTest_NotEnoughMemoryForMultipleEntries) {
+ pubsub_protocol_message_t message;
+ message.header.convertEndianess = 1;
+ message.metadata.metadata = nullptr;
+
+ char* data =
strdup("ABCD4:key1,6:value1,4:key2,6:value2,6:key111,8:value111,"); //note 3
entries
+ auto len = strlen(data);
+ pubsubProtocol_writeInt((unsigned char*)data, 0,
message.header.convertEndianess, 3);
+ for (int i = 0; i < 6; ++i) {
+ celix_ei_expect_calloc((void *)pubsubProtocol_decodeMetadata, 0,
nullptr, i+1);
+ auto status = pubsubProtocol_decodeMetadata((void*)data, len,
&message);
+
+ EXPECT_EQ(status, CELIX_ENOMEM);
+ EXPECT_EQ(nullptr, message.metadata.metadata);
+ }
+ free(data);
+}
+
+TEST_F(WireProtocolCommonTest,
WireProtocolCommonTest_PropertiesAllocFailureWhenDecodingMetadata) {
+ pubsub_protocol_message_t message;
+ message.header.convertEndianess = 0;
+ message.metadata.metadata = nullptr;
+
+ char* data = strdup("ABCD4:key1,6:value1,"); //note 1 entry
+ auto len = strlen(data);
+ pubsubProtocol_writeInt((unsigned char*)data, 0,
message.header.convertEndianess, 1);
+
celix_ei_expect_celix_properties_create((void*)pubsubProtocol_decodeMetadata,
0, nullptr);
+ auto status = pubsubProtocol_decodeMetadata((void*)data, len, &message);
+
+ EXPECT_EQ(status, CELIX_ENOMEM);
+ EXPECT_EQ(nullptr, message.metadata.metadata);
+
+ free(data);
+}
+
+TEST_F(WireProtocolCommonTest,
WireProtocolCommonTest_DencodeMetadataWithDuplicateEntries) {
+ pubsub_protocol_message_t message;
+ message.header.convertEndianess = 1;
+ message.metadata.metadata = nullptr;
+
+ char* data =
strdup("ABCD4:key1,6:value1,4:key1,6:value2,6:key111,8:value111,"); //note 3
entries with duplicate key1
+ auto len = strlen(data);
+ pubsubProtocol_writeInt((unsigned char*)data, 0,
message.header.convertEndianess, 3);
+ auto status = pubsubProtocol_decodeMetadata((void*)data, len, &message);
+
+ EXPECT_EQ(status, CELIX_SUCCESS);
+ EXPECT_EQ(2, celix_properties_size(message.metadata.metadata));
+ EXPECT_STREQ("value2", celix_properties_get(message.metadata.metadata,
"key1", "not-found"));
+ EXPECT_STREQ("value111", celix_properties_get(message.metadata.metadata,
"key111", "not-found"));
+
+ free(data);
+ celix_properties_destroy(message.metadata.metadata);
+}
diff --git
a/bundles/pubsub/pubsub_protocol/pubsub_protocol_lib/src/pubsub_wire_protocol_common.c
b/bundles/pubsub/pubsub_protocol/pubsub_protocol_lib/src/pubsub_wire_protocol_common.c
index b6e883e1..7b78cea0 100644
---
a/bundles/pubsub/pubsub_protocol/pubsub_protocol_lib/src/pubsub_wire_protocol_common.c
+++
b/bundles/pubsub/pubsub_protocol/pubsub_protocol_lib/src/pubsub_wire_protocol_common.c
@@ -261,37 +261,58 @@ celix_status_t pubsubProtocol_decodePayload(void *data,
size_t length, pubsub_pr
celix_status_t pubsubProtocol_decodeMetadata(void *data, size_t length,
pubsub_protocol_message_t *message) {
celix_status_t status = CELIX_SUCCESS;
-
+ message->metadata.metadata = NULL;
+ if (length < sizeof(uint32_t)) {
+ return CELIX_INVALID_SYNTAX;
+ }
uint32_t nOfElements;
size_t idx = pubsubProtocol_readInt(data, 0,
message->header.convertEndianess, &nOfElements);
+ if (nOfElements == 0) {
+ return CELIX_SUCCESS;
+ }
unsigned char *netstring = data + idx;
- int netstringLen = length - idx;
+ size_t netstringLen = length - idx;
message->metadata.metadata = celix_properties_create();
- while (idx < length) {
- size_t outlen;
- status = pubsubProtocol_parseNetstring(netstring, netstringLen,
&netstring, &outlen);
- if (status != CELIX_SUCCESS) {
- break;
+ if (message->metadata.metadata == NULL) {
+ return CELIX_ENOMEM;
+ }
+ for (; nOfElements > 0 && netstringLen > 0; nOfElements--) {
+ int i;
+ char *strs[2] = {NULL, NULL};
+ for (i = 0; i < 2; ++i) {
+ unsigned char *outstring = NULL;
+ size_t outlen;
+ status = pubsubProtocol_parseNetstring(netstring, netstringLen,
&outstring, &outlen);
+ if (status != CELIX_SUCCESS) {
+ status = CELIX_INVALID_SYNTAX;
+ break;
+ }
+ strs[i] = calloc(outlen + 1, sizeof(char));
+ if (strs[i] == NULL) {
+ status = CELIX_ENOMEM;
+ break;
+ }
+ memcpy(strs[i], outstring, outlen);
+ strs[i][outlen] = '\0';
+ netstringLen -= (outstring - netstring + outlen + 1);
+ netstring = outstring + (outlen + 1);
}
- char *key = calloc(outlen + 1, sizeof(char));
- memcpy(key, netstring, outlen);
- key[outlen] = '\0';
- netstring += outlen + 1;
- idx += outlen + 3;
-
- status = pubsubProtocol_parseNetstring(netstring, netstringLen,
&netstring, &outlen);
- if (status != CELIX_SUCCESS) {
+ if (i == 2) {
+ // if metadata has duplicate keys, the last one takes effect
+ celix_properties_unset(message->metadata.metadata, strs[0]);
+ celix_properties_setWithoutCopy(message->metadata.metadata,
strs[0], strs[1]);
+ } else {
+ for (int j = 0; j < i; ++j) {
+ free(strs[j]);
+ }
break;
}
- char *value = calloc(outlen + 1, sizeof(char));
- memcpy(value, netstring, outlen);
- value[outlen] = '\0';
- netstring += outlen + 1;
- idx += outlen + 3;
-
- celix_properties_setWithoutCopy(message->metadata.metadata, key,
value);
}
-
+ if (nOfElements > 0) {
+ celix_properties_destroy(message->metadata.metadata);
+ message->metadata.metadata = NULL;
+ status = (status != CELIX_SUCCESS) ? status : CELIX_INVALID_SYNTAX;
+ }
return status;
}
\ No newline at end of file
diff --git
a/bundles/pubsub/pubsub_protocol/pubsub_protocol_wire_v1/gtest/src/PS_WP_tests.cc
b/bundles/pubsub/pubsub_protocol/pubsub_protocol_wire_v1/gtest/src/PS_WP_tests.cc
index 02cf89d0..346514af 100644
---
a/bundles/pubsub/pubsub_protocol/pubsub_protocol_wire_v1/gtest/src/PS_WP_tests.cc
+++
b/bundles/pubsub/pubsub_protocol/pubsub_protocol_wire_v1/gtest/src/PS_WP_tests.cc
@@ -234,7 +234,7 @@ TEST_F(WireProtocolV1Test,
WireProtocolV1Test_DecodeMetadata_Test) { // NOLINT(c
memcpy(exp + 4, "1:a,1:b,", 8);
pubsub_protocol_message_t message;
- message.header.convertEndianess = false;
+ message.header.convertEndianess = true;
celix_status_t status = pubsubProtocol_v1_decodeMetadata(nullptr, exp, 12,
&message);
ASSERT_EQ(status, CELIX_SUCCESS);
@@ -257,7 +257,7 @@ TEST_F(WireProtocolV1Test,
WireProtocolV1Test_DecodeMetadata_EmptyKey_Test) { //
memcpy(exp + 4, "0:,1:b,", 7);
pubsub_protocol_message_t message;
- message.header.convertEndianess = false;
+ message.header.convertEndianess = true;
celix_status_t status = pubsubProtocol_v1_decodeMetadata(nullptr, exp, 11,
&message);
ASSERT_EQ(status, CELIX_SUCCESS);
@@ -279,7 +279,7 @@ TEST_F(WireProtocolV1Test,
WireProtocolV1Test_DecodeMetadata_SpecialChars_Test)
memcpy(exp + 4, "4:a,:l,1:b,", 11);
pubsub_protocol_message_t message;
- message.header.convertEndianess = false;
+ message.header.convertEndianess = true;
celix_status_t status = pubsubProtocol_v1_decodeMetadata(nullptr, &exp,
15, &message);
ASSERT_EQ(status, CELIX_SUCCESS);
diff --git
a/bundles/pubsub/pubsub_protocol/pubsub_protocol_wire_v1/src/pubsub_wire_protocol_impl.c
b/bundles/pubsub/pubsub_protocol/pubsub_protocol_wire_v1/src/pubsub_wire_protocol_impl.c
index 04048a2a..03aa3466 100644
---
a/bundles/pubsub/pubsub_protocol/pubsub_protocol_wire_v1/src/pubsub_wire_protocol_impl.c
+++
b/bundles/pubsub/pubsub_protocol/pubsub_protocol_wire_v1/src/pubsub_wire_protocol_impl.c
@@ -27,7 +27,6 @@
#include "pubsub_wire_protocol_impl.h"
#include "pubsub_wire_protocol_common.h"
-#define BYTESWAP_SYNC true
struct pubsub_protocol_wire_v1 {
};
@@ -96,7 +95,7 @@ celix_status_t pubsubProtocol_encodeHeader(void *handle,
pubsub_protocol_message
status = CELIX_ENOMEM;
} else {
int idx = 0;
- idx = pubsubProtocol_writeInt(*outBuffer, idx, BYTESWAP_SYNC,
PROTOCOL_WIRE_V1_SYNC_HEADER);
+ idx = pubsubProtocol_writeInt(*outBuffer, idx, true,
PROTOCOL_WIRE_V1_SYNC_HEADER);
idx = pubsubProtocol_writeInt(*outBuffer, idx, true,
PROTOCOL_WIRE_V1_ENVELOPE_VERSION);
idx = pubsubProtocol_writeInt(*outBuffer, idx, true,
message->header.msgId);
idx = pubsubProtocol_writeShort(*outBuffer, idx, true,
message->header.msgMajorVersion);
@@ -111,22 +110,27 @@ celix_status_t pubsubProtocol_encodeHeader(void *handle,
pubsub_protocol_message
}
celix_status_t pubsubProtocol_v1_encodePayload(void *handle
__attribute__((unused)), pubsub_protocol_message_t *message, void **outBuffer,
size_t *outLength) {
+ message->header.convertEndianess = true;
return pubsubProtocol_encodePayload(message, outBuffer, outLength);
}
celix_status_t pubsubProtocol_v1_encodeMetadata(void *handle
__attribute__((unused)), pubsub_protocol_message_t *message, void
**bufferInOut, size_t *bufferLengthInOut, size_t *bufferContentLengthOut) {
+ message->header.convertEndianess = true;
return pubsubProtocol_encodeMetadata(message, (char**)bufferInOut,
bufferLengthInOut, bufferContentLengthOut);
}
celix_status_t pubsubProtocol_encodeFooter(void *handle
__attribute__((unused)), pubsub_protocol_message_t *message
__attribute__((unused)), void **outBuffer, size_t *outLength) {
+ message->header.convertEndianess = true;
return pubsubProtocol_getFooterSize(handle, outLength);
}
celix_status_t pubsubProtocol_v1_decodePayload(void* handle
__attribute__((unused)), void *data, size_t length, pubsub_protocol_message_t
*message){
+ message->header.convertEndianess = true;
return pubsubProtocol_decodePayload(data, length, message);
}
celix_status_t pubsubProtocol_v1_decodeMetadata(void* handle
__attribute__((unused)), void *data, size_t length, pubsub_protocol_message_t
*message) {
+ message->header.convertEndianess = true;
return pubsubProtocol_decodeMetadata(data, length, message);
}
@@ -143,7 +147,7 @@ celix_status_t pubsubProtocol_decodeHeader(void *handle,
void *data, size_t leng
pubsubProtocol_getHeaderSize(handle, &headerSize);
if (length == headerSize) {
unsigned int sync;
- idx = pubsubProtocol_readInt(data, idx, BYTESWAP_SYNC, &sync);
+ idx = pubsubProtocol_readInt(data, idx, true, &sync);
if (sync != PROTOCOL_WIRE_V1_SYNC_HEADER) {
status = CELIX_ILLEGAL_ARGUMENT;
} else {
@@ -157,6 +161,7 @@ celix_status_t pubsubProtocol_decodeHeader(void *handle,
void *data, size_t leng
idx = pubsubProtocol_readShort(data, idx, true,
&message->header.msgMinorVersion);
idx = pubsubProtocol_readInt(data, idx, true,
&message->header.payloadSize);
pubsubProtocol_readInt(data, idx, true,
&message->header.metadataSize);
+ message->header.convertEndianess = true;
// Set message segmentation parameters to defaults
message->header.seqNr = 0;
message->header.payloadPartSize = message->header.payloadSize;
diff --git a/misc/error_injector/CMakeLists.txt
b/misc/error_injector/CMakeLists.txt
index a522ac19..0da41a89 100644
--- a/misc/error_injector/CMakeLists.txt
+++ b/misc/error_injector/CMakeLists.txt
@@ -22,4 +22,5 @@ target_link_libraries(error_injector INTERFACE dl)
target_link_options(error_injector INTERFACE -rdynamic)
target_compile_options(error_injector INTERFACE -Wno-frame-address)
-add_subdirectory(malloc)
\ No newline at end of file
+add_subdirectory(malloc)
+add_subdirectory(celix_properties)
diff --git a/misc/error_injector/malloc/CMakeLists.txt
b/misc/error_injector/celix_properties/CMakeLists.txt
similarity index 73%
copy from misc/error_injector/malloc/CMakeLists.txt
copy to misc/error_injector/celix_properties/CMakeLists.txt
index 130a1239..c85bf74a 100644
--- a/misc/error_injector/malloc/CMakeLists.txt
+++ b/misc/error_injector/celix_properties/CMakeLists.txt
@@ -15,9 +15,9 @@
# specific language governing permissions and limitations
# under the License.
-add_library(malloc_ei STATIC malloc_ei.cpp)
+add_library(celix_properties_ei STATIC celix_properties_ei.cpp)
-target_include_directories(malloc_ei PUBLIC ${CMAKE_CURRENT_LIST_DIR})
-target_link_libraries(malloc_ei PUBLIC error_injector)
+target_include_directories(celix_properties_ei PUBLIC
${CMAKE_CURRENT_LIST_DIR})
+target_link_libraries(celix_properties_ei PUBLIC error_injector Celix::utils)
# It plays nicely with address sanitizer this way.
-target_link_options(malloc_ei INTERFACE -Wl,-wrap,malloc -Wl,-wrap,realloc)
\ No newline at end of file
+target_link_options(celix_properties_ei INTERFACE
-Wl,-wrap,celix_properties_create)
\ No newline at end of file
diff --git a/misc/error_injector/malloc/malloc_ei.h
b/misc/error_injector/celix_properties/celix_properties_ei.cpp
similarity index 74%
copy from misc/error_injector/malloc/malloc_ei.h
copy to misc/error_injector/celix_properties/celix_properties_ei.cpp
index 7d00c327..213fbdf9 100644
--- a/misc/error_injector/malloc/malloc_ei.h
+++ b/misc/error_injector/celix_properties/celix_properties_ei.cpp
@@ -17,18 +17,13 @@
under the License.
*/
-#ifndef CELIX_MALLOC_EI_H
-#define CELIX_MALLOC_EI_H
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <error_injector.h>
+#include <celix_properties_ei.h>
-CELIX_EI_DECLARE(malloc, void *);
-CELIX_EI_DECLARE(realloc, void *);
-
-#ifdef __cplusplus
+extern "C" {
+void *__real_celix_properties_create(void);
+CELIX_EI_DEFINE(celix_properties_create, celix_properties_t*)
+void *__wrap_celix_properties_create(void) {
+ CELIX_EI_IMPL0(celix_properties_create);
+ return __real_celix_properties_create();
}
-#endif
-#endif //CELIX_MALLOC_EI_H
+}
\ No newline at end of file
diff --git a/misc/error_injector/malloc/malloc_ei.h
b/misc/error_injector/celix_properties/celix_properties_ei.h
similarity index 81%
copy from misc/error_injector/malloc/malloc_ei.h
copy to misc/error_injector/celix_properties/celix_properties_ei.h
index 7d00c327..f5b1c084 100644
--- a/misc/error_injector/malloc/malloc_ei.h
+++ b/misc/error_injector/celix_properties/celix_properties_ei.h
@@ -17,18 +17,18 @@
under the License.
*/
-#ifndef CELIX_MALLOC_EI_H
-#define CELIX_MALLOC_EI_H
+#ifndef CELIX_CELIX_PROPERTIES_EI_H
+#define CELIX_CELIX_PROPERTIES_EI_H
#ifdef __cplusplus
extern "C" {
#endif
+#include <celix_properties.h>
#include <error_injector.h>
-CELIX_EI_DECLARE(malloc, void *);
-CELIX_EI_DECLARE(realloc, void *);
+CELIX_EI_DECLARE(celix_properties_create, celix_properties_t*);
#ifdef __cplusplus
}
#endif
-#endif //CELIX_MALLOC_EI_H
+#endif //CELIX_CELIX_PROPERTIES_EI_H
diff --git a/misc/error_injector/malloc/CMakeLists.txt
b/misc/error_injector/malloc/CMakeLists.txt
index 130a1239..543060bc 100644
--- a/misc/error_injector/malloc/CMakeLists.txt
+++ b/misc/error_injector/malloc/CMakeLists.txt
@@ -20,4 +20,4 @@ add_library(malloc_ei STATIC malloc_ei.cpp)
target_include_directories(malloc_ei PUBLIC ${CMAKE_CURRENT_LIST_DIR})
target_link_libraries(malloc_ei PUBLIC error_injector)
# It plays nicely with address sanitizer this way.
-target_link_options(malloc_ei INTERFACE -Wl,-wrap,malloc -Wl,-wrap,realloc)
\ No newline at end of file
+target_link_options(malloc_ei INTERFACE -Wl,-wrap,malloc -Wl,-wrap,realloc
-Wl,-wrap,calloc)
\ No newline at end of file
diff --git a/misc/error_injector/malloc/malloc_ei.cpp
b/misc/error_injector/malloc/malloc_ei.cpp
index aadb4f28..d760697c 100644
--- a/misc/error_injector/malloc/malloc_ei.cpp
+++ b/misc/error_injector/malloc/malloc_ei.cpp
@@ -33,4 +33,11 @@ void *__wrap_realloc(void *__ptr, size_t __size) {
CELIX_EI_IMPL0(realloc);
return __real_realloc(__ptr, __size);
}
+
+void *__real_calloc (size_t __nmemb, size_t __size);
+CELIX_EI_DEFINE(calloc, void *)
+void *__wrap_calloc (size_t __nmemb, size_t __size) {
+ CELIX_EI_IMPL0(calloc);
+ return __real_calloc(__nmemb, __size);
+}
}
\ No newline at end of file
diff --git a/misc/error_injector/malloc/malloc_ei.h
b/misc/error_injector/malloc/malloc_ei.h
index 7d00c327..8479af63 100644
--- a/misc/error_injector/malloc/malloc_ei.h
+++ b/misc/error_injector/malloc/malloc_ei.h
@@ -27,6 +27,7 @@ extern "C" {
CELIX_EI_DECLARE(malloc, void *);
CELIX_EI_DECLARE(realloc, void *);
+CELIX_EI_DECLARE(calloc, void *);
#ifdef __cplusplus
}