]> granicus.if.org Git - php/commitdiff
fix Bug #46060: addEmptyDir() breaks
authorGreg Beaver <cellog@php.net>
Sat, 13 Sep 2008 20:57:09 +0000 (20:57 +0000)
committerGreg Beaver <cellog@php.net>
Sat, 13 Sep 2008 20:57:09 +0000 (20:57 +0000)
ext/phar/tests/bug46060.phpt [new file with mode: 0644]
ext/phar/util.c

diff --git a/ext/phar/tests/bug46060.phpt b/ext/phar/tests/bug46060.phpt
new file mode 100644 (file)
index 0000000..7edae4d
--- /dev/null
@@ -0,0 +1,30 @@
+--TEST--
+Phar: Bug #46060: addEmptyDir() breaks
+--SKIPIF--
+<?php if (!extension_loaded("phar")) die("skip"); ?>
+<?php if (getenv('SKIP_SLOW_TESTS')) die('skip'); ?>
+--FILE--
+<?php
+$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.tar';
+$fname2 = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.2.tar';
+
+$phar = new PharData($fname);
+$phar->addEmptyDir('blah/');
+$phar->addFromString('test/', '');
+
+copy($fname, $fname2);
+$phar = new PharData($fname2);
+
+var_dump($phar['blah']->isDir(), $phar['test']->isDir());
+?>
+===DONE===
+--CLEAN--
+<?php 
+unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.tar');
+unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.2.tar');
+__HALT_COMPILER();
+?>
+--EXPECT--
+bool(true)
+bool(false)
+===DONE===
index 0723cd2508fb9046c55c7aad12e60716ba14cd51..814a3cbd17417843c03024a14f368dc1a0ba7a28 100644 (file)
@@ -785,13 +785,13 @@ phar_entry_data *phar_get_or_create_entry_data(char *fname, int fname_len, char
        if (allow_dir == 2) {
                etemp.is_dir = 1;
                etemp.flags = etemp.old_flags = PHAR_ENT_PERM_DEF_DIR;
-               if (is_dir) {
-                       etemp.filename_len--; /* strip trailing / */
-                       path_len--;
-               }
        } else {
                etemp.flags = etemp.old_flags = PHAR_ENT_PERM_DEF_FILE;
        }
+       if (is_dir) {
+               etemp.filename_len--; /* strip trailing / */
+               path_len--;
+       }
 
        phar_add_virtual_dirs(phar, path, path_len TSRMLS_CC);
        etemp.is_modified = 1;
@@ -803,7 +803,7 @@ phar_entry_data *phar_get_or_create_entry_data(char *fname, int fname_len, char
 
        if (phar->is_tar) {
                etemp.is_tar = phar->is_tar;
-               etemp.tar_type = TAR_FILE;
+               etemp.tar_type = etemp.is_dir ? TAR_DIR : TAR_FILE;
        }
 
        if (FAILURE == zend_hash_add(&phar->manifest, etemp.filename, path_len, (void*)&etemp, sizeof(phar_entry_info), (void **) &entry)) {