Fix bug 54322

This commit is contained in:
Oleg Korshul
2021-12-03 18:26:15 +03:00
parent 941b9d0ec1
commit 5388697b0c
5 changed files with 26 additions and 4 deletions

View File

@ -216,6 +216,15 @@ HRESULT COfficeUtils::GetFilesSize(const std::wstring& _zipFile, const std::wstr
}
}
int COfficeUtils::GetAddonFlag()
{
return zlip_get_addition_flag();
}
void COfficeUtils::SetAddonFlag(int flag)
{
zlip_set_addition_flag(flag);
}
class CDeflate_private
{
public:

View File

@ -35,6 +35,10 @@
#include "OfficeUtilsCommon.h"
#include "../../Common/kernel_config.h"
#define ZLIB_ADDON_FLAG_ZERO 0
#define ZLIB_ADDON_FLAG_READ_ONLY 1
#define ZLIB_ADDON_FLAG_WINDOWS_SHARED_WRITE 2
#ifndef Z_DEFLATED
#define Z_DEFLATED 8
#endif
@ -59,6 +63,8 @@ public:
HRESULT CompressFilesFromMemory (const std::wstring& zipFile, const RequestFileCallback& data_source, void* pParam, short compression_level, bool* result);
HRESULT GetFilesSize (const std::wstring& zipFile, const std::wstring& searchPattern, ULONG64& nCommpressed, ULONG64& nUncommpressed);
static int GetAddonFlag();
static void SetAddonFlag(int flag);
};
#define DEFLATE_NO_FLUSH 0

View File

@ -846,9 +846,10 @@ int ZipDir( const WCHAR* dir, const WCHAR* outputFile, const OnProgressCallback*
if ( ( zipFile != NULL ) && ( unzipDir != NULL ) )
{
zlip_set_addition_flag(ZLIB_ADDON_FLAG_READ_ONLY);
int old = zlip_get_addition_flag();
zlip_set_addition_flag(old | ZLIB_ADDON_FLAG_READ_ONLY);
uf = unzOpenHelp (zipFile);
zlip_set_addition_flag(ZLIB_ADDON_FLAG_ZERO);
zlip_set_addition_flag(old);
}
if ( uf != NULL )

View File

@ -61,6 +61,9 @@ static void win32_translate_open_mode(int mode,
*lpdwDesiredAccess = GENERIC_READ;
*lpdwCreationDisposition = OPEN_EXISTING;
*lpdwShareMode = FILE_SHARE_READ;
if (zlip_get_addition_flag() & ZLIB_ADDON_FLAG_WINDOWS_SHARED_WRITE)
*lpdwShareMode |= FILE_SHARE_WRITE;
}
else if (mode & ZLIB_FILEFUNC_MODE_EXISTING)
{

View File

@ -31,8 +31,11 @@
*/
#pragma once
#define ZLIB_ADDON_FLAG_ZERO 0
#define ZLIB_ADDON_FLAG_READ_ONLY 1
#ifndef ZLIB_ADDON_FLAG_ZERO
#define ZLIB_ADDON_FLAG_ZERO 0
#define ZLIB_ADDON_FLAG_READ_ONLY 1
#define ZLIB_ADDON_FLAG_WINDOWS_SHARED_WRITE 2
#endif
void zlip_set_addition_flag(int flag);
int zlip_get_addition_flag();