From 543872d7c89da937eae1ff20e163cebda5d6b225 Mon Sep 17 00:00:00 2001 From: Kaavyashree2 Date: Wed, 4 Nov 2026 10:33:45 +0530 Subject: [PATCH 01/18] Harden ISSUETYPE handling by sanitizing user input --- scripts/uploadRRDLogs.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/uploadRRDLogs.sh b/scripts/uploadRRDLogs.sh index ff463bdc1..6e7d95514 100644 --- a/scripts/uploadRRDLogs.sh +++ b/scripts/uploadRRDLogs.sh @@ -34,7 +34,7 @@ OUTFILE='/tmp/DCMSettings.conf' MAC=`getMacAddressOnly` TIMESTAMP=`date "+%Y-%m-%d-%H-%M-%S%p"` RRD_LOG_FILE="$LOG_PATH/remote-debugger.log" -ISSUETYPE=`echo $2 | tr '[a-z]' '[A-Z]'` +ISSUETYPE=$(printf '%s' "$2" | tr '[:lower:]' '[:upper:]' | tr -cd 'A-Z0-9_-') RRD_LOG_PATH="$1" RRD_LOG_DIR="/tmp/rrd/" UPLOAD_DEBUG_FILE="${MAC}_${ISSUETYPE}_${TIMESTAMP}_RRD_DEBUG_LOGS.tgz" From 2644e66842b822c429f47b2470732df8f88826e5 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 4 Nov 2026 05:24:08 +0000 Subject: [PATCH 02/18] ci: regenerate L2_Coverage.md [skip ci] --- test/functional-tests/L2_Coverage.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/functional-tests/L2_Coverage.md b/test/functional-tests/L2_Coverage.md index 4e09e80bc..48a4ff1f0 100644 --- a/test/functional-tests/L2_Coverage.md +++ b/test/functional-tests/L2_Coverage.md @@ -1,6 +1,6 @@ # Remote Debugger L2 Coverage Report -**Generated:** 2026-10-28 +**Generated:** 2026-11-04 **Component:** `remotedebugger` (`src/`) **Test suite:** `test/functional-tests/` **Coverage tool:** lcov (source-level instrumentation via `--coverage`) @@ -19,7 +19,7 @@ | Test functions (`test_*`) | 118 | | Mapped feature/test pairs | 19 / 22 | | Unmatched test files | 4 | -| Line coverage (lcov) | 49.7% (1508 of 3034 lines) | +| Line coverage (lcov) | 49.7% (1507 of 3034 lines) | **L2 Test Coverage** @@ -112,7 +112,7 @@ | `rrdExecuteScript.c` | 94.1% (16/17) | 100.0% (2/2) | `███████████████████░` | | `rrdMsgPackDecoder.c` | 0.0% (0/280) | 0.0% (0/15) | `░░░░░░░░░░░░░░░░░░░░` | | `rrd_config.c` | 42.8% (95/222) | 66.7% (6/9) | `█████████░░░░░░░░░░░` | -| `rrd_sysinfo.c` | 32.1% (36/112) | 33.3% (2/6) | `██████░░░░░░░░░░░░░░` | +| `rrd_sysinfo.c` | 31.2% (35/112) | 33.3% (2/6) | `██████░░░░░░░░░░░░░░` | | `rrd_logproc.c` | 48.6% (36/74) | 75.0% (3/4) | `██████████░░░░░░░░░░` | | `rrd_archive.c` | 47.2% (126/267) | 72.7% (8/11) | `█████████░░░░░░░░░░░` | | `rrd_upload.c` | 40.7% (37/91) | 60.0% (3/5) | `████████░░░░░░░░░░░░` | From e5e89d0754e993fcb3c145fe4685f8337514e950 Mon Sep 17 00:00:00 2001 From: Kaavyashree2 Date: Wed, 4 Nov 2026 11:34:13 +0530 Subject: [PATCH 03/18] Resolving type confusion and restricting overflow --- src/rrdMsgPackDecoder.c | 74 +++++++++++++++++++++-------------------- 1 file changed, 38 insertions(+), 36 deletions(-) diff --git a/src/rrdMsgPackDecoder.c b/src/rrdMsgPackDecoder.c index e851eaa1f..9cf232118 100644 --- a/src/rrdMsgPackDecoder.c +++ b/src/rrdMsgPackDecoder.c @@ -23,6 +23,8 @@ #include #include #include +#include +#include #include "rrdMsgPackDecoder.h" #include "rrdCommon.h" @@ -44,27 +46,9 @@ msgpack_object *__finder(const char *name, { if (MSGPACK_OBJECT_STR == map->ptr[i].key.type) { - if (expect_type == map->ptr[i].val.type) - { - if (0 == match(&(map->ptr[i]), name)) - { - return &map->ptr[i].val; - } - } - else if (MSGPACK_OBJECT_STR == map->ptr[i].val.type) - { - if (0 == strncmp(map->ptr[i].key.via.str.ptr, name, strlen(name))) - { + if ((expect_type == map->ptr[i].val.type) && (0 == match(&(map->ptr[i]), name))) { return &map->ptr[i].val; } - } - else - { - if (0 == strncmp(map->ptr[i].key.via.str.ptr, name, strlen(name))) - { - return &map->ptr[i].val; - } - } } } errno = MISSING_ENTRY; @@ -136,17 +120,21 @@ void *helper_convert(const void *buf, size_t len, else if (NULL != wrapper && 0 != strcmp(wrapper, "parameters")) { inner = __finder(wrapper, expect_type, &msg.data.via.map); - subdoc_name = __finder("subdoc_name", expect_type, &msg.data.via.map); - version = __finder("version", expect_type, &msg.data.via.map); - transaction_id = __finder("transaction_id", expect_type, &msg.data.via.map); - if (((NULL != inner) && (0 == (process)(p, 4, inner, subdoc_name, version, transaction_id))) || - ((true == optional) && (NULL == inner))) - { - msgpack_unpacked_destroy(&msg); - errno = OK; - return p; + subdoc_name = __finder("subdoc_name",MSGPACK_OBJECT_STR, &msg.data.via.map); + version = __finder("version", MSGPACK_OBJECT_POSITIVE_INTEGER, &msg.data.via.map); + transaction_id = __finder("transaction_id", MSGPACK_OBJECT_POSITIVE_INTEGER, &msg.data.via.map); + if ((NULL != inner) && (NULL != subdoc_name) && (NULL != version) && (NULL != transaction_id) && + (0 == (process)(p, 4, inner, subdoc_name, version, transaction_id))) { + msgpack_unpacked_destroy(&msg); + errno = OK; + return p; + } + else if ((true == optional) && (NULL == inner)) { + msgpack_unpacked_destroy(&msg); + errno = OK; + return p; } - else + else { RDK_LOG(RDK_LOG_ERROR, LOG_REMDEBUG, "[%s:%d]:Invalid first element\n", __FUNCTION__, __LINE__); errno = INVALID_FIRST_ELEMENT; @@ -298,17 +286,26 @@ const char *remotedebuggerdoc_strerror(int errnum) * @param msgpack_object_array *arr - The msgpack array containing the issue types. * @return int - The required size of the issue type string. */ -int getReqTotalSizeOfIssueTypesStr(msgpack_object_array *arr) +size_t getReqTotalSizeOfIssueTypesStr(msgpack_object_array *arr) { - int index = 0, size = 0; + size_t index; + size_t size = 0; + for(index = 0; index < arr->size; index++) { - if(arr->ptr[index].type == MSGPACK_OBJECT_STR) - { + if(arr->ptr[index].type == MSGPACK_OBJECT_STR) { + if (SIZE_MAX - size < arr->ptr[index].via.str.size) + return 0; + size += arr->ptr[index].via.str.size; } } - return (size + arr->size + 1); /* Need to add Number of Required "," between each string*/ + + /* add commas and terminating NULL */ + if (SIZE_MAX - size < arr->size + 1) + return 0; + + return size + arr->size + 1; } /* @@ -322,7 +319,8 @@ int process_remotedebuggerparams(remotedebuggerparam_t *rrdParam, msgpack_object { int left = map->size; uint8_t objects_left = 1; - int index = 0, resultLen = 0; + int index = 0; + size_t resultLen = 0; msgpack_object_kv *p = NULL; msgpack_object_array *arr = NULL; p = map->ptr; @@ -336,7 +334,11 @@ int process_remotedebuggerparams(remotedebuggerparam_t *rrdParam, msgpack_object { arr = &p->val.via.array; resultLen = getReqTotalSizeOfIssueTypesStr(arr); - RDK_LOG(RDK_LOG_DEBUG, LOG_REMDEBUG, "[%s:%d]: Size:%d \n", __FUNCTION__, __LINE__,resultLen); + if (resultLen == 0) { + RDK_LOG(RDK_LOG_ERROR, LOG_REMDEBUG, "[%s:%d]: Invalid IssueType size\n", __FUNCTION__, __LINE__); + return -1; + } + RDK_LOG(RDK_LOG_DEBUG, LOG_REMDEBUG, "[%s:%d]: Size:%zu \n", __FUNCTION__, __LINE__,resultLen); rrdParam->length = resultLen; rrdParam->commandList = (char *)calloc(resultLen + 1, sizeof(char)); if(rrdParam->commandList != NULL) From e7dbd23b5b5f14115913f557d8bb4e2519e56e12 Mon Sep 17 00:00:00 2001 From: Kaavyashree2 Date: Wed, 4 Nov 2026 11:42:39 +0530 Subject: [PATCH 04/18] Coverage improved for overflow and type mismatch --- src/unittest/rrdUnitTestRunner.cpp | 67 +++++++++++++++++++++++++++--- 1 file changed, 62 insertions(+), 5 deletions(-) diff --git a/src/unittest/rrdUnitTestRunner.cpp b/src/unittest/rrdUnitTestRunner.cpp index 6a70307c7..7bb12534a 100644 --- a/src/unittest/rrdUnitTestRunner.cpp +++ b/src/unittest/rrdUnitTestRunner.cpp @@ -3263,23 +3263,27 @@ TEST(FinderTest, KeyTypeStrExpectTypeMatch) EXPECT_STREQ(result->via.str.ptr, "value"); } -TEST(FinderTest, KeyTypeStrValTypeStrMatch) +TEST(FinderTest, TypeMismatchReturnsNull) { msgpack_object_map map; msgpack_object_kv kv; + kv.key.type = MSGPACK_OBJECT_STR; kv.key.via.str.ptr = "name"; kv.key.via.str.size = strlen("name"); + kv.val.type = MSGPACK_OBJECT_STR; kv.val.via.str.ptr = "value"; kv.val.via.str.size = strlen("value"); + map.size = 1; map.ptr = &kv; - msgpack_object *result = __finder("name", MSGPACK_OBJECT_NIL, &map); - ASSERT_NE(result, nullptr); - EXPECT_EQ(result->type, MSGPACK_OBJECT_STR); - EXPECT_STREQ(result->via.str.ptr, "value"); + msgpack_object *result = + __finder("name", MSGPACK_OBJECT_NIL, &map); + + EXPECT_EQ(result, nullptr); + EXPECT_EQ(errno, MISSING_ENTRY); } TEST(FinderTest, KeyTypeStrValTypeAnyMatch) @@ -3298,6 +3302,31 @@ TEST(FinderTest, KeyTypeStrValTypeAnyMatch) EXPECT_EQ(result->type, MSGPACK_OBJECT_NIL); } +TEST(FinderTest, NameMatchesButTypeMismatchReturnsNull) +{ + msgpack_object_map map; + msgpack_object_kv kv; + + kv.key.type = MSGPACK_OBJECT_STR; + kv.key.via.str.ptr = "version"; + kv.key.via.str.size = strlen("version"); + + kv.val.type = MSGPACK_OBJECT_STR; + kv.val.via.str.ptr = "abc"; + kv.val.via.str.size = strlen("abc"); + + map.size = 1; + map.ptr = &kv; + + msgpack_object *result = + __finder("version", + MSGPACK_OBJECT_POSITIVE_INTEGER, + &map); + + EXPECT_EQ(result, nullptr); + EXPECT_EQ(errno, MISSING_ENTRY); +} + /* --------------- Test get_msgpack_unpack_status() from rrdMsgPackDecoder --------------- */ TEST(GetMsgpackUnpackStatusTest, DecodedbufIsNullAndSizeIsZero) { @@ -3399,6 +3428,34 @@ TEST(GetReqTotalSizeOfIssueTypesStrTest, ArraySizeFiveWithStringTypes) EXPECT_EQ(getReqTotalSizeOfIssueTypesStr(&arr), 1 + 5 + total_strlen); } +TEST(GetReqTotalSizeOfIssueTypesStrTest, OverflowReturnsZero) +{ + msgpack_object obj_array[2]; + + obj_array[0].type = MSGPACK_OBJECT_STR; + obj_array[0].via.str.size = SIZE_MAX - 10; + + obj_array[1].type = MSGPACK_OBJECT_STR; + obj_array[1].via.str.size = 20; + + msgpack_object_array arr = {2, obj_array}; + + EXPECT_EQ(getReqTotalSizeOfIssueTypesStr(&arr), 0U); +} + +TEST(GetReqTotalSizeOfIssueTypesStrTest, FinalAdditionOverflowReturnsZero) +{ + msgpack_object obj_array[1]; + + obj_array[0].type = MSGPACK_OBJECT_STR; + obj_array[0].via.str.size = SIZE_MAX - 2; + + msgpack_object_array arr; + arr.size = 2; + arr.ptr = obj_array; + + EXPECT_EQ(getReqTotalSizeOfIssueTypesStr(&arr), 0U); +} /* --------------- Test FreeResources_RemoteDebugger() from rrdMsgPackDecoder --------------- */ TEST(FreeResourcesRemoteDebuggerTest, NullPointerArgument) { From 80089293b42da850431217bd7085c575788def20 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 4 Nov 2026 06:29:29 +0000 Subject: [PATCH 05/18] ci: regenerate L2_Coverage.md [skip ci] --- test/functional-tests/L2_Coverage.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/functional-tests/L2_Coverage.md b/test/functional-tests/L2_Coverage.md index 48a4ff1f0..cd05befde 100644 --- a/test/functional-tests/L2_Coverage.md +++ b/test/functional-tests/L2_Coverage.md @@ -19,7 +19,7 @@ | Test functions (`test_*`) | 118 | | Mapped feature/test pairs | 19 / 22 | | Unmatched test files | 4 | -| Line coverage (lcov) | 49.7% (1507 of 3034 lines) | +| Line coverage (lcov) | 49.6% (1507 of 3039 lines) | **L2 Test Coverage** @@ -110,7 +110,7 @@ | `rrdCommandSanity.c` | 93.1% (67/72) | 100.0% (3/3) | `███████████████████░` | | `rrdDynamic.c` | 40.4% (59/146) | 40.0% (2/5) | `████████░░░░░░░░░░░░` | | `rrdExecuteScript.c` | 94.1% (16/17) | 100.0% (2/2) | `███████████████████░` | -| `rrdMsgPackDecoder.c` | 0.0% (0/280) | 0.0% (0/15) | `░░░░░░░░░░░░░░░░░░░░` | +| `rrdMsgPackDecoder.c` | 0.0% (0/285) | 0.0% (0/15) | `░░░░░░░░░░░░░░░░░░░░` | | `rrd_config.c` | 42.8% (95/222) | 66.7% (6/9) | `█████████░░░░░░░░░░░` | | `rrd_sysinfo.c` | 31.2% (35/112) | 33.3% (2/6) | `██████░░░░░░░░░░░░░░` | | `rrd_logproc.c` | 48.6% (36/74) | 75.0% (3/4) | `██████████░░░░░░░░░░` | From 96eb03944ed78e901c624ce5d5a8c5c06bb66203 Mon Sep 17 00:00:00 2001 From: Kaavyashree2 Date: Wed, 4 Nov 2026 12:12:27 +0530 Subject: [PATCH 06/18] Removed unrealistic testcases --- src/unittest/rrdUnitTestRunner.cpp | 28 ---------------------------- 1 file changed, 28 deletions(-) diff --git a/src/unittest/rrdUnitTestRunner.cpp b/src/unittest/rrdUnitTestRunner.cpp index 7bb12534a..14f787ace 100644 --- a/src/unittest/rrdUnitTestRunner.cpp +++ b/src/unittest/rrdUnitTestRunner.cpp @@ -3428,34 +3428,6 @@ TEST(GetReqTotalSizeOfIssueTypesStrTest, ArraySizeFiveWithStringTypes) EXPECT_EQ(getReqTotalSizeOfIssueTypesStr(&arr), 1 + 5 + total_strlen); } -TEST(GetReqTotalSizeOfIssueTypesStrTest, OverflowReturnsZero) -{ - msgpack_object obj_array[2]; - - obj_array[0].type = MSGPACK_OBJECT_STR; - obj_array[0].via.str.size = SIZE_MAX - 10; - - obj_array[1].type = MSGPACK_OBJECT_STR; - obj_array[1].via.str.size = 20; - - msgpack_object_array arr = {2, obj_array}; - - EXPECT_EQ(getReqTotalSizeOfIssueTypesStr(&arr), 0U); -} - -TEST(GetReqTotalSizeOfIssueTypesStrTest, FinalAdditionOverflowReturnsZero) -{ - msgpack_object obj_array[1]; - - obj_array[0].type = MSGPACK_OBJECT_STR; - obj_array[0].via.str.size = SIZE_MAX - 2; - - msgpack_object_array arr; - arr.size = 2; - arr.ptr = obj_array; - - EXPECT_EQ(getReqTotalSizeOfIssueTypesStr(&arr), 0U); -} /* --------------- Test FreeResources_RemoteDebugger() from rrdMsgPackDecoder --------------- */ TEST(FreeResourcesRemoteDebuggerTest, NullPointerArgument) { From d9e219c9d27bfc3dd044354f04216aaabc1edac3 Mon Sep 17 00:00:00 2001 From: Kaavyashree2 Date: Wed, 4 Nov 2026 12:20:50 +0530 Subject: [PATCH 07/18] Helper testcase fix --- src/unittest/rrdUnitTestRunner.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/unittest/rrdUnitTestRunner.cpp b/src/unittest/rrdUnitTestRunner.cpp index 14f787ace..208de5d5f 100644 --- a/src/unittest/rrdUnitTestRunner.cpp +++ b/src/unittest/rrdUnitTestRunner.cpp @@ -3562,6 +3562,7 @@ TEST(HelperConvertTest, MsgPackWrapperConditionFalseProcessFails) TEST(HelperConvertTest, MsgPackWrapperConditionFalseProcessSuccess) { + errno = 0; msgpack_sbuffer sbuf; msgpack_packer pk; msgpack_sbuffer_init(&sbuf); From 4ed88b23d54cd4df7b438f5d53bdda753cfff2d7 Mon Sep 17 00:00:00 2001 From: Kaavyashree2 Date: Wed, 4 Nov 2026 13:01:22 +0530 Subject: [PATCH 08/18] Syntax error fix --- src/rrdMsgPackDecoder.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/rrdMsgPackDecoder.c b/src/rrdMsgPackDecoder.c index 9cf232118..75cdba705 100644 --- a/src/rrdMsgPackDecoder.c +++ b/src/rrdMsgPackDecoder.c @@ -294,17 +294,17 @@ size_t getReqTotalSizeOfIssueTypesStr(msgpack_object_array *arr) for(index = 0; index < arr->size; index++) { if(arr->ptr[index].type == MSGPACK_OBJECT_STR) { - if (SIZE_MAX - size < arr->ptr[index].via.str.size) + if (SIZE_MAX - size < arr->ptr[index].via.str.size) { return 0; - + } size += arr->ptr[index].via.str.size; } } /* add commas and terminating NULL */ - if (SIZE_MAX - size < arr->size + 1) + if (SIZE_MAX - size < arr->size + 1) { return 0; - + } return size + arr->size + 1; } From 59576446ea879333fa1def28fcb3ae8b98e74f8a Mon Sep 17 00:00:00 2001 From: Kaavyashree2 Date: Wed, 4 Nov 2026 13:10:39 +0530 Subject: [PATCH 09/18] Testcase addition for mismatch check --- src/unittest/rrdUnitTestRunner.cpp | 57 ++++++++++++++++++------------ 1 file changed, 34 insertions(+), 23 deletions(-) diff --git a/src/unittest/rrdUnitTestRunner.cpp b/src/unittest/rrdUnitTestRunner.cpp index 208de5d5f..00ef75dc2 100644 --- a/src/unittest/rrdUnitTestRunner.cpp +++ b/src/unittest/rrdUnitTestRunner.cpp @@ -3263,29 +3263,6 @@ TEST(FinderTest, KeyTypeStrExpectTypeMatch) EXPECT_STREQ(result->via.str.ptr, "value"); } -TEST(FinderTest, TypeMismatchReturnsNull) -{ - msgpack_object_map map; - msgpack_object_kv kv; - - kv.key.type = MSGPACK_OBJECT_STR; - kv.key.via.str.ptr = "name"; - kv.key.via.str.size = strlen("name"); - - kv.val.type = MSGPACK_OBJECT_STR; - kv.val.via.str.ptr = "value"; - kv.val.via.str.size = strlen("value"); - - map.size = 1; - map.ptr = &kv; - - msgpack_object *result = - __finder("name", MSGPACK_OBJECT_NIL, &map); - - EXPECT_EQ(result, nullptr); - EXPECT_EQ(errno, MISSING_ENTRY); -} - TEST(FinderTest, KeyTypeStrValTypeAnyMatch) { msgpack_object_map map; @@ -3582,6 +3559,40 @@ TEST(HelperConvertTest, MsgPackWrapperConditionFalseProcessSuccess) msgpack_sbuffer_destroy(&sbuf); } +TEST(HelperConvertTest, MissingRequiredFieldsReturnsNull) +{ + errno = 0; + + msgpack_sbuffer sbuf; + msgpack_packer pk; + + msgpack_sbuffer_init(&sbuf); + msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write); + + msgpack_pack_map(&pk, 1); + + msgpack_pack_str(&pk, 3); + msgpack_pack_str_body(&pk, "key", 3); + + msgpack_pack_str(&pk, 5); + msgpack_pack_str_body(&pk, "value", 5); + + void *result = + helper_convert(sbuf.data, + sbuf.size, + 100, + "key", + MSGPACK_OBJECT_STR, + false, + mock_process_success, + mock_destroy); + + EXPECT_EQ(result, nullptr); + EXPECT_EQ(errno, INVALID_FIRST_ELEMENT); + + msgpack_sbuffer_destroy(&sbuf); +} + /* --------------- Test process_remotedebuggerparams() from rrdMsgPackDecoder --------------- */ TEST(ProcessRemoteDebuggerParamsTest, TestProcessRemoteDebuggerParams) { From a46933e3d71c420f906dec35593eaebdb6852786 Mon Sep 17 00:00:00 2001 From: Kaavyashree2 Date: Wed, 4 Nov 2026 13:20:32 +0530 Subject: [PATCH 10/18] Removing signature changes --- src/rrdMsgPackDecoder.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/rrdMsgPackDecoder.c b/src/rrdMsgPackDecoder.c index 75cdba705..94637abf8 100644 --- a/src/rrdMsgPackDecoder.c +++ b/src/rrdMsgPackDecoder.c @@ -123,8 +123,9 @@ void *helper_convert(const void *buf, size_t len, subdoc_name = __finder("subdoc_name",MSGPACK_OBJECT_STR, &msg.data.via.map); version = __finder("version", MSGPACK_OBJECT_POSITIVE_INTEGER, &msg.data.via.map); transaction_id = __finder("transaction_id", MSGPACK_OBJECT_POSITIVE_INTEGER, &msg.data.via.map); - if ((NULL != inner) && (NULL != subdoc_name) && (NULL != version) && (NULL != transaction_id) && - (0 == (process)(p, 4, inner, subdoc_name, version, transaction_id))) { + if ((NULL != inner) && + (0 == (process)(p, 4, inner, subdoc_name, version, transaction_id))) || + ((true == optional) && (NULL == inner))) { msgpack_unpacked_destroy(&msg); errno = OK; return p; From 2edd3c167176eb2163c45a57f6311b38463d8d55 Mon Sep 17 00:00:00 2001 From: Kaavyashree2 Date: Wed, 4 Nov 2026 13:29:33 +0530 Subject: [PATCH 11/18] Syntax error fix --- src/rrdMsgPackDecoder.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/rrdMsgPackDecoder.c b/src/rrdMsgPackDecoder.c index 94637abf8..0b657eb1d 100644 --- a/src/rrdMsgPackDecoder.c +++ b/src/rrdMsgPackDecoder.c @@ -123,18 +123,13 @@ void *helper_convert(const void *buf, size_t len, subdoc_name = __finder("subdoc_name",MSGPACK_OBJECT_STR, &msg.data.via.map); version = __finder("version", MSGPACK_OBJECT_POSITIVE_INTEGER, &msg.data.via.map); transaction_id = __finder("transaction_id", MSGPACK_OBJECT_POSITIVE_INTEGER, &msg.data.via.map); - if ((NULL != inner) && + if (((NULL != inner) && (0 == (process)(p, 4, inner, subdoc_name, version, transaction_id))) || ((true == optional) && (NULL == inner))) { msgpack_unpacked_destroy(&msg); errno = OK; return p; } - else if ((true == optional) && (NULL == inner)) { - msgpack_unpacked_destroy(&msg); - errno = OK; - return p; - } else { RDK_LOG(RDK_LOG_ERROR, LOG_REMDEBUG, "[%s:%d]:Invalid first element\n", __FUNCTION__, __LINE__); From e8e67fa7cc98e10b9c6823c1641c747babde7ea0 Mon Sep 17 00:00:00 2001 From: Kaavyashree2 Date: Wed, 4 Nov 2026 13:35:38 +0530 Subject: [PATCH 12/18] Removed outdated testcases --- src/unittest/rrdUnitTestRunner.cpp | 34 ------------------------------ 1 file changed, 34 deletions(-) diff --git a/src/unittest/rrdUnitTestRunner.cpp b/src/unittest/rrdUnitTestRunner.cpp index 00ef75dc2..bd33fef52 100644 --- a/src/unittest/rrdUnitTestRunner.cpp +++ b/src/unittest/rrdUnitTestRunner.cpp @@ -3559,40 +3559,6 @@ TEST(HelperConvertTest, MsgPackWrapperConditionFalseProcessSuccess) msgpack_sbuffer_destroy(&sbuf); } -TEST(HelperConvertTest, MissingRequiredFieldsReturnsNull) -{ - errno = 0; - - msgpack_sbuffer sbuf; - msgpack_packer pk; - - msgpack_sbuffer_init(&sbuf); - msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write); - - msgpack_pack_map(&pk, 1); - - msgpack_pack_str(&pk, 3); - msgpack_pack_str_body(&pk, "key", 3); - - msgpack_pack_str(&pk, 5); - msgpack_pack_str_body(&pk, "value", 5); - - void *result = - helper_convert(sbuf.data, - sbuf.size, - 100, - "key", - MSGPACK_OBJECT_STR, - false, - mock_process_success, - mock_destroy); - - EXPECT_EQ(result, nullptr); - EXPECT_EQ(errno, INVALID_FIRST_ELEMENT); - - msgpack_sbuffer_destroy(&sbuf); -} - /* --------------- Test process_remotedebuggerparams() from rrdMsgPackDecoder --------------- */ TEST(ProcessRemoteDebuggerParamsTest, TestProcessRemoteDebuggerParams) { From 2eeabf2e82293c6d0bca4953d9633dd471a68ea8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 4 Nov 2026 08:22:55 +0000 Subject: [PATCH 13/18] ci: regenerate L2_Coverage.md [skip ci] --- test/functional-tests/L2_Coverage.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/functional-tests/L2_Coverage.md b/test/functional-tests/L2_Coverage.md index cd05befde..403b6df69 100644 --- a/test/functional-tests/L2_Coverage.md +++ b/test/functional-tests/L2_Coverage.md @@ -19,7 +19,7 @@ | Test functions (`test_*`) | 118 | | Mapped feature/test pairs | 19 / 22 | | Unmatched test files | 4 | -| Line coverage (lcov) | 49.6% (1507 of 3039 lines) | +| Line coverage (lcov) | 49.6% (1507 of 3036 lines) | **L2 Test Coverage** @@ -110,7 +110,7 @@ | `rrdCommandSanity.c` | 93.1% (67/72) | 100.0% (3/3) | `███████████████████░` | | `rrdDynamic.c` | 40.4% (59/146) | 40.0% (2/5) | `████████░░░░░░░░░░░░` | | `rrdExecuteScript.c` | 94.1% (16/17) | 100.0% (2/2) | `███████████████████░` | -| `rrdMsgPackDecoder.c` | 0.0% (0/285) | 0.0% (0/15) | `░░░░░░░░░░░░░░░░░░░░` | +| `rrdMsgPackDecoder.c` | 0.0% (0/282) | 0.0% (0/15) | `░░░░░░░░░░░░░░░░░░░░` | | `rrd_config.c` | 42.8% (95/222) | 66.7% (6/9) | `█████████░░░░░░░░░░░` | | `rrd_sysinfo.c` | 31.2% (35/112) | 33.3% (2/6) | `██████░░░░░░░░░░░░░░` | | `rrd_logproc.c` | 48.6% (36/74) | 75.0% (3/4) | `██████████░░░░░░░░░░` | From a82e39023c2ab7a34ea00f19b3921788f1c1dcfc Mon Sep 17 00:00:00 2001 From: Kaavyashree2 Date: Wed, 4 Nov 2026 14:39:20 +0530 Subject: [PATCH 14/18] Potential fix for pull request finding 'Require exact metadata key lengths' Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- src/rrdMsgPackDecoder.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/rrdMsgPackDecoder.c b/src/rrdMsgPackDecoder.c index 0b657eb1d..ac670becd 100644 --- a/src/rrdMsgPackDecoder.c +++ b/src/rrdMsgPackDecoder.c @@ -46,7 +46,9 @@ msgpack_object *__finder(const char *name, { if (MSGPACK_OBJECT_STR == map->ptr[i].key.type) { - if ((expect_type == map->ptr[i].val.type) && (0 == match(&(map->ptr[i]), name))) { + if ((expect_type == map->ptr[i].val.type) && + (map->ptr[i].key.via.str.size == strlen(name)) && + (0 == match(&(map->ptr[i]), name))) { return &map->ptr[i].val; } } From c7d744c3b92aac2d56300c071aa2c1531d37bbe0 Mon Sep 17 00:00:00 2001 From: Kaavyashree2 Date: Wed, 4 Nov 2026 14:42:18 +0530 Subject: [PATCH 15/18] Testcase addition for finder --- src/unittest/rrdUnitTestRunner.cpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/unittest/rrdUnitTestRunner.cpp b/src/unittest/rrdUnitTestRunner.cpp index bd33fef52..72307d098 100644 --- a/src/unittest/rrdUnitTestRunner.cpp +++ b/src/unittest/rrdUnitTestRunner.cpp @@ -3304,6 +3304,29 @@ TEST(FinderTest, NameMatchesButTypeMismatchReturnsNull) EXPECT_EQ(errno, MISSING_ENTRY); } +TEST(FinderTest, PrefixKeyShouldNotMatchFullName) +{ + msgpack_object_map map; + msgpack_object_kv kv; + + kv.key.type = MSGPACK_OBJECT_STR; + kv.key.via.str.ptr = "v"; + kv.key.via.str.size = 1; + + kv.val.type = MSGPACK_OBJECT_POSITIVE_INTEGER; + + map.size = 1; + map.ptr = &kv; + + msgpack_object *result = + __finder("version", + MSGPACK_OBJECT_POSITIVE_INTEGER, + &map); + + EXPECT_EQ(result, nullptr); + EXPECT_EQ(errno, MISSING_ENTRY); +} + /* --------------- Test get_msgpack_unpack_status() from rrdMsgPackDecoder --------------- */ TEST(GetMsgpackUnpackStatusTest, DecodedbufIsNullAndSizeIsZero) { From c42229e7db478bb7a6915116c42c851c395488ef Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 4 Nov 2026 09:29:34 +0000 Subject: [PATCH 16/18] ci: regenerate L2_Coverage.md [skip ci] --- test/functional-tests/L2_Coverage.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/functional-tests/L2_Coverage.md b/test/functional-tests/L2_Coverage.md index 403b6df69..b3f7a5baa 100644 --- a/test/functional-tests/L2_Coverage.md +++ b/test/functional-tests/L2_Coverage.md @@ -19,7 +19,7 @@ | Test functions (`test_*`) | 118 | | Mapped feature/test pairs | 19 / 22 | | Unmatched test files | 4 | -| Line coverage (lcov) | 49.6% (1507 of 3036 lines) | +| Line coverage (lcov) | 49.6% (1507 of 3038 lines) | **L2 Test Coverage** @@ -110,7 +110,7 @@ | `rrdCommandSanity.c` | 93.1% (67/72) | 100.0% (3/3) | `███████████████████░` | | `rrdDynamic.c` | 40.4% (59/146) | 40.0% (2/5) | `████████░░░░░░░░░░░░` | | `rrdExecuteScript.c` | 94.1% (16/17) | 100.0% (2/2) | `███████████████████░` | -| `rrdMsgPackDecoder.c` | 0.0% (0/282) | 0.0% (0/15) | `░░░░░░░░░░░░░░░░░░░░` | +| `rrdMsgPackDecoder.c` | 0.0% (0/284) | 0.0% (0/15) | `░░░░░░░░░░░░░░░░░░░░` | | `rrd_config.c` | 42.8% (95/222) | 66.7% (6/9) | `█████████░░░░░░░░░░░` | | `rrd_sysinfo.c` | 31.2% (35/112) | 33.3% (2/6) | `██████░░░░░░░░░░░░░░` | | `rrd_logproc.c` | 48.6% (36/74) | 75.0% (3/4) | `██████████░░░░░░░░░░` | From 10527098815497542739781bb30ff6b0b3171fce Mon Sep 17 00:00:00 2001 From: Kaavyashree2 Date: Wed, 4 Nov 2026 15:00:45 +0530 Subject: [PATCH 17/18] Reverting changes --- src/rrdMsgPackDecoder.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/rrdMsgPackDecoder.c b/src/rrdMsgPackDecoder.c index ac670becd..6131a7493 100644 --- a/src/rrdMsgPackDecoder.c +++ b/src/rrdMsgPackDecoder.c @@ -46,9 +46,10 @@ msgpack_object *__finder(const char *name, { if (MSGPACK_OBJECT_STR == map->ptr[i].key.type) { - if ((expect_type == map->ptr[i].val.type) && - (map->ptr[i].key.via.str.size == strlen(name)) && - (0 == match(&(map->ptr[i]), name))) { + if ((expect_type == map->ptr[i].val.type) && + + (0 == match(&(map->ptr[i]), name))) { + return &map->ptr[i].val; } } From 08794470977346cf40832f07a9b62235c7912915 Mon Sep 17 00:00:00 2001 From: Kaavyashree2 Date: Wed, 4 Nov 2026 15:02:46 +0530 Subject: [PATCH 18/18] Reverting changes --- src/unittest/rrdUnitTestRunner.cpp | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/src/unittest/rrdUnitTestRunner.cpp b/src/unittest/rrdUnitTestRunner.cpp index 72307d098..bd33fef52 100644 --- a/src/unittest/rrdUnitTestRunner.cpp +++ b/src/unittest/rrdUnitTestRunner.cpp @@ -3304,29 +3304,6 @@ TEST(FinderTest, NameMatchesButTypeMismatchReturnsNull) EXPECT_EQ(errno, MISSING_ENTRY); } -TEST(FinderTest, PrefixKeyShouldNotMatchFullName) -{ - msgpack_object_map map; - msgpack_object_kv kv; - - kv.key.type = MSGPACK_OBJECT_STR; - kv.key.via.str.ptr = "v"; - kv.key.via.str.size = 1; - - kv.val.type = MSGPACK_OBJECT_POSITIVE_INTEGER; - - map.size = 1; - map.ptr = &kv; - - msgpack_object *result = - __finder("version", - MSGPACK_OBJECT_POSITIVE_INTEGER, - &map); - - EXPECT_EQ(result, nullptr); - EXPECT_EQ(errno, MISSING_ENTRY); -} - /* --------------- Test get_msgpack_unpack_status() from rrdMsgPackDecoder --------------- */ TEST(GetMsgpackUnpackStatusTest, DecodedbufIsNullAndSizeIsZero) {