]> granicus.if.org Git - php/commitdiff
- MFH:
authorPierre Joye <pajoye@php.net>
Wed, 12 Nov 2008 11:41:21 +0000 (11:41 +0000)
committerPierre Joye <pajoye@php.net>
Wed, 12 Nov 2008 11:41:21 +0000 (11:41 +0000)
 - #14962, makes extractTo 2nd argument really optional
 - replace ZEND_ENGINE_2_1 by PHP_ZIP_USE_OO

ext/zip/php_zip.c
ext/zip/php_zip.h
ext/zip/tests/bug14962.phpt [new file with mode: 0644]

index 71687a129d3e6f4bb12db1b65bb9cae2d7ca9219..8175ba7ac8e4f6eaf6c832f0c4bade2ce70e7ee0 100644 (file)
@@ -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
index 5d77ac14bde5e537e4361855e0909a50dbfce35a..8398c6558ebba8b731dbb62c0fb1f888c4b46ddb 100644 (file)
@@ -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 (file)
index 0000000..0006fd4
--- /dev/null
@@ -0,0 +1,34 @@
+--TEST--
+Bug #14962 (::extractTo second argument is not really optional)
+--SKIPIF--
+<?php
+/* $Id$ */
+if(!extension_loaded('zip')) die('skip');
+?>
+--FILE--
+<?php
+
+$dir = dirname(__FILE__);
+$file = '__tmp14962.txt';
+$fullpath = $dir . '/' . $file;
+$za = new ZipArchive;
+$za->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