}
efree(entry.filename);
MAPPHAR_FAIL("zlib extension is required for gz compressed .phar file \"%s\"");
+#else
+ if (!PHAR_G(has_zlib)) {
+ if (entry.metadata) {
+ zval_ptr_dtor(&entry.metadata);
+ }
+ efree(entry.filename);
+ MAPPHAR_FAIL("zlib extension is required for gz compressed .phar file \"%s\"");
+ }
#endif
break;
case PHAR_ENT_COMPRESSED_BZ2:
efree(entry.filename);
MAPPHAR_FAIL("bz2 extension is required for bzip2 compressed .phar file \"%s\"");
#else
- if (!zend_hash_exists(&module_registry, "bz2", sizeof("bz2"))) {
+ if (!PHAR_G(has_bz2)) {
+ if (entry.metadata) {
+ zval_ptr_dtor(&entry.metadata);
+ }
+ efree(entry.filename);
MAPPHAR_FAIL("bz2 extension is required for bzip2 compressed .phar file \"%s\"");
}
#endif
ZEND_INIT_MODULE_GLOBALS(phar, php_phar_init_globals_module, NULL);
REGISTER_INI_ENTRIES();
+ PHAR_G(has_gnupg) = zend_hash_exists(&module_registry, "gnupg", sizeof("gnupg"));
+ PHAR_G(has_bz2) = zend_hash_exists(&module_registry, "bz2", sizeof("bz2"));
+ PHAR_G(has_zlib) = zend_hash_exists(&module_registry, "zlib", sizeof("zlib"));
phar_object_init(TSRMLS_C);
return php_register_url_stream_wrapper("phar", &php_stream_phar_wrapper TSRMLS_CC);
php_info_print_table_row(2, "Phar EXT version", PHAR_EXT_VERSION_STR);
php_info_print_table_row(2, "Phar API version", PHAR_API_VERSION_STR);
php_info_print_table_row(2, "CVS revision", "$Revision$");
- php_info_print_table_row(2, "gzip compression",
#if HAVE_ZLIB
- "enabled");
+ if (PHAR_G(has_zlib)) {
+ php_info_print_table_row(2, "gzip compression",
+ "enabled");
+ } else {
+ php_info_print_table_row(2, "gzip compression",
+ "disabled");
+ }
#else
+ php_info_print_table_row(2, "gzip compression",
"disabled");
#endif
#if HAVE_BZ2
- if (!zend_hash_exists(&module_registry, "bz2", sizeof("bz2"))) {
+ if (PHAR_G(has_bz2)) {
php_info_print_table_row(2, "bzip2 compression",
"disabled");
} else {
"disabled");
#endif
#if HAVE_GNUPGLIB
- if (zend_hash_exists(&module_registry, "gnupg", sizeof("gnupg"))) {
+ if (PHAR_G(has_gnupg)) {
php_info_print_table_row(2, "GPG signature",
"enabled");
} else {
*/
static zend_module_dep phar_deps[] = {
#if HAVE_ZLIB
- ZEND_MOD_REQUIRED("zlib")
+ ZEND_MOD_OPTIONAL("zlib")
#endif
#if HAVE_BZ2
ZEND_MOD_OPTIONAL("bz2")
#endif
-#if HAVE_GNUPG
+#if HAVE_GNUPGLIB
ZEND_MOD_OPTIONAL("gnupg")
#endif
#if HAVE_SPL
switch (method) {
case PHAR_ENT_COMPRESSED_GZ:
#if HAVE_ZLIB
- RETURN_TRUE;
+ if (PHAR_G(has_zlib)) {
+ RETURN_TRUE;
+ } else {
+ RETURN_FALSE;
+ }
#else
RETURN_FALSE;
#endif
case PHAR_ENT_COMPRESSED_BZ2:
#if HAVE_BZ2
- if (zend_hash_exists(&module_registry, "bz2", sizeof("bz2"))) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
+ if (PHAR_G(has_bz2)) {
+ RETURN_TRUE;
+ } else {
+ RETURN_FALSE;
+ }
#else
RETURN_FALSE;
#endif
default:
#if HAVE_ZLIB || HAVE_BZ2
- if (zend_hash_exists(&module_registry, "bz2", sizeof("bz2")) || HAVE_ZLIB) {
+ if (PHAR_G(has_zlib) || PHAR_G(has_bz2)) {
RETURN_TRUE;
} else {
RETURN_FALSE;
{
array_init(return_value);
-#if !HAVE_ZLIB
- add_next_index_stringl(return_value, "GZ", 2, 1);
+#if HAVE_ZLIB
+ if (PHAR_G(has_zlib)) {
+ add_next_index_stringl(return_value, "GZ", 2, 1);
+ }
#endif
-#if !HAVE_BZ2
- if (zend_hash_exists(&module_registry, "bz2", sizeof("bz2"))) {
+#if HAVE_BZ2
+ if (PHAR_G(has_bz2)) {
add_next_index_stringl(return_value, "BZIP2", 5, 1);
}
#endif
return ZEND_HASH_APPLY_KEEP;
}
#if !HAVE_BZ2
- if (zend_hash_exists(&module_registry, "bz2", sizeof("bz2"))) {
+ if (entry->flags & PHAR_ENT_COMPRESSED_BZ2) {
+ *(int *) argument = 0;
+ }
+#else
+ if (!PHAR_G(has_bz2)) {
if (entry->flags & PHAR_ENT_COMPRESSED_BZ2) {
*(int *) argument = 0;
}
if (entry->flags & PHAR_ENT_COMPRESSED_GZ) {
*(int *) argument = 0;
}
+#else
+ if (!PHAR_G(has_zlib)) {
+ if (entry->flags & PHAR_ENT_COMPRESSED_GZ) {
+ *(int *) argument = 0;
+ }
+ }
#endif
return ZEND_HASH_APPLY_KEEP;
}
"Phar is readonly, cannot change compression");
}
#if HAVE_ZLIB
+ if (!PHAR_G(has_zlib)) {
+ zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC,
+ "Cannot compress with Gzip compression, zlib extension is not enabled");
+ }
if (!pharobj_cancompress(&phar_obj->arc.archive->manifest TSRMLS_CC)) {
zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC,
"Cannot compress all files as Gzip, some are compressed as bzip2 and cannot be uncompressed");
"Phar is readonly, cannot change compression");
}
#if HAVE_BZ2
- if (!zend_hash_exists(&module_registry, "bz2", sizeof("bz2"))) {
+ if (!PHAR_G(has_bz2)) {
zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC,
"Cannot compress with Bzip2 compression, bz2 extension is not enabled");
}
RETURN_TRUE;
}
} else {
- RETURN_FALSE;
+ RETURN_TRUE;
}
}
/* }}} */
RETURN_TRUE;
}
} else {
- RETURN_FALSE;
+ RETURN_TRUE;
}
}
/* }}} */
zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC,
"Cannot compress deleted file");
}
+ if (!PHAR_G(has_zlib)) {
+ zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC,
+ "Cannot compress with Gzip compression, zlib extension is not enabled");
+ }
entry_obj->ent.entry->old_flags = entry_obj->ent.entry->flags;
entry_obj->ent.entry->flags &= ~PHAR_ENT_COMPRESSION_MASK;
entry_obj->ent.entry->flags |= PHAR_ENT_COMPRESSED_GZ;
char *error;
PHAR_ENTRY_OBJECT();
- if (!zend_hash_exists(&module_registry, "bz2", sizeof("bz2"))) {
+ if (!PHAR_G(has_bz2)) {
zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC,
"Cannot compress with Bzip2 compression, bz2 extension is not enabled");
}
zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC,
"Cannot uncompress Gzip-compressed file, zlib extension is not enabled");
}
+#else
+ if (!PHAR_G(has_zlib)) {
+ zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC,
+ "Cannot uncompress Gzip-compressed file, zlib extension is not enabled");
+ }
#endif
#if !HAVE_BZ2
if (entry_obj->ent.entry->flags & PHAR_ENT_COMPRESSED_BZ2) {
"Cannot uncompress Bzip2-compressed file, bzip2 extension is not enabled");
}
#else
- if (!zend_hash_exists(&module_registry, "bz2", sizeof("bz2"))) {
+ if (!PHAR_G(has_bz2)) {
zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC,
"Cannot uncompress Bzip2-compressed file, bzip2 extension is not enabled");
}