Skip to content

Commit 46cdde2

Browse files
committed
Fix corrupt archive if uncompressed file smaller than 4 byte and file is added by mz_zip_writer_add_mem*
1 parent 3616bf8 commit 46cdde2

File tree

1 file changed

+17
-17
lines changed

1 file changed

+17
-17
lines changed

miniz_zip.c

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3186,6 +3186,17 @@ mz_bool mz_zip_writer_add_mem_ex_v2(mz_zip_archive *pZip, const char *pArchive_n
31863186
}
31873187
#endif /* #ifndef MINIZ_NO_TIME */
31883188

3189+
if (!(level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA))
3190+
{
3191+
uncomp_crc32 = (mz_uint32)mz_crc32(MZ_CRC32_INIT, (const mz_uint8 *)pBuf, buf_size);
3192+
uncomp_size = buf_size;
3193+
if (uncomp_size <= 3)
3194+
{
3195+
level = 0;
3196+
store_data_uncompressed = MZ_TRUE;
3197+
}
3198+
}
3199+
31893200
archive_name_size = strlen(pArchive_name);
31903201
if (archive_name_size > MZ_UINT16_MAX)
31913202
return mz_zip_set_error(pZip, MZ_ZIP_INVALID_FILENAME);
@@ -3301,24 +3312,13 @@ mz_bool mz_zip_writer_add_mem_ex_v2(mz_zip_archive *pZip, const char *pArchive_n
33013312
cur_archive_file_ofs += archive_name_size;
33023313
}
33033314

3304-
if (user_extra_data_len > 0)
3305-
{
3306-
if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, user_extra_data, user_extra_data_len) != user_extra_data_len)
3307-
return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED);
3308-
3309-
cur_archive_file_ofs += user_extra_data_len;
3310-
}
3315+
if (user_extra_data_len > 0)
3316+
{
3317+
if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, user_extra_data, user_extra_data_len) != user_extra_data_len)
3318+
return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED);
33113319

3312-
if (!(level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA))
3313-
{
3314-
uncomp_crc32 = (mz_uint32)mz_crc32(MZ_CRC32_INIT, (const mz_uint8 *)pBuf, buf_size);
3315-
uncomp_size = buf_size;
3316-
if (uncomp_size <= 3)
3317-
{
3318-
level = 0;
3319-
store_data_uncompressed = MZ_TRUE;
3320-
}
3321-
}
3320+
cur_archive_file_ofs += user_extra_data_len;
3321+
}
33223322

33233323
if (store_data_uncompressed)
33243324
{

0 commit comments

Comments
 (0)