static LONG smartcard_ndr_read(wStream* s, BYTE** data, size_t min, size_t elementSize,
ndr_ptr_t type)
{
- UINT32 len, offset, len2;
+ size_t len, offset, len2;
void* r;
size_t required;
min, len);
return STATUS_DATA_ERROR;
}
- len *= elementSize;
- if (Stream_GetRemainingLength(s) < len)
+ if (len > SIZE_MAX / 2)
+ return STATUS_BUFFER_TOO_SMALL;
+
+ if (Stream_GetRemainingLength(s) / elementSize < len)
{
WLog_ERR(TAG,
"Short data while trying to read data from NDR pointer, expected %" PRIu32
len, Stream_GetRemainingLength(s));
return STATUS_BUFFER_TOO_SMALL;
}
+ len *= elementSize;
r = calloc(len + 1, sizeof(CHAR));
if (!r)