Don't allocate a temp zip64_internal on the stack

Signed-off-by: Xiang Xiao <xiaoxiang@xiaomi.com>
Change-Id: Ife21dc7d6234d5ef66c4443ec520507e8568292f
This commit is contained in:
Xiang Xiao 2021-07-21 02:39:01 +08:00
parent 21767c654d
commit 5cd92fcfbb
1 changed files with 29 additions and 31 deletions

View File

@ -848,71 +848,69 @@ local int LoadCentralDirectoryRecord(zip64_internal* pziinit)
/************************************************************/
extern zipFile ZEXPORT zipOpen3 (const void *pathname, int append, zipcharpc* globalcomment, zlib_filefunc64_32_def* pzlib_filefunc64_32_def)
{
zip64_internal ziinit;
zip64_internal* zi;
int err=ZIP_OK;
ziinit.z_filefunc.zseek32_file = NULL;
ziinit.z_filefunc.ztell32_file = NULL;
if (pzlib_filefunc64_32_def==NULL)
fill_fopen64_filefunc(&ziinit.z_filefunc.zfile_func64);
else
ziinit.z_filefunc = *pzlib_filefunc64_32_def;
zi = (zip64_internal*)ALLOC(sizeof(zip64_internal));
if (zi==NULL)
{
return NULL;
}
ziinit.filestream = ZOPEN64(ziinit.z_filefunc,
zi->z_filefunc.zseek32_file = NULL;
zi->z_filefunc.ztell32_file = NULL;
if (pzlib_filefunc64_32_def==NULL)
fill_fopen64_filefunc(&zi->z_filefunc.zfile_func64);
else
zi->z_filefunc = *pzlib_filefunc64_32_def;
zi->filestream = ZOPEN64(zi->z_filefunc,
pathname,
(append == APPEND_STATUS_CREATE) ?
(ZLIB_FILEFUNC_MODE_READ | ZLIB_FILEFUNC_MODE_WRITE | ZLIB_FILEFUNC_MODE_CREATE) :
(ZLIB_FILEFUNC_MODE_READ | ZLIB_FILEFUNC_MODE_WRITE | ZLIB_FILEFUNC_MODE_EXISTING));
if (ziinit.filestream == NULL)
return NULL;
if (append == APPEND_STATUS_CREATEAFTER)
ZSEEK64(ziinit.z_filefunc,ziinit.filestream,0,SEEK_END);
ziinit.begin_pos = ZTELL64(ziinit.z_filefunc,ziinit.filestream);
ziinit.in_opened_file_inzip = 0;
ziinit.ci.stream_initialised = 0;
ziinit.number_entry = 0;
ziinit.add_position_when_writing_offset = 0;
init_linkedlist(&(ziinit.central_dir));
zi = (zip64_internal*)ALLOC(sizeof(zip64_internal));
if (zi==NULL)
if (zi->filestream == NULL)
{
ZCLOSE64(ziinit.z_filefunc,ziinit.filestream);
TRYFREE(zi);
return NULL;
}
if (append == APPEND_STATUS_CREATEAFTER)
ZSEEK64(zi->z_filefunc,zi->filestream,0,SEEK_END);
zi->begin_pos = ZTELL64(zi->z_filefunc,zi->filestream);
zi->in_opened_file_inzip = 0;
zi->ci.stream_initialised = 0;
zi->number_entry = 0;
zi->add_position_when_writing_offset = 0;
init_linkedlist(&(zi->central_dir));
/* now we add file in a zipfile */
# ifndef NO_ADDFILEINEXISTINGZIP
ziinit.globalcomment = NULL;
zi->globalcomment = NULL;
if (append == APPEND_STATUS_ADDINZIP)
{
// Read and Cache Central Directory Records
err = LoadCentralDirectoryRecord(&ziinit);
err = LoadCentralDirectoryRecord(zi);
}
if (globalcomment)
{
*globalcomment = ziinit.globalcomment;
*globalcomment = zi->globalcomment;
}
# endif /* !NO_ADDFILEINEXISTINGZIP*/
if (err != ZIP_OK)
{
# ifndef NO_ADDFILEINEXISTINGZIP
TRYFREE(ziinit.globalcomment);
TRYFREE(zi->globalcomment);
# endif /* !NO_ADDFILEINEXISTINGZIP*/
TRYFREE(zi);
return NULL;
}
else
{
*zi = ziinit;
return (zipFile)zi;
}
}