Fixed error checks and uninitialized values in convert_filedescriptors_to_uri_list

This commit is contained in:
Armin Novak 2019-05-08 14:41:22 +02:00
parent 32ea44c037
commit 84a297b830
1 changed files with 21 additions and 4 deletions

View File

@ -577,7 +577,7 @@ static void* convert_filedescriptors_to_uri_list(wClipboard* clipboard, UINT32 f
const void* data, UINT32* pSize)
{
const FILEDESCRIPTOR* descriptors;
UINT32 nrDescriptors;
UINT32 nrDescriptors = 0;
size_t count, x, alloc, pos, baseLength = 0;
const char* src = (const char*) data;
char* dst;
@ -625,15 +625,32 @@ static void* convert_filedescriptors_to_uri_list(wClipboard* clipboard, UINT32 f
for (x = 0; x < count; x++)
{
int rc;
const FILEDESCRIPTOR* cur = &descriptors[x];
size_t curLen = _wcsnlen(cur->cFileName, ARRAYSIZE(cur->cFileName));
char* curName = NULL;
ConvertFromUnicode(CP_UTF8, 0, cur->cFileName, curLen, &curName, 0, NULL, NULL);
pos += _snprintf(&dst[pos], alloc - pos, "%s/%s\r\n", clipboard->delegate.basePath, curName);
rc = ConvertFromUnicode(CP_UTF8, 0, cur->cFileName, (int)curLen, &curName, 0, NULL, NULL);
if (rc != (int)curLen)
{
free(curName);
free(dst);
return NULL;
}
rc = _snprintf(&dst[pos], alloc - pos, "%s/%s\r\n", clipboard->delegate.basePath, curName);
free(curName);
if (rc < 0)
{
free(dst);
return NULL;
}
pos += (size_t)rc;
}
*pSize = alloc;
*pSize = (UINT32)alloc;
clipboard->fileListSequenceNumber = clipboard->sequenceNumber;
return dst;
}