From b9853c4ff0dbc3611391ca71ed21e504c6a1e31a Mon Sep 17 00:00:00 2001 From: Pierre Joye Date: Wed, 12 Nov 2008 11:41:21 +0000 Subject: [PATCH] - MFH: - #14962, makes extractTo 2nd argument really optional - replace ZEND_ENGINE_2_1 by PHP_ZIP_USE_OO --- ext/zip/php_zip.c | 14 +++++++------- ext/zip/php_zip.h | 8 +++----- ext/zip/tests/bug14962.phpt | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 44 insertions(+), 12 deletions(-) create mode 100644 ext/zip/tests/bug14962.phpt diff --git a/ext/zip/php_zip.c b/ext/zip/php_zip.c index 71687a129d..8175ba7ac8 100644 --- a/ext/zip/php_zip.c +++ b/ext/zip/php_zip.c @@ -135,7 +135,7 @@ static char * php_zip_make_relative_path(char *path, int path_len) /* {{{ */ } /* }}} */ -#ifdef ZEND_ENGINE_2_1 +#ifdef PHP_ZIP_USE_OO /* {{{ php_zip_extract_file */ static int php_zip_extract_file(struct zip * za, char *dest, char *file, int file_len TSRMLS_DC) { @@ -740,7 +740,7 @@ static const zend_function_entry zip_functions[] = { /* }}} */ /* {{{ ZE2 OO definitions */ -#ifdef ZEND_ENGINE_2_1 +#ifdef PHP_ZIP_USE_OO static zend_class_entry *zip_class_entry; static zend_object_handlers zip_object_handlers; @@ -760,7 +760,7 @@ typedef struct _zip_prop_handler { #endif /* }}} */ -#ifdef ZEND_ENGINE_2_1 +#ifdef PHP_ZIP_USE_OO static void php_zip_register_prop_handler(HashTable *prop_handler, char *name, zip_read_int_t read_int_func, zip_read_const_char_t read_char_func, zip_read_const_char_from_ze_t read_char_from_obj_func, int rettype TSRMLS_DC) /* {{{ */ { zip_prop_handler hnd; @@ -1417,7 +1417,7 @@ static PHP_NAMED_FUNCTION(zif_zip_entry_compressionmethod) } /* }}} */ -#ifdef ZEND_ENGINE_2_1 +#ifdef PHP_ZIP_USE_OO /* {{{ proto mixed ZipArchive::open(string source [, int flags]) Create new zip using source uri for output, return TRUE on success or the error code */ static ZIPARCHIVE_METHOD(open) @@ -2377,7 +2377,7 @@ static ZIPARCHIVE_METHOD(extractTo) } ZIP_FROM_OBJECT(intern, this); - if (zval_files) { + if (zval_files && (Z_TYPE_P(zval_files) != IS_NULL)) { switch (Z_TYPE_P(zval_files)) { case IS_STRING: if (!php_zip_extract_file(intern, pathto, Z_STRVAL_P(zval_files), Z_STRLEN_P(zval_files) TSRMLS_CC)) { @@ -2585,7 +2585,7 @@ static const zend_function_entry zip_class_functions[] = { /* {{{ PHP_MINIT_FUNCTION */ static PHP_MINIT_FUNCTION(zip) { -#ifdef ZEND_ENGINE_2_1 +#ifdef PHP_ZIP_USE_OO zend_class_entry ce; memcpy(&zip_object_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); @@ -2668,7 +2668,7 @@ static PHP_MINIT_FUNCTION(zip) */ static PHP_MSHUTDOWN_FUNCTION(zip) { -#ifdef ZEND_ENGINE_2_1 +#ifdef PHP_ZIP_USE_OO zend_hash_destroy(&zip_prop_handlers); php_unregister_url_stream_wrapper("zip" TSRMLS_CC); #endif diff --git a/ext/zip/php_zip.h b/ext/zip/php_zip.h index 5d77ac14bd..8398c6558e 100644 --- a/ext/zip/php_zip.h +++ b/ext/zip/php_zip.h @@ -32,10 +32,8 @@ extern zend_module_entry zip_module_entry; #define PHP_ZIP_VERSION_STRING "1.8.11" -#ifndef ZEND_ENGINE_2_1 -# if (PHP_MAJOR_VERSION == 5 && PHP_MINOR_VERSION > 0) || PHP_MAJOR_VERSION == 6 -# define ZEND_ENGINE_2_1 -# endif +#if ((PHP_MAJOR_VERSION >= 5 && PHP_MINOR_VERSION >= 2) || PHP_MAJOR_VERSION >= 6) +# define PHP_ZIP_USE_OO 1 #endif #ifndef Z_SET_REFCOUNT_P @@ -68,7 +66,7 @@ typedef struct _ze_zip_read_rsrc { struct zip_stat sb; } zip_read_rsrc; -#ifdef ZEND_ENGINE_2_1 +#ifdef PHP_ZIP_USE_OO #define ZIPARCHIVE_ME(name, arg_info, flags) ZEND_FENTRY(name, c_ziparchive_ ##name, arg_info, flags) #define ZIPARCHIVE_METHOD(name) ZEND_NAMED_FUNCTION(c_ziparchive_##name) diff --git a/ext/zip/tests/bug14962.phpt b/ext/zip/tests/bug14962.phpt new file mode 100644 index 0000000000..0006fd4b68 --- /dev/null +++ b/ext/zip/tests/bug14962.phpt @@ -0,0 +1,34 @@ +--TEST-- +Bug #14962 (::extractTo second argument is not really optional) +--SKIPIF-- + +--FILE-- +open($dir . '/__14962.zip', ZIPARCHIVE::CREATE); +$za->addFromString($file, '1234'); +$za->close(); + +if (!is_file($dir . "/__14962.zip")) { + die('failed to create the archive'); +} +$za = new ZipArchive; +$za->open($dir . '/__14962.zip'); +$za->extractTo($dir, NULL); +$za->close(); + +if (is_file($fullpath)) { + unlink($fullpath); + echo "Ok"; +} +unlink($dir . '/' . '__14962.zip'); +?> +--EXPECT-- +Ok -- 2.50.1