* PROJECT: ReactOS Zip Shell Extension
* LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
* PURPOSE: zip pidl handling
- * COPYRIGHT: Copyright 2017 Mark Jansen (mark.jansen@reactos.org)
+ * COPYRIGHT: Copyright 2017-2019 Mark Jansen (mark.jansen@reactos.org)
+ * Copyright 2023 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
*/
#include "precomp.h"
-LPITEMIDLIST _ILCreate(ZipPidlType Type, LPCSTR lpString, unz_file_info64& info)
+LPITEMIDLIST _ILCreate(ZipPidlType Type, PCWSTR lpString, unz_file_info64& info)
{
- int cbData = sizeof(ZipPidlEntry) + strlen(lpString);
+ size_t cbData = sizeof(ZipPidlEntry) + wcslen(lpString) * sizeof(WCHAR);
+ if (cbData > MAXWORD)
+ return NULL;
+
ZipPidlEntry* pidl = (ZipPidlEntry*)SHAlloc(cbData + sizeof(WORD));
if (!pidl)
return NULL;
- pidl->cb = cbData;
+ ZeroMemory(pidl, cbData + sizeof(WORD));
+
+ pidl->cb = (WORD)cbData;
pidl->MagicType = 'z';
pidl->ZipType = Type;
pidl->CompressedSize = info.compressed_size;
pidl->UncompressedSize = info.uncompressed_size;
pidl->DosDate = info.dosDate;
- pidl->Password = info.flag & 1;
+ pidl->Password = info.flag & MINIZIP_PASSWORD_FLAG;
}
- strcpy(pidl->Name, lpString);
- *(WORD*)((char*)pidl + cbData) = 0;
+ wcscpy(pidl->Name, lpString);
+ *(WORD*)((char*)pidl + cbData) = 0; // The end of an ITEMIDLIST
return (LPITEMIDLIST)pidl;
}
-
const ZipPidlEntry* _ZipFromIL(LPCITEMIDLIST pidl)
{
const ZipPidlEntry* zipPidl = (const ZipPidlEntry*)pidl;