From: Marcus Boerger Date: Mon, 21 May 2007 16:43:53 +0000 (+0000) Subject: - Make Pahr::loadPhar() and Phar::mapPhar() respect extract list X-Git-Tag: RELEASE_1_4~107 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f2cec0600c5fd3bc3ee60ef164ae739cc40304f7;p=php - Make Pahr::loadPhar() and Phar::mapPhar() respect extract list --- diff --git a/ext/phar/phar_object.c b/ext/phar/phar_object.c index d91b6476f0..135b4549b0 100755 --- a/ext/phar/phar_object.c +++ b/ext/phar/phar_object.c @@ -54,12 +54,24 @@ PHP_METHOD(Phar, getExtractList) * Reads the currently executed file (a phar) and registers its manifest */ PHP_METHOD(Phar, mapPhar) { - char *alias = NULL, *error; - int alias_len = 0; + char *fname, *alias = NULL, *error, *plain_map; + int fname_len, alias_len = 0; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s!", &alias, &alias_len) == FAILURE) { return; } + phar_request_initialize(TSRMLS_C); + if (zend_hash_num_elements(&(PHAR_GLOBALS->phar_plain_map))) { + fname = zend_get_executed_filename(TSRMLS_C); + fname_len = strlen(fname); + if((alias && + zend_hash_find(&(PHAR_GLOBALS->phar_plain_map), alias, alias_len+1, (void **)&plain_map) == SUCCESS) + || (zend_hash_find(&(PHAR_GLOBALS->phar_plain_map), fname, fname_len+1, (void **)&plain_map) == SUCCESS) + ) { + RETURN_STRING(plain_map, 1); + } + } + RETVAL_BOOL(phar_open_compiled_file(alias, alias_len, &error TSRMLS_CC) == SUCCESS); if (error) { zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, error); @@ -71,12 +83,23 @@ PHP_METHOD(Phar, mapPhar) * Loads any phar archive with an alias */ PHP_METHOD(Phar, loadPhar) { - char *fname, *alias = NULL, *error; + char *fname, *alias = NULL, *error, *plain_map; int fname_len, alias_len = 0; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s!", &fname, &fname_len, &alias, &alias_len) == FAILURE) { return; } + + phar_request_initialize(TSRMLS_C); + if (zend_hash_num_elements(&(PHAR_GLOBALS->phar_plain_map))) { + if((alias && + zend_hash_find(&(PHAR_GLOBALS->phar_plain_map), alias, alias_len+1, (void **)&plain_map) == SUCCESS) + || (zend_hash_find(&(PHAR_GLOBALS->phar_plain_map), fname, fname_len+1, (void **)&plain_map) == SUCCESS) + ) { + RETURN_STRING(plain_map, 1); + } + } + RETVAL_BOOL(phar_open_filename(fname, fname_len, alias, alias_len, REPORT_ERRORS, NULL, &error TSRMLS_CC) == SUCCESS); if (error) { zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, error);