Skip to content

Commit 249f329

Browse files
authored
Merge pull request #5 from bringauto/fix_incorrect_buffer_sizes
fix buffer sizes
2 parents d54fe37 + 0ddef37 commit 249f329

8 files changed

Lines changed: 47 additions & 46 deletions

File tree

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
_*
22
cmake-build-debug
3-
.idea/
3+
.idea/
4+
.vscode/

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ PROJECT(fleet-protocol C CXX)
44
SET(CMAKE_POSITION_INDEPENDENT_CODE ON)
55
SET(CMAKE_CXX_STANDARD 20)
66

7-
SET(FLEET_PROTOCOL_CXX_HELPERS_VERSION 1.1.0)
7+
SET(FLEET_PROTOCOL_CXX_HELPERS_VERSION 1.1.1)
88
SET(FLEET_PROTOCOL_INTERFACE_VERSION 2.0.0)
99

1010
FIND_PACKAGE(CMLIB

source/bringauto/fleet_protocol/cxx/DeviceID.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,15 @@ DeviceID::DeviceID(int module, unsigned int device_type, unsigned int priority,
1919
}
2020

2121
DeviceID::DeviceID(const device_identification& device_id):
22-
device_role_(static_cast<char*>(device_id.device_role.data), device_id.device_role.size_in_bytes - 1),
23-
device_name_(static_cast<char*>(device_id.device_name.data), device_id.device_name.size_in_bytes - 1) {
22+
device_role_(static_cast<char*>(device_id.device_role.data), device_id.device_role.size_in_bytes),
23+
device_name_(static_cast<char*>(device_id.device_name.data), device_id.device_name.size_in_bytes) {
2424
id_.device_type = device_id.device_type;
2525
id_.module = device_id.module;
2626
id_.priority = device_id.priority;
2727
id_.device_role.data = const_cast<char*>(device_role_.c_str());
28-
id_.device_role.size_in_bytes = device_role_.size() + 1;
28+
id_.device_role.size_in_bytes = device_role_.size();
2929
id_.device_name.data = const_cast<char*>(device_name_.c_str());
30-
id_.device_name.size_in_bytes = device_name_.size() + 1;
30+
id_.device_name.size_in_bytes = device_name_.size();
3131
}
3232

3333
DeviceID::DeviceID(DeviceID&& c) noexcept:
@@ -40,18 +40,18 @@ DeviceID::DeviceID(DeviceID&& c) noexcept:
4040

4141
device_identification DeviceID::createStandaloneDeviceId() const {
4242
device_identification device_id{};
43-
if(::allocate(&device_id.device_name, device_name_.size() + 1) != ::OK) {
43+
if(::allocate(&device_id.device_name, device_name_.size()) != ::OK) {
4444
throw std::runtime_error("Cannot allocate space for Device Name");
4545
}
46-
if(::allocate(&device_id.device_role, device_role_.size() + 1) != ::OK) {
46+
if(::allocate(&device_id.device_role, device_role_.size()) != ::OK) {
4747
throw std::runtime_error("Cannot allocate space for Device Role");
4848
}
4949
std::memcpy(device_id.device_name.data,
5050
device_name_.c_str(),
51-
device_name_.size() + 1);
51+
device_name_.size());
5252
std::memcpy(device_id.device_role.data,
5353
device_role_.c_str(),
54-
device_role_.size() + 1);
54+
device_role_.size());
5555
device_id.device_type = id_.device_type;
5656
device_id.module = id_.module;
5757
device_id.priority = id_.priority;

source/bringauto/fleet_protocol/cxx/StringAsBuffer.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,9 @@
1010
namespace bringauto::fleet_protocol::cxx {
1111

1212
void StringAsBuffer::createBufferAndCopyData(::buffer* buff, const std::string_view& data) {
13-
if(::allocate(buff, data.size() + 1) != OK) {
13+
if(::allocate(buff, data.size()) != OK) {
1414
throw std::runtime_error("Cannot allocate memory for 'std::string' to 'buffer' conversion");
1515
}
16-
std::cout << "createBufferAndCOpyData Data size: " << data.size() + 1 << std::endl;
1716
BufferAsString strbuff{buff};
1817
strbuff.copyFromString(data);
1918
}

test/source/BufferAsStringTest.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@ using namespace bringauto::fleet_protocol::cxx;
88

99
TEST(BufferAsString_tests, Initialize) {
1010
struct buffer buff;
11-
::allocate(&buff, 5);
12-
std::memcpy(buff.data, "abcd", 5);
11+
::allocate(&buff, 4);
12+
std::memcpy(buff.data, "abcd", 4);
1313
BufferAsString buffAsString(&buff);
1414

15-
EXPECT_EQ(buff.size_in_bytes, 5);
15+
EXPECT_EQ(buff.size_in_bytes, 4);
1616
EXPECT_STREQ(std::string(buffAsString.getStringView()).c_str(), "abcd");
1717
EXPECT_TRUE(*buffAsString.cbegin() == 'a');
18-
EXPECT_STREQ(std::prev(buffAsString.cend()), "");
18+
EXPECT_TRUE(*std::prev(buffAsString.cend()) == 'd');
1919

2020
::deallocate(&buff);
2121
}
@@ -45,7 +45,7 @@ TEST(BufferAsString_tests, Copy_string) {
4545
TEST(BufferAsString_tests, Copy_string_buffer_no_data) {
4646
struct buffer buff;
4747
buff.data = nullptr;
48-
buff.size_in_bytes = 5;
48+
buff.size_in_bytes = 4;
4949
BufferAsString buffAsString(&buff);
5050

5151
bool failed = false;
@@ -61,8 +61,8 @@ TEST(BufferAsString_tests, Copy_string_buffer_no_data) {
6161

6262
TEST(BufferAsString_tests, Copy_string_too_much_data) {
6363
struct buffer buff;
64-
::allocate(&buff, 5);
65-
std::memcpy(buff.data, "abcd", 5);
64+
::allocate(&buff, 4);
65+
std::memcpy(buff.data, "abcd", 4);
6666
BufferAsString buffAsString(&buff);
6767

6868
bool failed = false;

test/source/DeviceIDTest.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@ TEST(DeviceID_tests, Constructor_from_device_id) {
2727
deviceID1.module = 1;
2828
deviceID1.device_type = 2;
2929
deviceID1.priority = 3;
30-
::allocate(&deviceID1.device_role, 6);
31-
::allocate(&deviceID1.device_name, 7);
32-
std::memcpy(deviceID1.device_role.data, "Slave", 6);
33-
std::memcpy(deviceID1.device_name.data, "Device", 7);
30+
::allocate(&deviceID1.device_role, 5);
31+
::allocate(&deviceID1.device_name, 6);
32+
std::memcpy(deviceID1.device_role.data, "Slave", 5);
33+
std::memcpy(deviceID1.device_name.data, "Device", 6);
3434

3535
DeviceID device(deviceID1);
3636
device_identification deviceID2 = device.getDeviceId();
@@ -72,10 +72,10 @@ TEST(DeviceID_tests, Standalone_device_id) {
7272
EXPECT_EQ(deviceID.module, 1);
7373
EXPECT_EQ(deviceID.device_type, 2);
7474
EXPECT_EQ(deviceID.priority, 3);
75-
std::string role(static_cast<char*>(deviceID.device_role.data));
76-
EXPECT_STREQ(role.c_str(), "Slave");
77-
std::string name(static_cast<char*>(deviceID.device_name.data));
78-
EXPECT_STREQ(name.c_str(), "Device");
75+
std::string_view role(static_cast<char*>(deviceID.device_role.data), deviceID.device_role.size_in_bytes);
76+
EXPECT_STREQ(std::string(role).c_str(), "Slave");
77+
std::string_view name(static_cast<char*>(deviceID.device_name.data), deviceID.device_name.size_in_bytes);
78+
EXPECT_STREQ(std::string(name).c_str(), "Device");
7979

8080
::deallocate(&deviceID.device_role);
8181
::deallocate(&deviceID.device_name);

test/source/KeyValueConfigTest.cpp

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,18 @@ TEST(KeyValueConfig_tests, Initialize) {
1111
::config configData;
1212
configData.size = 3;
1313
key_value params[3];
14-
::allocate(&params[0].key, 5);
15-
std::memcpy(params[0].key.data, "Key1", 5);
16-
::allocate(&params[0].value, 7);
17-
std::memcpy(params[0].value.data, "Value1", 7);
18-
::allocate(&params[1].key, 5);
19-
std::memcpy(params[1].key.data, "Key2", 5);
20-
::allocate(&params[1].value, 7);
21-
std::memcpy(params[1].value.data, "Value2", 7);
22-
::allocate(&params[2].key, 5);
23-
std::memcpy(params[2].key.data, "Key3", 5);
24-
::allocate(&params[2].value, 7);
25-
std::memcpy(params[2].value.data, "Value3", 7);
14+
::allocate(&params[0].key, 4);
15+
std::memcpy(params[0].key.data, "Key1", 4);
16+
::allocate(&params[0].value, 6);
17+
std::memcpy(params[0].value.data, "Value1", 6);
18+
::allocate(&params[1].key, 4);
19+
std::memcpy(params[1].key.data, "Key2", 4);
20+
::allocate(&params[1].value, 6);
21+
std::memcpy(params[1].value.data, "Value2", 6);
22+
::allocate(&params[2].key, 4);
23+
std::memcpy(params[2].key.data, "Key3", 4);
24+
::allocate(&params[2].value, 6);
25+
std::memcpy(params[2].value.data, "Value3", 6);
2626
configData.parameters = params;
2727
KeyValueConfig kvConfig(configData);
2828

@@ -44,10 +44,10 @@ TEST(KeyValueConfig_tests, Zero_size) {
4444
::config configData;
4545
configData.size = 0;
4646
key_value params[1];
47-
::allocate(&params[0].key, 4);
48-
std::memcpy(params[0].key.data, "Key", 4);
49-
::allocate(&params[0].value, 6);
50-
std::memcpy(params[0].value.data, "Value", 6);
47+
::allocate(&params[0].key, 3);
48+
std::memcpy(params[0].key.data, "Key", 3);
49+
::allocate(&params[0].value, 5);
50+
std::memcpy(params[0].value.data, "Value", 5);
5151
configData.parameters = params;
5252
KeyValueConfig kvConfig(configData);
5353

test/source/StringAsBufferTest.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@ using namespace bringauto::fleet_protocol::cxx;
99

1010
TEST(StringAsBuffer_tests, Create_buffer) {
1111
struct buffer buff;
12-
StringAsBuffer::createBufferAndCopyData(&buff, const_cast<char*>("abcd"));
12+
StringAsBuffer::createBufferAndCopyData(&buff, std::string("abcd"));
1313

14-
EXPECT_EQ(buff.size_in_bytes, 5);
15-
EXPECT_STREQ(static_cast<char*>(buff.data), "abcd");
14+
EXPECT_EQ(buff.size_in_bytes, 4);
15+
std::string_view data(static_cast<char*>(buff.data), buff.size_in_bytes);
16+
EXPECT_STREQ(std::string(data).c_str(), "abcd");
1617

1718
::deallocate(&buff);
1819
}

0 commit comments

Comments
 (0)