Skip to content
Open
2 changes: 1 addition & 1 deletion scripts/uploadRRDLogs.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
56 changes: 29 additions & 27 deletions src/rrdMsgPackDecoder.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@
#include <stdarg.h>
#include <ctype.h>
#include <time.h>
#include <limits.h>
#include <stdint.h>
#include "rrdMsgPackDecoder.h"
#include "rrdCommon.h"

Expand All @@ -44,29 +46,15 @@ msgpack_object *__finder(const char *name,
{
if (MSGPACK_OBJECT_STR == map->ptr[i].key.type)
{
if (expect_type == map->ptr[i].val.type)
if ((expect_type == map->ptr[i].val.type) &&
(0 == match(&(map->ptr[i]), name)))
{
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)))
{
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;
return NULL;
}
Expand Down Expand Up @@ -136,9 +124,9 @@ 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);
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);
Comment thread
Kaavyashree2 marked this conversation as resolved.
Resolved
if (((NULL != inner) && (0 == (process)(p, 4, inner, subdoc_name, version, transaction_id))) ||
((true == optional) && (NULL == inner)))
{
Expand Down Expand Up @@ -298,16 +286,25 @@ 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 = 0;
size_t size = 0;
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)
{
return 0;
Comment thread
Kaavyashree2 marked this conversation as resolved.
Resolved
}
size += arr->ptr[index].via.str.size;
}
}
if (SIZE_MAX - size < arr->size + 1)
{
return 0;
}
return (size + arr->size + 1); /* Need to add Number of Required "," between each string*/
Comment thread
Kaavyashree2 marked this conversation as resolved.
Resolved
}

Expand All @@ -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;
Expand All @@ -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) {
Comment thread
Kaavyashree2 marked this conversation as resolved.
Resolved
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)
Expand Down
57 changes: 43 additions & 14 deletions src/unittest/rrdUnitTestRunner.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3263,41 +3263,46 @@ TEST(FinderTest, KeyTypeStrExpectTypeMatch)
EXPECT_STREQ(result->via.str.ptr, "value");
}

TEST(FinderTest, KeyTypeStrValTypeStrMatch)
TEST(FinderTest, KeyTypeStrValTypeAnyMatch)
{
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");
kv.val.type = MSGPACK_OBJECT_NIL;
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");
EXPECT_EQ(result->type, MSGPACK_OBJECT_NIL);
}

TEST(FinderTest, KeyTypeStrValTypeAnyMatch)
TEST(FinderTest, NameMatchesButTypeMismatchReturnsNull)
{
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_NIL;
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("name", MSGPACK_OBJECT_NIL, &map);

ASSERT_NE(result, nullptr);
EXPECT_EQ(result->type, MSGPACK_OBJECT_NIL);
}
msgpack_object *result =
__finder("version",
MSGPACK_OBJECT_POSITIVE_INTEGER,
&map);

EXPECT_EQ(result, nullptr);
EXPECT_EQ(errno, MISSING_ENTRY);
Comment thread
Kaavyashree2 marked this conversation as resolved.
Resolved
}
/* --------------- Test get_msgpack_unpack_status() from rrdMsgPackDecoder --------------- */
TEST(GetMsgpackUnpackStatusTest, DecodedbufIsNullAndSizeIsZero)
{
Expand Down Expand Up @@ -3399,6 +3404,30 @@ TEST(GetReqTotalSizeOfIssueTypesStrTest, ArraySizeFiveWithStringTypes)
EXPECT_EQ(getReqTotalSizeOfIssueTypesStr(&arr), 1 + 5 + total_strlen);
}

TEST(GetReqTotalSizeOfIssueTypesStrTest, DetectsSizeOverflow)
{
msgpack_object obj_array[2];

obj_array[0].type = MSGPACK_OBJECT_STR;
obj_array[0].via.str.size = SIZE_MAX - 1;

obj_array[1].type = MSGPACK_OBJECT_STR;
obj_array[1].via.str.size = 10;

printf("SIZE_MAX=%zu\n", (size_t)SIZE_MAX);
printf("obj0 size=%zu\n", (size_t)obj_array[0].via.str.size);
printf("obj1 size=%zu\n", (size_t)obj_array[1].via.str.size);

msgpack_object_array arr = {2, obj_array};

size_t result = getReqTotalSizeOfIssueTypesStr(&arr);

printf("result=%zu\n", result);


EXPECT_EQ(result, 0u);
}

/* --------------- Test FreeResources_RemoteDebugger() from rrdMsgPackDecoder --------------- */
TEST(FreeResourcesRemoteDebuggerTest, NullPointerArgument)
{
Expand Down
Loading