Skip to content

Commit 9d3cbc6

Browse files
committed
Version 1.22.0 for libzip 1.10.0
- add new error macros (ER_DATA_LENGTH and ER_NOT_ALLOWED) with libzip >= 1.10.0 - add new archive global flags (ER_AFL_*) with libzip >= 1.10.0 - add ZipArchive::setArchiveFlag and ZipArchive::getArchiveFlag methods
1 parent 8105fb1 commit 9d3cbc6

18 files changed

+533
-10
lines changed

package.xml

+6-2
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@
1616
<email>[email protected]</email>
1717
<active>yes</active>
1818
</lead>
19-
<date>2022-09-16</date>
19+
<date>2023-06-26</date>
2020
<version>
21-
<release>1.21.2dev</release>
21+
<release>1.22.0</release>
2222
<api>2.9.0</api>
2323
</version>
2424
<stability>
@@ -28,6 +28,9 @@
2828
<license>PHP 3.01</license>
2929
<notes>
3030
- compatibility with 8.3
31+
- add new error macros (ER_DATA_LENGTH and ER_NOT_ALLOWED) with libzip >= 1.10.0
32+
- add new archive global flags (ER_AFL_*) with libzip >= 1.10.0
33+
- add ZipArchive::setArchiveFlag and ZipArchive::getArchiveFlag methods
3134
</notes>
3235
<contents>
3336
<dir name="/">
@@ -94,6 +97,7 @@
9497
<file name="oo_addglob.phpt" role="test"/>
9598
<file name="oo_addglob2.phpt" role="test"/>
9699
<file name="oo_addpattern.phpt" role="test"/>
100+
<file name="oo_archive_flag.phpt" role="test"/>
97101
<file name="oo_cancel.phpt" role="test"/>
98102
<file name="oo_close.phpt" role="test"/>
99103
<file name="oo_count.phpt" role="test"/>

php5/php_zip.c

+65
Original file line numberDiff line numberDiff line change
@@ -2350,6 +2350,40 @@ static ZIPARCHIVE_METHOD(getArchiveComment)
23502350
}
23512351
/* }}} */
23522352

2353+
PHP_METHOD(ZipArchive, setArchiveFlag)
2354+
{
2355+
struct zip *intern;
2356+
zval *self = getThis();
2357+
long flag, value;
2358+
2359+
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &flag, &value) == FAILURE) {
2360+
return;
2361+
}
2362+
2363+
ZIP_FROM_OBJECT(intern, self);
2364+
2365+
if (zip_set_archive_flag(intern, flag, (int)value)) {
2366+
RETURN_FALSE;
2367+
} else {
2368+
RETURN_TRUE;
2369+
}
2370+
}
2371+
2372+
PHP_METHOD(ZipArchive, getArchiveFlag)
2373+
{
2374+
struct zip *intern;
2375+
zval *self = getThis();
2376+
long flag, flags = 0;
2377+
2378+
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|l", &flag, &flags) == FAILURE) {
2379+
return;
2380+
}
2381+
2382+
ZIP_FROM_OBJECT(intern, self);
2383+
2384+
RETURN_LONG(zip_get_archive_flag(intern, flag, flags));
2385+
}
2386+
23532387
/* {{{ proto bool ZipArchive::setCommentName(string name, string comment)
23542388
Set or remove (NULL/'') the comment of an entry using its Name */
23552389
static ZIPARCHIVE_METHOD(setCommentName)
@@ -3695,6 +3729,16 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_setcompindex, 0, 0, 2)
36953729
ZEND_END_ARG_INFO()
36963730
/* }}} */
36973731

3732+
ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_setarchiveflag, 0, 0, 2)
3733+
ZEND_ARG_INFO(0, flag)
3734+
ZEND_ARG_INFO(0, value)
3735+
ZEND_END_ARG_INFO()
3736+
3737+
ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_getarchiveflag, 0, 0, 1)
3738+
ZEND_ARG_INFO(0, flag)
3739+
ZEND_ARG_INFO(0, flags)
3740+
ZEND_END_ARG_INFO()
3741+
36983742
/* {{{ ze_zip_object_class_functions */
36993743
static const zend_function_entry zip_class_functions[] = {
37003744
ZIPARCHIVE_ME(open, arginfo_ziparchive_open, ZEND_ACC_PUBLIC)
@@ -3759,6 +3803,8 @@ static const zend_function_entry zip_class_functions[] = {
37593803
ZIPARCHIVE_ME(isCompressionMethodSupported, arginfo_ziparchive_method_supported, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC)
37603804
ZIPARCHIVE_ME(isEncryptionMethodSupported, arginfo_ziparchive_method_supported, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC)
37613805
#endif
3806+
ZIPARCHIVE_ME(setArchiveFlag, arginfo_ziparchive_setarchiveflag, ZEND_ACC_PUBLIC)
3807+
ZIPARCHIVE_ME(getArchiveFlag, arginfo_ziparchive_getarchiveflag, ZEND_ACC_PUBLIC)
37623808
{NULL, NULL, NULL}
37633809
};
37643810
/* }}} */
@@ -3890,6 +3936,25 @@ static PHP_MINIT_FUNCTION(zip)
38903936
#ifdef ZIP_ER_CANCELLED
38913937
REGISTER_ZIP_CLASS_CONST_LONG("ER_CANCELLED", ZIP_ER_CANCELLED); /* N Operation cancelled */
38923938
#endif
3939+
/* since 1.10.0 */
3940+
#ifdef ZIP_ER_DATA_LENGTH
3941+
REGISTER_ZIP_CLASS_CONST_LONG("ER_DATA_LENGTH", ZIP_ER_DATA_LENGTH); /* N Unexpected length of data */
3942+
#endif
3943+
#ifdef ZIP_ER_NOT_ALLOWED
3944+
REGISTER_ZIP_CLASS_CONST_LONG("ER_NOT_ALLOWED", ZIP_ER_NOT_ALLOWED); /* Not allowed in torrentzip */
3945+
#endif
3946+
#ifdef ZIP_AFL_RDONLY
3947+
REGISTER_ZIP_CLASS_CONST_LONG("AFL_RDONLY", ZIP_AFL_RDONLY); /* read only -- cannot be cleared */
3948+
#endif
3949+
#ifdef ZIP_AFL_IS_TORRENTZIP
3950+
REGISTER_ZIP_CLASS_CONST_LONG("AFL_IS_TORRENTZIP", ZIP_AFL_IS_TORRENTZIP); /* current archive is torrentzipped */
3951+
#endif
3952+
#ifdef ZIP_AFL_WANT_TORRENTZIP
3953+
REGISTER_ZIP_CLASS_CONST_LONG("AFL_WANT_TORRENTZIP", ZIP_AFL_WANT_TORRENTZIP); /* write archive in torrentzip format */
3954+
#endif
3955+
#ifdef ZIP_AFL_CREATE_OR_KEEP_FILE_FOR_EMPTY_ARCHIVE
3956+
REGISTER_ZIP_CLASS_CONST_LONG("AFL_CREATE_OR_KEEP_FILE_FOR_EMPTY_ARCHIVE", ZIP_AFL_CREATE_OR_KEEP_FILE_FOR_EMPTY_ARCHIVE); /* don't remove file if archive is empty */
3957+
#endif
38933958

38943959
#ifdef ZIP_OPSYS_DEFAULT
38953960
REGISTER_ZIP_CLASS_CONST_LONG("OPSYS_DOS", ZIP_OPSYS_DOS);

php5/php_zip.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ extern zend_module_entry zip_module_entry;
3333
#define ZIP_OVERWRITE ZIP_TRUNCATE
3434
#endif
3535

36-
#define PHP_ZIP_VERSION "1.21.2-dev"
36+
#define PHP_ZIP_VERSION "1.22.0"
3737

3838
/* {{{ ZIP_OPENBASEDIR_CHECKPATH(filename) */
3939
#define ZIP_OPENBASEDIR_CHECKPATH(filename) \

php7/php_zip.c

+65
Original file line numberDiff line numberDiff line change
@@ -2248,6 +2248,40 @@ static ZIPARCHIVE_METHOD(getArchiveComment)
22482248
}
22492249
/* }}} */
22502250

2251+
PHP_METHOD(ZipArchive, setArchiveFlag)
2252+
{
2253+
struct zip *intern;
2254+
zval *self = getThis();
2255+
zend_long flag, value;
2256+
2257+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "ll", &flag, &value) == FAILURE) {
2258+
return;
2259+
}
2260+
2261+
ZIP_FROM_OBJECT(intern, self);
2262+
2263+
if (zip_set_archive_flag(intern, flag, (int)value)) {
2264+
RETURN_FALSE;
2265+
} else {
2266+
RETURN_TRUE;
2267+
}
2268+
}
2269+
2270+
PHP_METHOD(ZipArchive, getArchiveFlag)
2271+
{
2272+
struct zip *intern;
2273+
zval *self = getThis();
2274+
zend_long flag, flags = 0;
2275+
2276+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "l|l", &flag, &flags) == FAILURE) {
2277+
return;
2278+
}
2279+
2280+
ZIP_FROM_OBJECT(intern, self);
2281+
2282+
RETURN_LONG(zip_get_archive_flag(intern, flag, flags));
2283+
}
2284+
22512285
/* {{{ proto bool ZipArchive::setCommentName(string name, string comment)
22522286
Set or remove (NULL/'') the comment of an entry using its Name */
22532287
static ZIPARCHIVE_METHOD(setCommentName)
@@ -3587,6 +3621,16 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_setcompindex, 0, 0, 2)
35873621
ZEND_ARG_INFO(0, compflags)
35883622
ZEND_END_ARG_INFO()
35893623

3624+
ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_setarchiveflag, 0, 0, 2)
3625+
ZEND_ARG_INFO(0, flag)
3626+
ZEND_ARG_INFO(0, value)
3627+
ZEND_END_ARG_INFO()
3628+
3629+
ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_getarchiveflag, 0, 0, 1)
3630+
ZEND_ARG_INFO(0, flag)
3631+
ZEND_ARG_INFO(0, flags)
3632+
ZEND_END_ARG_INFO()
3633+
35903634
/* {{{ ze_zip_object_class_functions */
35913635
static const zend_function_entry zip_class_functions[] = {
35923636
ZIPARCHIVE_ME(open, arginfo_ziparchive_open, ZEND_ACC_PUBLIC)
@@ -3651,6 +3695,8 @@ static const zend_function_entry zip_class_functions[] = {
36513695
ZIPARCHIVE_ME(isCompressionMethodSupported, arginfo_ziparchive_method_supported, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC)
36523696
ZIPARCHIVE_ME(isEncryptionMethodSupported, arginfo_ziparchive_method_supported, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC)
36533697
#endif
3698+
ZIPARCHIVE_ME(setArchiveFlag, arginfo_ziparchive_setarchiveflag, ZEND_ACC_PUBLIC)
3699+
ZIPARCHIVE_ME(getArchiveFlag, arginfo_ziparchive_getarchiveflag, ZEND_ACC_PUBLIC)
36543700
PHP_FE_END
36553701
};
36563702
/* }}} */
@@ -3790,6 +3836,25 @@ static PHP_MINIT_FUNCTION(zip)
37903836
#ifdef ZIP_ER_CANCELLED
37913837
REGISTER_ZIP_CLASS_CONST_LONG("ER_CANCELLED", ZIP_ER_CANCELLED); /* N Operation cancelled */
37923838
#endif
3839+
/* since 1.10.0 */
3840+
#ifdef ZIP_ER_DATA_LENGTH
3841+
REGISTER_ZIP_CLASS_CONST_LONG("ER_DATA_LENGTH", ZIP_ER_DATA_LENGTH); /* N Unexpected length of data */
3842+
#endif
3843+
#ifdef ZIP_ER_NOT_ALLOWED
3844+
REGISTER_ZIP_CLASS_CONST_LONG("ER_NOT_ALLOWED", ZIP_ER_NOT_ALLOWED); /* Not allowed in torrentzip */
3845+
#endif
3846+
#ifdef ZIP_AFL_RDONLY
3847+
REGISTER_ZIP_CLASS_CONST_LONG("AFL_RDONLY", ZIP_AFL_RDONLY); /* read only -- cannot be cleared */
3848+
#endif
3849+
#ifdef ZIP_AFL_IS_TORRENTZIP
3850+
REGISTER_ZIP_CLASS_CONST_LONG("AFL_IS_TORRENTZIP", ZIP_AFL_IS_TORRENTZIP); /* current archive is torrentzipped */
3851+
#endif
3852+
#ifdef ZIP_AFL_WANT_TORRENTZIP
3853+
REGISTER_ZIP_CLASS_CONST_LONG("AFL_WANT_TORRENTZIP", ZIP_AFL_WANT_TORRENTZIP); /* write archive in torrentzip format */
3854+
#endif
3855+
#ifdef ZIP_AFL_CREATE_OR_KEEP_FILE_FOR_EMPTY_ARCHIVE
3856+
REGISTER_ZIP_CLASS_CONST_LONG("AFL_CREATE_OR_KEEP_FILE_FOR_EMPTY_ARCHIVE", ZIP_AFL_CREATE_OR_KEEP_FILE_FOR_EMPTY_ARCHIVE); /* don't remove file if archive is empty */
3857+
#endif
37933858

37943859
#ifdef ZIP_OPSYS_DEFAULT
37953860
REGISTER_ZIP_CLASS_CONST_LONG("OPSYS_DOS", ZIP_OPSYS_DOS);

php7/php_zip.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ extern zend_module_entry zip_module_entry;
3333
#define ZIP_OVERWRITE ZIP_TRUNCATE
3434
#endif
3535

36-
#define PHP_ZIP_VERSION "1.21.2-dev"
36+
#define PHP_ZIP_VERSION "1.22.0"
3737

3838
#define ZIP_OPENBASEDIR_CHECKPATH(filename) php_check_open_basedir(filename)
3939

php73/php_zip.c

+65
Original file line numberDiff line numberDiff line change
@@ -2251,6 +2251,40 @@ static ZIPARCHIVE_METHOD(getArchiveComment)
22512251
}
22522252
/* }}} */
22532253

2254+
PHP_METHOD(ZipArchive, setArchiveFlag)
2255+
{
2256+
struct zip *intern;
2257+
zval *self = getThis();
2258+
zend_long flag, value;
2259+
2260+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "ll", &flag, &value) == FAILURE) {
2261+
return;
2262+
}
2263+
2264+
ZIP_FROM_OBJECT(intern, self);
2265+
2266+
if (zip_set_archive_flag(intern, flag, (int)value)) {
2267+
RETURN_FALSE;
2268+
} else {
2269+
RETURN_TRUE;
2270+
}
2271+
}
2272+
2273+
PHP_METHOD(ZipArchive, getArchiveFlag)
2274+
{
2275+
struct zip *intern;
2276+
zval *self = getThis();
2277+
zend_long flag, flags = 0;
2278+
2279+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "l|l", &flag, &flags) == FAILURE) {
2280+
return;
2281+
}
2282+
2283+
ZIP_FROM_OBJECT(intern, self);
2284+
2285+
RETURN_LONG(zip_get_archive_flag(intern, flag, flags));
2286+
}
2287+
22542288
/* {{{ proto bool ZipArchive::setCommentName(string name, string comment)
22552289
Set or remove (NULL/'') the comment of an entry using its Name */
22562290
static ZIPARCHIVE_METHOD(setCommentName)
@@ -3587,6 +3621,16 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_setcompindex, 0, 0, 2)
35873621
ZEND_ARG_INFO(0, compflags)
35883622
ZEND_END_ARG_INFO()
35893623

3624+
ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_setarchiveflag, 0, 0, 2)
3625+
ZEND_ARG_INFO(0, flag)
3626+
ZEND_ARG_INFO(0, value)
3627+
ZEND_END_ARG_INFO()
3628+
3629+
ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_getarchiveflag, 0, 0, 1)
3630+
ZEND_ARG_INFO(0, flag)
3631+
ZEND_ARG_INFO(0, flags)
3632+
ZEND_END_ARG_INFO()
3633+
35903634
/* {{{ ze_zip_object_class_functions */
35913635
static const zend_function_entry zip_class_functions[] = {
35923636
ZIPARCHIVE_ME(open, arginfo_ziparchive_open, ZEND_ACC_PUBLIC)
@@ -3651,6 +3695,8 @@ static const zend_function_entry zip_class_functions[] = {
36513695
ZIPARCHIVE_ME(isCompressionMethodSupported, arginfo_ziparchive_method_supported, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC)
36523696
ZIPARCHIVE_ME(isEncryptionMethodSupported, arginfo_ziparchive_method_supported, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC)
36533697
#endif
3698+
ZIPARCHIVE_ME(setArchiveFlag, arginfo_ziparchive_setarchiveflag, ZEND_ACC_PUBLIC)
3699+
ZIPARCHIVE_ME(getArchiveFlag, arginfo_ziparchive_getarchiveflag, ZEND_ACC_PUBLIC)
36543700
PHP_FE_END
36553701
};
36563702
/* }}} */
@@ -3790,6 +3836,25 @@ static PHP_MINIT_FUNCTION(zip)
37903836
#ifdef ZIP_ER_CANCELLED
37913837
REGISTER_ZIP_CLASS_CONST_LONG("ER_CANCELLED", ZIP_ER_CANCELLED); /* N Operation cancelled */
37923838
#endif
3839+
/* since 1.10.0 */
3840+
#ifdef ZIP_ER_DATA_LENGTH
3841+
REGISTER_ZIP_CLASS_CONST_LONG("ER_DATA_LENGTH", ZIP_ER_DATA_LENGTH); /* N Unexpected length of data */
3842+
#endif
3843+
#ifdef ZIP_ER_NOT_ALLOWED
3844+
REGISTER_ZIP_CLASS_CONST_LONG("ER_NOT_ALLOWED", ZIP_ER_NOT_ALLOWED); /* Not allowed in torrentzip */
3845+
#endif
3846+
#ifdef ZIP_AFL_RDONLY
3847+
REGISTER_ZIP_CLASS_CONST_LONG("AFL_RDONLY", ZIP_AFL_RDONLY); /* read only -- cannot be cleared */
3848+
#endif
3849+
#ifdef ZIP_AFL_IS_TORRENTZIP
3850+
REGISTER_ZIP_CLASS_CONST_LONG("AFL_IS_TORRENTZIP", ZIP_AFL_IS_TORRENTZIP); /* current archive is torrentzipped */
3851+
#endif
3852+
#ifdef ZIP_AFL_WANT_TORRENTZIP
3853+
REGISTER_ZIP_CLASS_CONST_LONG("AFL_WANT_TORRENTZIP", ZIP_AFL_WANT_TORRENTZIP); /* write archive in torrentzip format */
3854+
#endif
3855+
#ifdef ZIP_AFL_CREATE_OR_KEEP_FILE_FOR_EMPTY_ARCHIVE
3856+
REGISTER_ZIP_CLASS_CONST_LONG("AFL_CREATE_OR_KEEP_FILE_FOR_EMPTY_ARCHIVE", ZIP_AFL_CREATE_OR_KEEP_FILE_FOR_EMPTY_ARCHIVE); /* don't remove file if archive is empty */
3857+
#endif
37933858

37943859
#ifdef ZIP_OPSYS_DEFAULT
37953860
REGISTER_ZIP_CLASS_CONST_LONG("OPSYS_DOS", ZIP_OPSYS_DOS);

php73/php_zip.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ extern zend_module_entry zip_module_entry;
3333
#define ZIP_OVERWRITE ZIP_TRUNCATE
3434
#endif
3535

36-
#define PHP_ZIP_VERSION "1.21.2-dev"
36+
#define PHP_ZIP_VERSION "1.22.0"
3737

3838
#define ZIP_OPENBASEDIR_CHECKPATH(filename) php_check_open_basedir(filename)
3939

0 commit comments

Comments
 (0)