From: Greg Beaver Date: Sat, 13 Sep 2008 20:57:09 +0000 (+0000) Subject: fix Bug #46060: addEmptyDir() breaks X-Git-Tag: BEFORE_NS_RULES_CHANGE~398 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=760172fcee4681796ef253e0b0074442ffefcc8a;p=php fix Bug #46060: addEmptyDir() breaks --- diff --git a/ext/phar/tests/bug46060.phpt b/ext/phar/tests/bug46060.phpt new file mode 100644 index 0000000000..7edae4d43c --- /dev/null +++ b/ext/phar/tests/bug46060.phpt @@ -0,0 +1,30 @@ +--TEST-- +Phar: Bug #46060: addEmptyDir() breaks +--SKIPIF-- + + +--FILE-- +addEmptyDir('blah/'); +$phar->addFromString('test/', ''); + +copy($fname, $fname2); +$phar = new PharData($fname2); + +var_dump($phar['blah']->isDir(), $phar['test']->isDir()); +?> +===DONE=== +--CLEAN-- + +--EXPECT-- +bool(true) +bool(false) +===DONE=== diff --git a/ext/phar/util.c b/ext/phar/util.c index 0723cd2508..814a3cbd17 100644 --- a/ext/phar/util.c +++ b/ext/phar/util.c @@ -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)) {