From 2410cc96b6b8f8a6c89c802020e5d8c2c44b328c Mon Sep 17 00:00:00 2001 From: Greg Beaver Date: Sat, 5 Jan 2008 22:02:33 +0000 Subject: [PATCH] complete tests for Phar::mungServer --- ext/phar/phar_object.c | 16 +++++++++++++++- ext/phar/tests/frontcontroller10.phar | Bin 0 -> 591 bytes ext/phar/tests/frontcontroller10.phar.inc | 20 ++++++++++++++++++++ ext/phar/tests/frontcontroller11.phar | Bin 0 -> 578 bytes ext/phar/tests/frontcontroller11.phar.inc | 20 ++++++++++++++++++++ ext/phar/tests/frontcontroller12.phar | Bin 0 -> 581 bytes ext/phar/tests/frontcontroller12.phar.inc | 20 ++++++++++++++++++++ ext/phar/tests/frontcontroller18.phpt | 15 +++++++++++++++ ext/phar/tests/frontcontroller19.phpt | 15 +++++++++++++++ ext/phar/tests/frontcontroller20.phpt | 15 +++++++++++++++ ext/phar/tests/frontcontroller21.phpt | 20 ++++++++++++++++++++ ext/phar/tests/frontcontroller9.phar | Bin 0 -> 448 bytes ext/phar/tests/frontcontroller9.phar.inc | 14 ++++++++++++++ 13 files changed, 154 insertions(+), 1 deletion(-) create mode 100644 ext/phar/tests/frontcontroller10.phar create mode 100644 ext/phar/tests/frontcontroller10.phar.inc create mode 100644 ext/phar/tests/frontcontroller11.phar create mode 100644 ext/phar/tests/frontcontroller11.phar.inc create mode 100644 ext/phar/tests/frontcontroller12.phar create mode 100644 ext/phar/tests/frontcontroller12.phar.inc create mode 100644 ext/phar/tests/frontcontroller18.phpt create mode 100644 ext/phar/tests/frontcontroller19.phpt create mode 100644 ext/phar/tests/frontcontroller20.phpt create mode 100644 ext/phar/tests/frontcontroller21.phpt create mode 100644 ext/phar/tests/frontcontroller9.phar create mode 100644 ext/phar/tests/frontcontroller9.phar.inc 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 0000000000000000000000000000000000000000..078ce75b2c7bf54b0c1c897613a8b347990a22ef GIT binary patch literal 591 zcmcDqFUTn13dl$-va-r8%}WnXEhH@p$Sm_!Iye>5N+Ro`pY(u zdLXa?dmqV4h+WYLpT`32#UhU!8u*pKLkNd5|ac_!JT0EU;lvb%fjo lR*UXHjrPfGk1B$m)n5;txmsetStub(' diff --git a/ext/phar/tests/frontcontroller11.phar b/ext/phar/tests/frontcontroller11.phar new file mode 100644 index 0000000000000000000000000000000000000000..61ea843222142f451a30396151430e291f7623e4 GIT binary patch literal 578 zcmcDqFUTn13dl$-va-r8%}WnXEhsetStub(' diff --git a/ext/phar/tests/frontcontroller12.phar b/ext/phar/tests/frontcontroller12.phar new file mode 100644 index 0000000000000000000000000000000000000000..9e455876101ba0d48dc523b1ff74e5577503b2ad GIT binary patch literal 581 zcmcDqFUTn13dl$-va-r8%}WnXEhAT&df_mtsetStub(' 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 0000000000000000000000000000000000000000..d84b11b87504bf9c4973c1135c72f203ef14d403 GIT binary patch literal 448 zcmcDqFUTn13dl$-va-r8%}WnXEh%~eKodZE zK?>nw!5}MBlQZ%al=AZniWO2aQxx*@OB9Mq^J4Opthve(i{evCa|<+7;$8j1bQDzL zgI$BdT!VnR;^RFWeL~`${e1&GeO!YyG_4iv?RdH7GB7Z(0I?ttGXgOLumPz=kkgAn za>qW`yMt)n_H6BKP(`d@6+oXLE7*Q5X%ngfpb=tF6F{_ZPGbU00XLAJR+OKYt(OiW zkDtgZ!8#=Ac^&r=N*mkCL%QsetStub(' "foo/bar", "phps" => Phar::PHP, "php" => Phar::PHPS)); +echo "oops did not run\n"; +var_dump($_ENV, $_SERVER); +__HALT_COMPILER();'); +?> -- 2.40.0