12 Commits

Author SHA1 Message Date
Joshua Hudson
889e4293d1 podspec bump 2017-08-01 12:15:50 -07:00
Joshua Hudson
e0a74bddd4 fix crash if device is out of space instead of returning error. Thanks @markonikolvski #361 2017-08-01 10:17:37 -07:00
Joshua Hudson
804e9e5a6f Merge pull request #355 from Jnis/patch-2
Unzipping when no space; Stop unzipping when failed;
2017-07-24 16:03:45 -07:00
Joshua Hudson
6eafde0cfb Merge pull request #357 from Coeur/ARC
we do not support MRC
2017-07-24 16:02:52 -07:00
Joshua Hudson
5da2714fb4 Merge pull request #356 from Coeur/compatibility_with_7-zip
Fix compatibility with 7-zip/WinRAR (regression in SSZipArchive 2.0.0)
2017-07-24 16:00:20 -07:00
Antoine Cœur
42c8c9e8c9 Merge branch 'patch-3' into patch-2
* patch-3:
  Added filed to write file error
2017-07-24 20:25:13 +08:00
Antoine Cœur
c8a6eedf78 removed comment 2017-07-24 20:19:49 +08:00
Antoine Cœur
f5b2feed1c we do not support MRC 2017-07-24 20:14:06 +08:00
Antoine Cœur
c84f6e84e2 Fix compatibility with 7-zip/WinRAR (regression in SSZipArchive 2.0.0) 2017-07-24 19:40:49 +08:00
Jnis
a0a649e28b Added filed to write file error 2017-07-24 10:16:54 +04:00
Jnis
0516ff2f90 Unzipping when no space; Stop unzipping when failed; 2017-07-24 10:07:37 +04:00
Antoine Cœur
9562f0a48e Podfile and Acknowledgments 2017-07-20 20:52:11 +08:00
12 changed files with 44 additions and 91 deletions

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

View File

@@ -17,10 +17,11 @@ ZipArchive is a simple utility class for zipping and unzipping files on iOS and
*The main release branch is configured to support Objective C and Swift 3. There is a 'swift23' branch which is a tied to a older 1.x release and will not be upgraded. Xcode 8.3+ removes support for Swift 2.3*
### CocoaPods
`pod install SSZipArchive`
In your Podfile:
`pod 'SSZipArchive'`
### Carthage
In your Cartfile:
`github "ZipArchive/ZipArchive"`
### Manual
@@ -54,8 +55,11 @@ SSZipArchive.unzipFileAtPath(zipPath, toDestination: unzipPath)
## License
SSZipArchive is protected under the [MIT license](https://github.com/samsoffes/ssziparchive/raw/master/LICENSE) and our slightly modified version of [Minizip](http://www.winimage.com/zLibDll/minizip.html) 1.1 is licensed under the [Zlib license](http://www.zlib.net/zlib_license.html).
SSZipArchive is protected under the [MIT license](https://github.com/samsoffes/ssziparchive/raw/master/LICENSE) and our slightly modified version of [Minizip](https://github.com/nmoinvaz/minizip) 1.1 is licensed under the [Zlib license](http://www.zlib.net/zlib_license.html).
## Acknowledgments
Big thanks to [aish](http://code.google.com/p/ziparchive) for creating [ZipArchive](http://code.google.com/p/ziparchive). The project that inspired SSZipArchive. Thank you [@randomsequence](https://github.com/randomsequence) for implementing the creation support tech and to [@johnezang](https://github.com/johnezang) for all his amazing help along the way.
* Big thanks to [aish](http://code.google.com/p/ziparchive) for creating [ZipArchive](http://code.google.com/p/ziparchive). The project that inspired SSZipArchive.
* Thank you [@soffes](https://github.com/soffes) for the actual name of SSZipArchive.
* Thank you [@randomsequence](https://github.com/randomsequence) for implementing the creation support tech.
* Thank you [@johnezang](https://github.com/johnezang) for all his amazing help along the way.

View File

@@ -1,6 +1,6 @@
Pod::Spec.new do |s|
s.name = 'SSZipArchive'
s.version = '2.0.1'
s.version = '2.0.3'
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'

View File

@@ -20,6 +20,7 @@ typedef NS_ENUM(NSInteger, SSZipArchiveErrorCode) {
SSZipArchiveErrorCodeFailedOpenFileInZip = -2,
SSZipArchiveErrorCodeFileInfoNotLoadable = -3,
SSZipArchiveErrorCodeFileContentNotReadable = -4,
SSZipArchiveErrorCodeFailedToWriteFile = -5,
};
@protocol SSZipArchiveDelegate;

View File

@@ -383,7 +383,15 @@ NSString *const SSZipArchiveErrorDomain = @"SSZipArchiveErrorDomain";
FILE *fp = fopen((const char*)[fullPath fileSystemRepresentation], "wb");
while (fp) {
if (readBytes > 0) {
fwrite(buffer, readBytes, 1, fp);
if (0 == fwrite(buffer, readBytes, 1, fp)) {
if (ferror(fp)) {
NSString *message = [NSString stringWithFormat:@"Failed to write file (check your free space)"];
NSLog(@"[SSZipArchive] %@", message);
success = NO;
unzippingError = [NSError errorWithDomain:@"SSZipArchiveErrorDomain" code:SSZipArchiveErrorCodeFailedToWriteFile userInfo:@{NSLocalizedDescriptionKey: message}];
break;
}
}
} else {
break;
}
@@ -432,10 +440,6 @@ NSString *const SSZipArchiveErrorDomain = @"SSZipArchiveErrorDomain";
// Unable to set the permissions attribute
NSLog(@"[SSZipArchive] Failed to set attributes - whilst setting permissions");
}
#if !__has_feature(objc_arc)
[attrs release];
#endif
}
}
}
@@ -519,7 +523,7 @@ NSString *const SSZipArchiveErrorDomain = @"SSZipArchiveErrorDomain";
progressHandler(strPath, fileInfo, currentFileNumber, globalInfo.number_entry);
}
}
} while (ret == UNZ_OK && ret != UNZ_END_OF_LIST_OF_FILE);
} while (ret == UNZ_OK && YES == success);
// Close
unzClose(zip);
@@ -537,9 +541,6 @@ NSString *const SSZipArchiveErrorDomain = @"SSZipArchiveErrorDomain";
NSLog(@"[SSZipArchive] Error setting directory file modification date attribute: %@",err.localizedDescription);
}
}
#if !__has_feature(objc_arc)
[directoriesModificationDates release];
#endif
}
// Message delegate
@@ -602,11 +603,6 @@ NSString *const SSZipArchiveErrorDomain = @"SSZipArchiveErrorDomain";
}
success = [zipArchive close];
}
#if !__has_feature(objc_arc)
[zipArchive release];
#endif
return success;
}
@@ -666,12 +662,6 @@ NSString *const SSZipArchiveErrorDomain = @"SSZipArchiveErrorDomain";
}
success = [zipArchive close];
}
#if !__has_feature(objc_arc)
[fileManager release];
[zipArchive release];
#endif
return success;
}
@@ -685,15 +675,6 @@ NSString *const SSZipArchiveErrorDomain = @"SSZipArchiveErrorDomain";
}
#if !__has_feature(objc_arc)
- (void)dealloc
{
[_path release];
[super dealloc];
}
#endif
- (BOOL)open
{
NSAssert((_zip == NULL), @"Attempting open an archive which is already open");
@@ -925,11 +906,6 @@ NSString *const SSZipArchiveErrorDomain = @"SSZipArchiveErrorDomain";
[components setSecond:(msdosDateTime & kSecondMask) * 2];
NSDate *date = [NSDate dateWithTimeInterval:0 sinceDate:[gregorian dateFromComponents:components]];
#if !__has_feature(objc_arc)
[components release];
#endif
return date;
}

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;
}

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);
/***************************************************************************/

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 */

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);

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>

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)

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