Merge pull request #356 from Coeur/compatibility_with_7-zip

Fix compatibility with 7-zip/WinRAR (regression in SSZipArchive 2.0.0)
This commit is contained in:
Joshua Hudson
2017-07-24 16:00:20 -07:00
committed by GitHub
9 changed files with 25 additions and 53 deletions
+2 -2
View File
@@ -1,5 +1,5 @@
PODS:
- SSZipArchive (2.0.1)
- SSZipArchive (2.0.2)
DEPENDENCIES:
- SSZipArchive (from `..`)
@@ -9,7 +9,7 @@ EXTERNAL SOURCES:
:path: ".."
SPEC CHECKSUMS:
SSZipArchive: 6678776f378494909195d3f1b3f00d91e76084f9
SSZipArchive: 5fdf578dbbb60000b23439f80fa04e81d00740ee
PODFILE CHECKSUM: 7f4058a9cbc69b4e63808729577a8bb2098bc527
+1 -1
View File
@@ -1,6 +1,6 @@
Pod::Spec.new do |s|
s.name = 'SSZipArchive'
s.version = '2.0.1'
s.version = '2.0.2'
s.summary = 'Utility class for zipping and unzipping files on iOS, tvOS, watchOS, and Mac.'
s.description = 'SSZipArchive is a simple utility class for zipping and unzipping files on iOS, tvOS, watchOS, and Mac.'
s.homepage = 'https://github.com/ZipArchive/ZipArchive'
+4 -4
View File
@@ -129,8 +129,8 @@ int cryptrand(unsigned char *buf, unsigned int len)
return rlen;
}
int crypthead(const char *passwd, uint8_t *buf, int buf_size,
uint32_t *pkeys, const z_crc_t *pcrc_32_tab, uint32_t crc_for_crypting)
int crypthead(const char *passwd, uint8_t *buf, int buf_size, uint32_t *pkeys,
const z_crc_t *pcrc_32_tab, uint8_t verify1, uint8_t verify2)
{
uint8_t n = 0; /* index in random header */
uint8_t header[RAND_HEAD_LEN-2]; /* random header */
@@ -150,8 +150,8 @@ int crypthead(const char *passwd, uint8_t *buf, int buf_size,
for (n = 0; n < RAND_HEAD_LEN-2; n++)
buf[n] = (uint8_t)zencode(pkeys, pcrc_32_tab, header[n], t);
buf[n++] = (uint8_t)zencode(pkeys, pcrc_32_tab, (uint8_t)((crc_for_crypting >> 16) & 0xff), t);
buf[n++] = (uint8_t)zencode(pkeys, pcrc_32_tab, (uint8_t)((crc_for_crypting >> 24) & 0xff), t);
buf[n++] = (uint8_t)zencode(pkeys, pcrc_32_tab, verify1, t);
buf[n++] = (uint8_t)zencode(pkeys, pcrc_32_tab, verify2, t);
return n;
}
+1 -1
View File
@@ -46,7 +46,7 @@ int cryptrand(unsigned char *buf, unsigned int len);
/* Create encryption header */
int crypthead(const char *passwd, uint8_t *buf, int buf_size, uint32_t *pkeys,
const z_crc_t *pcrc_32_tab, uint32_t crc_for_crypting);
const z_crc_t *pcrc_32_tab, uint8_t verify1, uint8_t verify2);
/***************************************************************************/
-36
View File
@@ -238,42 +238,6 @@ int is_large_file(const char *path)
return (pos >= UINT32_MAX);
}
int get_file_crc(const char *path, void *buf, uint32_t size_buf, uint32_t *result_crc)
{
FILE *handle = NULL;
uint32_t calculate_crc = 0;
uint32_t size_read = 0;
int err = 0;
handle = fopen64(path, "rb");
if (handle == NULL)
{
err = -1;
}
else
{
do
{
size_read = (int)fread(buf, 1, size_buf, handle);
if ((size_read < size_buf) && (feof(handle) == 0))
{
printf("error in reading %s\n", path);
err = -1;
}
if (size_read > 0)
calculate_crc = (uint32_t)crc32(calculate_crc, buf, size_read);
}
while ((err == Z_OK) && (size_read > 0));
fclose(handle);
}
printf("file %s crc %x\n", path, calculate_crc);
*result_crc = calculate_crc;
return err;
}
void display_zpos64(uint64_t n, int size_char)
{
/* To avoid compatibility problem we do here the conversion */
-3
View File
@@ -36,9 +36,6 @@ int check_file_exists(const char *path);
/* Check to see if a file is over 4GB and needs ZIP64 extension */
int is_large_file(const char *path);
/* Calculate the CRC32 of a file, because to encrypt a file, we need known the CRC32 of the file before */
int get_file_crc(const char *path, void *buf, uint32_t size_buf, uint32_t *result_crc);
/* Print a 64-bit number for compatibility */
void display_zpos64(uint64_t n, int size_char);
+2 -2
View File
@@ -33,8 +33,8 @@
# define AES_HEADERSIZE (11)
# define AES_KEYSIZE(mode) (64 + (mode * 64))
# include "aes.h"
# include "fileenc.h"
# include "aes/aes.h"
# include "aes/fileenc.h"
#endif
#ifdef HAVE_APPLE_COMPRESSION
# include <compression.h>
+13 -2
View File
@@ -1229,11 +1229,22 @@ extern int ZEXPORT zipOpenNewFileInZip4_64(zipFile file, const char *filename, c
{
unsigned char buf_head[RAND_HEAD_LEN];
uint32_t size_head = 0;
uint8_t verify1 = 0;
uint8_t verify2 = 0;
zi->ci.pcrc_32_tab = get_crc_table();
/*init_keys(password, zi->ci.keys, zi->ci.pcrc_32_tab);*/
size_head = crypthead(password, buf_head, RAND_HEAD_LEN, zi->ci.keys, zi->ci.pcrc_32_tab, (unsigned int)crc_for_crypting);
/*
Info-ZIP modification to ZipCrypto format:
If bit 3 of the general purpose bit flag is set, it uses high byte of 16-bit File Time.
verify1 = (uint8_t)((crc_for_crypting >> 16) & 0xff);
verify2 = (uint8_t)((crc_for_crypting >> 24) & 0xff); */
verify1 = (uint8_t)((zi->ci.dos_date >> 16) & 0xff);
verify2 = (uint8_t)((zi->ci.dos_date >> 8) & 0xff);
size_head = crypthead(password, buf_head, RAND_HEAD_LEN, zi->ci.keys, zi->ci.pcrc_32_tab, verify1, verify2);
zi->ci.total_compressed += size_head;
if (ZWRITE64(zi->z_filefunc, zi->filestream, buf_head, size_head) != size_head)
+2 -2
View File
@@ -1,5 +1,5 @@
PODS:
- SSZipArchive (2.0.1)
- SSZipArchive (2.0.2)
DEPENDENCIES:
- SSZipArchive (from `..`)
@@ -9,7 +9,7 @@ EXTERNAL SOURCES:
:path: ".."
SPEC CHECKSUMS:
SSZipArchive: 6678776f378494909195d3f1b3f00d91e76084f9
SSZipArchive: 5fdf578dbbb60000b23439f80fa04e81d00740ee
PODFILE CHECKSUM: 0dc500eb72745751ccba7677de4da5534fcef36d