From 7eb81ae01eb1c19006fb2adb275577d8e798a897 Mon Sep 17 00:00:00 2001 From: Johan Schuld Date: Mon, 7 Sep 2026 13:42:30 +1200 Subject: [PATCH 1/2] Fixed issue when exactly 255 bytes (non zero) are encoded. --- components/cobs/example/main/cobs_example.cpp | 18 ++++++++++++++++++ components/cobs/src/cobs.cpp | 3 +-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/components/cobs/example/main/cobs_example.cpp b/components/cobs/example/main/cobs_example.cpp index acf8c0391f..710b8cacb0 100644 --- a/components/cobs/example/main/cobs_example.cpp +++ b/components/cobs/example/main/cobs_example.cpp @@ -682,6 +682,24 @@ void test_edge_cases(espp::Logger &logger) { decoded.size(), large_packet.size(), encoded.size()); } } + + // Test 5: Packet of exactly block len with no zero's in the data + { + std::vector block_len_packet(255, 0x42); + + std::vector encoded = Cobs::encode_packet(block_len_packet); + std::vector decoded = Cobs::decode_packet(encoded); + + bool success = (decoded.size() == block_len_packet.size()) && + (std::memcmp(decoded.data(), block_len_packet.data(), block_len_packet.size()) == 0); + if (success) { + logger.info("Test 5: PASS - Packet of exactly block len with no zeros"); + } else { + logger.error( + "Test 5: FAIL - Packet of exactly block len with no zeros (decoded: {}, expected: {}, encoded: {})", + decoded.size(), block_len_packet.size(), encoded.size()); + } + } } extern "C" void app_main(void) { diff --git a/components/cobs/src/cobs.cpp b/components/cobs/src/cobs.cpp index 4eb848061a..9ae8ac33b2 100644 --- a/components/cobs/src/cobs.cpp +++ b/components/cobs/src/cobs.cpp @@ -44,8 +44,7 @@ size_t Cobs::encode_packet(std::span data, std::span out *codep = code; code = 1; codep = encode; - if (!byte) - ++encode; + ++encode; } } *codep = code; // Write final code value From bf0c025e254c3924f1e284b218d072750ac60743 Mon Sep 17 00:00:00 2001 From: Johan Schuld Date: Mon, 7 Sep 2026 14:03:38 +1200 Subject: [PATCH 2/2] copilot code review feedback. --- components/cobs/example/main/cobs_example.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/components/cobs/example/main/cobs_example.cpp b/components/cobs/example/main/cobs_example.cpp index 710b8cacb0..e370173272 100644 --- a/components/cobs/example/main/cobs_example.cpp +++ b/components/cobs/example/main/cobs_example.cpp @@ -683,7 +683,7 @@ void test_edge_cases(espp::Logger &logger) { } } - // Test 5: Packet of exactly block len with no zero's in the data + // Test 5: Packet of exactly 255 bytes with no zeros in the data { std::vector block_len_packet(255, 0x42); @@ -693,13 +693,13 @@ void test_edge_cases(espp::Logger &logger) { bool success = (decoded.size() == block_len_packet.size()) && (std::memcmp(decoded.data(), block_len_packet.data(), block_len_packet.size()) == 0); if (success) { - logger.info("Test 5: PASS - Packet of exactly block len with no zeros"); + logger.info("Test 5: PASS - Packet of exactly 255 bytes with no zeros"); } else { logger.error( - "Test 5: FAIL - Packet of exactly block len with no zeros (decoded: {}, expected: {}, encoded: {})", + "Test 5: FAIL - Packet of exactly 255 bytes with no zeros (decoded: {}, expected: {}, encoded: {})", decoded.size(), block_len_packet.size(), encoded.size()); } - } + } } extern "C" void app_main(void) {