Skip to content

Commit ebcd131

Browse files
authored
Protecting against potential integer overflow for payload size received from IoT Hub (#599)
1 parent e52c447 commit ebcd131

1 file changed

Lines changed: 16 additions & 8 deletions

File tree

‎src/adapters/pnp/PnpUtils.c‎

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -148,16 +148,24 @@ static IOTHUB_CLIENT_RESULT PropertyUpdateFromIotHubCallback(const char* compone
148148
static char* CopyPayloadToString(const unsigned char* payload, size_t size)
149149
{
150150
char* jsonStr = NULL;
151-
size_t sizeToAllocate = size + 1;
152-
153-
if (NULL != (jsonStr = (char*)malloc(sizeToAllocate)))
151+
size_t sizeToAllocate = 0;
152+
153+
if ((NULL != payload) && (size > 0) && (size < SIZE_MAX))
154154
{
155-
memcpy(jsonStr, payload, size);
156-
jsonStr[size] = '\0';
155+
sizeToAllocate = size + 1;
156+
if (NULL != (jsonStr = (char*)malloc(sizeToAllocate)))
157+
{
158+
memcpy(jsonStr, payload, size);
159+
jsonStr[size] = '\0';
160+
}
161+
else
162+
{
163+
OsConfigLogError(GetLog(), "CopyPayloadToString: out of memory allocating %d bytes", (int)sizeToAllocate);
164+
}
157165
}
158166
else
159167
{
160-
OsConfigLogError(GetLog(), "CopyPayloadToString: out pof memory allocating %d bytes", (int)sizeToAllocate);
168+
OsConfigLogError(GetLog(), "CopyPayloadToString: invalid payload or payload size");
161169
}
162170

163171
return jsonStr;
@@ -314,9 +322,9 @@ static void QueueDesiredTwinUpdate(DEVICE_TWIN_UPDATE_STATE updateState, const u
314322

315323
int queueSize = (int)ARRAY_SIZE(g_desiredTwinUpdates);
316324

317-
if ((NULL == payload) || (0 == size))
325+
if ((NULL == payload) || (0 >= size) || (SIZE_MAX <= size))
318326
{
319-
OsConfigLogError(GetLog(), "QueueDesiredTwinUpdate failed, no payload to queue (%p, %d)", payload, (int)size);
327+
OsConfigLogError(GetLog(), "QueueDesiredTwinUpdate failed, no payload to queue or invalid payload size (%p, %d)", payload, (int)size);
320328
return;
321329
}
322330

0 commit comments

Comments
 (0)