From: Greg Beaver Date: Sat, 5 Jan 2008 22:02:33 +0000 (+0000) Subject: complete tests for Phar::mungServer X-Git-Tag: RELEASE_2_0_0a1~1016 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2410cc96b6b8f8a6c89c802020e5d8c2c44b328c;p=php complete tests for Phar::mungServer --- diff --git a/ext/phar/phar_object.c b/ext/phar/phar_object.c index fb863c91bf..c003fc7aca 100755 --- a/ext/phar/phar_object.c +++ b/ext/phar/phar_object.c @@ -94,7 +94,7 @@ static void phar_mung_server_vars(char *fname, char *entry, char *basename, int char *path_info; /* "tweak" $_SERVER variables requested in earlier call to Phar::mungServer() */ - if (!zend_hash_num_elements(&(PHAR_GLOBALS->phar_SERVER_mung_list))) { + if (!PHAR_GLOBALS->phar_SERVER_mung_list.arBuckets || !zend_hash_num_elements(&(PHAR_GLOBALS->phar_SERVER_mung_list))) { return; } if (SUCCESS != zend_hash_find(&EG(symbol_table), "_SERVER", sizeof("_SERVER"), (void **) &_SERVER)) { @@ -636,20 +636,28 @@ PHP_METHOD(Phar, mungServer) return; } + phar_request_initialize(TSRMLS_C); + for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(mungvalues)); SUCCESS == zend_hash_has_more_elements(Z_ARRVAL_P(mungvalues)); zend_hash_move_forward(Z_ARRVAL_P(mungvalues))) { zval ***data; if (SUCCESS != zend_hash_get_current_data(Z_ARRVAL_P(mungvalues), (void **) data)) { zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "unable to retrieve array value in Phar::mungServer()"); + zend_hash_destroy(&(PHAR_GLOBALS->phar_SERVER_mung_list)); + PHAR_GLOBALS->phar_SERVER_mung_list.arBuckets = NULL; return; } if (Z_TYPE_PP(*data) != IS_STRING) { zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Non-string value passed to Phar::mungServer(), expecting an array of any of these strings: PHP_SELF, REQUEST_URI, SCRIPT_FILENAME, SCRIPT_NAME"); + zend_hash_destroy(&(PHAR_GLOBALS->phar_SERVER_mung_list)); + PHAR_GLOBALS->phar_SERVER_mung_list.arBuckets = NULL; return; } if (!php_self && Z_STRLEN_PP(*data) == sizeof("PHP_SELF")-1 && !strncmp(Z_STRVAL_PP(*data), "PHP_SELF", sizeof("PHP_SELF")-1)) { if (SUCCESS != zend_hash_add_empty_element(&(PHAR_GLOBALS->phar_SERVER_mung_list), "PHP_SELF", sizeof("PHP_SELF")-1)) { zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Unable to add PHP_SELF to Phar::mungServer() list of values to mung"); + zend_hash_destroy(&(PHAR_GLOBALS->phar_SERVER_mung_list)); + PHAR_GLOBALS->phar_SERVER_mung_list.arBuckets = NULL; return; } php_self = 1; @@ -658,6 +666,8 @@ PHP_METHOD(Phar, mungServer) if (!request_uri && !strncmp(Z_STRVAL_PP(*data), "REQUEST_URI", sizeof("REQUEST_URI")-1)) { if (SUCCESS != zend_hash_add_empty_element(&(PHAR_GLOBALS->phar_SERVER_mung_list), "REQUEST_URI", sizeof("REQUEST_URI")-1)) { zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Unable to add REQUEST_URI to Phar::mungServer() list of values to mung"); + zend_hash_destroy(&(PHAR_GLOBALS->phar_SERVER_mung_list)); + PHAR_GLOBALS->phar_SERVER_mung_list.arBuckets = NULL; return; } request_uri = 1; @@ -665,6 +675,8 @@ PHP_METHOD(Phar, mungServer) if (!script_name && !strncmp(Z_STRVAL_PP(*data), "SCRIPT_NAME", sizeof("SCRIPT_NAME")-1)) { if (SUCCESS != zend_hash_add_empty_element(&(PHAR_GLOBALS->phar_SERVER_mung_list), "SCRIPT_NAME", sizeof("SCRIPT_NAME")-1)) { zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Unable to add SCRIPT_NAME to Phar::mungServer() list of values to mung"); + zend_hash_destroy(&(PHAR_GLOBALS->phar_SERVER_mung_list)); + PHAR_GLOBALS->phar_SERVER_mung_list.arBuckets = NULL; return; } script_name = 1; @@ -673,6 +685,8 @@ PHP_METHOD(Phar, mungServer) if (!script_filename && Z_STRLEN_PP(*data) == sizeof("SCRIPT_FILENAME")-1 && !strncmp(Z_STRVAL_PP(*data), "SCRIPT_FILENAME", sizeof("SCRIPT_FILENAME")-1)) { if (SUCCESS != zend_hash_add_empty_element(&(PHAR_GLOBALS->phar_SERVER_mung_list), "SCRIPT_FILENAME", sizeof("SCRIPT_FILENAME")-1)) { zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Unable to add SCRIPT_FILENAME to Phar::mungServer() list of values to mung"); + zend_hash_destroy(&(PHAR_GLOBALS->phar_SERVER_mung_list)); + PHAR_GLOBALS->phar_SERVER_mung_list.arBuckets = NULL; return; } script_filename = 1; diff --git a/ext/phar/tests/frontcontroller10.phar b/ext/phar/tests/frontcontroller10.phar new file mode 100644 index 0000000000..078ce75b2c Binary files /dev/null and b/ext/phar/tests/frontcontroller10.phar differ diff --git a/ext/phar/tests/frontcontroller10.phar.inc b/ext/phar/tests/frontcontroller10.phar.inc new file mode 100644 index 0000000000..4c139db58b --- /dev/null +++ b/ext/phar/tests/frontcontroller10.phar.inc @@ -0,0 +1,20 @@ +setStub(' diff --git a/ext/phar/tests/frontcontroller11.phar b/ext/phar/tests/frontcontroller11.phar new file mode 100644 index 0000000000..61ea843222 Binary files /dev/null and b/ext/phar/tests/frontcontroller11.phar differ diff --git a/ext/phar/tests/frontcontroller11.phar.inc b/ext/phar/tests/frontcontroller11.phar.inc new file mode 100644 index 0000000000..086350800b --- /dev/null +++ b/ext/phar/tests/frontcontroller11.phar.inc @@ -0,0 +1,20 @@ +setStub(' diff --git a/ext/phar/tests/frontcontroller12.phar b/ext/phar/tests/frontcontroller12.phar new file mode 100644 index 0000000000..9e45587610 Binary files /dev/null and b/ext/phar/tests/frontcontroller12.phar differ diff --git a/ext/phar/tests/frontcontroller12.phar.inc b/ext/phar/tests/frontcontroller12.phar.inc new file mode 100644 index 0000000000..ba17df37e1 --- /dev/null +++ b/ext/phar/tests/frontcontroller12.phar.inc @@ -0,0 +1,20 @@ +setStub(' diff --git a/ext/phar/tests/frontcontroller18.phpt b/ext/phar/tests/frontcontroller18.phpt new file mode 100644 index 0000000000..e2ae111d9b --- /dev/null +++ b/ext/phar/tests/frontcontroller18.phpt @@ -0,0 +1,15 @@ +--TEST-- +Phar front controller $_SERVER munging failure +--SKIPIF-- + +--ENV-- +SCRIPT_NAME=/frontcontroller18.php/fronk.gronk +REQUEST_URI=/frontcontroller18.php/fronk.gronk +--FILE_EXTERNAL-- +frontcontroller9.phar +--EXPECTF-- +Fatal error: Uncaught exception 'UnexpectedValueException' with message 'No values passed to Phar::mungServer(), expecting an array of any of these strings: PHP_SELF, REQUEST_URI, SCRIPT_FILENAME, SCRIPT_NAME' in %sfrontcontroller18.php:2 +Stack trace: +#0 %sfrontcontroller18.php(2): Phar::mungServer(Array) +#1 {main} + thrown in %sfrontcontroller18.php on line 2 diff --git a/ext/phar/tests/frontcontroller19.phpt b/ext/phar/tests/frontcontroller19.phpt new file mode 100644 index 0000000000..b5b9a23a64 --- /dev/null +++ b/ext/phar/tests/frontcontroller19.phpt @@ -0,0 +1,15 @@ +--TEST-- +Phar front controller $_SERVER munging failure 2 +--SKIPIF-- + +--ENV-- +SCRIPT_NAME=/frontcontroller19.php/ +REQUEST_URI=/frontcontroller19.php/ +--FILE_EXTERNAL-- +frontcontroller10.phar +--EXPECTF-- +Fatal error: Uncaught exception 'UnexpectedValueException' with message 'Too many values passed to Phar::mungServer(), expecting an array of any of these strings: PHP_SELF, REQUEST_URI, SCRIPT_FILENAME, SCRIPT_NAME' in %sfrontcontroller19.php:2 +Stack trace: +#0 %sfrontcontroller19.php(2): Phar::mungServer(Array) +#1 {main} + thrown in %sfrontcontroller19.php on line 2 diff --git a/ext/phar/tests/frontcontroller20.phpt b/ext/phar/tests/frontcontroller20.phpt new file mode 100644 index 0000000000..dd07356da5 --- /dev/null +++ b/ext/phar/tests/frontcontroller20.phpt @@ -0,0 +1,15 @@ +--TEST-- +Phar front controller $_SERVER munging failure 3 +--SKIPIF-- + +--ENV-- +SCRIPT_NAME=/frontcontroller20.php/ +REQUEST_URI=/frontcontroller20.php/ +--FILE_EXTERNAL-- +frontcontroller11.phar +--EXPECTF-- +Fatal error: Uncaught exception 'UnexpectedValueException' with message 'Non-string value passed to Phar::mungServer(), expecting an array of any of these strings: PHP_SELF, REQUEST_URI, SCRIPT_FILENAME, SCRIPT_NAME' in %sfrontcontroller20.php:2 +Stack trace: +#0 %sfrontcontroller20.php(2): Phar::mungServer(Array) +#1 {main} + thrown in %sfrontcontroller20.php on line 2 diff --git a/ext/phar/tests/frontcontroller21.phpt b/ext/phar/tests/frontcontroller21.phpt new file mode 100644 index 0000000000..1270dc8290 --- /dev/null +++ b/ext/phar/tests/frontcontroller21.phpt @@ -0,0 +1,20 @@ +--TEST-- +Phar front controller $_SERVER munging success +--SKIPIF-- + +--ENV-- +SCRIPT_NAME=/frontcontroller21.php/index.php +REQUEST_URI=/frontcontroller21.php/index.php +--FILE_EXTERNAL-- +frontcontroller12.phar +--EXPECTHEADERS-- +Content-type: text/html +--EXPECTF-- +string(10) "/index.php" +string(%d) "phar://%sfrontcontroller21.php/index.php" +string(%d) "phar://%sfrontcontroller21.php/index.php" +string(10) "/index.php" +string(32) "/frontcontroller21.php/index.php" +string(32) "/frontcontroller21.php/index.php" +string(%d) "%s/frontcontroller21.php" +string(32) "/frontcontroller21.php/index.php" \ No newline at end of file diff --git a/ext/phar/tests/frontcontroller9.phar b/ext/phar/tests/frontcontroller9.phar new file mode 100644 index 0000000000..d84b11b875 Binary files /dev/null and b/ext/phar/tests/frontcontroller9.phar differ diff --git a/ext/phar/tests/frontcontroller9.phar.inc b/ext/phar/tests/frontcontroller9.phar.inc new file mode 100644 index 0000000000..00861f6420 --- /dev/null +++ b/ext/phar/tests/frontcontroller9.phar.inc @@ -0,0 +1,14 @@ +setStub(' "foo/bar", "phps" => Phar::PHP, "php" => Phar::PHPS)); +echo "oops did not run\n"; +var_dump($_ENV, $_SERVER); +__HALT_COMPILER();'); +?>