]> granicus.if.org Git - php/commitdiff
complete tests for Phar::mungServer
authorGreg Beaver <cellog@php.net>
Sat, 5 Jan 2008 22:02:33 +0000 (22:02 +0000)
committerGreg Beaver <cellog@php.net>
Sat, 5 Jan 2008 22:02:33 +0000 (22:02 +0000)
13 files changed:
ext/phar/phar_object.c
ext/phar/tests/frontcontroller10.phar [new file with mode: 0644]
ext/phar/tests/frontcontroller10.phar.inc [new file with mode: 0644]
ext/phar/tests/frontcontroller11.phar [new file with mode: 0644]
ext/phar/tests/frontcontroller11.phar.inc [new file with mode: 0644]
ext/phar/tests/frontcontroller12.phar [new file with mode: 0644]
ext/phar/tests/frontcontroller12.phar.inc [new file with mode: 0644]
ext/phar/tests/frontcontroller18.phpt [new file with mode: 0644]
ext/phar/tests/frontcontroller19.phpt [new file with mode: 0644]
ext/phar/tests/frontcontroller20.phpt [new file with mode: 0644]
ext/phar/tests/frontcontroller21.phpt [new file with mode: 0644]
ext/phar/tests/frontcontroller9.phar [new file with mode: 0644]
ext/phar/tests/frontcontroller9.phar.inc [new file with mode: 0644]

index fb863c91bf346df7f4950d7fba27c637e8271ae3..c003fc7aca787f678603d7b35c0f21238d0fa2a1 100755 (executable)
@@ -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 (file)
index 0000000..078ce75
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 (file)
index 0000000..4c139db
--- /dev/null
@@ -0,0 +1,20 @@
+<?php
+@unlink(dirname(__FILE__) . '/frontcontroller10.phar');
+$a = new Phar(dirname(__FILE__) . '/frontcontroller10.phar');
+$a['index.php'] = '<?php
+var_dump($_SERVER["PHP_SELF"]);
+var_dump($_SERVER["SCRIPT_NAME"]);
+var_dump($_SERVER["SCRIPT_FILENAME"]);
+var_dump($_SERVER["REQUEST_URI"]);
+var_dump($_SERVER["PHAR_PHP_SELF"]);
+var_dump($_SERVER["PHAR_SCRIPT_NAME"]);
+var_dump($_SERVER["PHAR_SCRIPT_FILENAME"]);
+var_dump($_SERVER["PHAR_REQUEST_URI"]);
+';
+$a->setStub('<?php
+Phar::mungServer(array("PHP_SELF", "SCRIPT_NAME", "SCRIPT_FILENAME", "REQUEST_URI", "OOPSIE"));
+Phar::webPhar();
+echo "oops did not run\n";
+var_dump($_ENV, $_SERVER);
+__HALT_COMPILER();');
+?>
diff --git a/ext/phar/tests/frontcontroller11.phar b/ext/phar/tests/frontcontroller11.phar
new file mode 100644 (file)
index 0000000..61ea843
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 (file)
index 0000000..0863508
--- /dev/null
@@ -0,0 +1,20 @@
+<?php
+@unlink(dirname(__FILE__) . '/frontcontroller11.phar');
+$a = new Phar(dirname(__FILE__) . '/frontcontroller11.phar');
+$a['index.php'] = '<?php
+var_dump($_SERVER["PHP_SELF"]);
+var_dump($_SERVER["SCRIPT_NAME"]);
+var_dump($_SERVER["SCRIPT_FILENAME"]);
+var_dump($_SERVER["REQUEST_URI"]);
+var_dump($_SERVER["PHAR_PHP_SELF"]);
+var_dump($_SERVER["PHAR_SCRIPT_NAME"]);
+var_dump($_SERVER["PHAR_SCRIPT_FILENAME"]);
+var_dump($_SERVER["PHAR_REQUEST_URI"]);
+';
+$a->setStub('<?php
+Phar::mungServer(array(array(), "SCRIPT_NAME", "SCRIPT_FILENAME", "REQUEST_URI"));
+Phar::webPhar();
+echo "oops did not run\n";
+var_dump($_ENV, $_SERVER);
+__HALT_COMPILER();');
+?>
diff --git a/ext/phar/tests/frontcontroller12.phar b/ext/phar/tests/frontcontroller12.phar
new file mode 100644 (file)
index 0000000..9e45587
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 (file)
index 0000000..ba17df3
--- /dev/null
@@ -0,0 +1,20 @@
+<?php
+@unlink(dirname(__FILE__) . '/frontcontroller12.phar');
+$a = new Phar(dirname(__FILE__) . '/frontcontroller12.phar');
+$a['index.php'] = '<?php
+var_dump($_SERVER["PHP_SELF"]);
+var_dump($_SERVER["SCRIPT_NAME"]);
+var_dump($_SERVER["SCRIPT_FILENAME"]);
+var_dump($_SERVER["REQUEST_URI"]);
+var_dump($_SERVER["PHAR_PHP_SELF"]);
+var_dump($_SERVER["PHAR_SCRIPT_NAME"]);
+var_dump($_SERVER["PHAR_SCRIPT_FILENAME"]);
+var_dump($_SERVER["PHAR_REQUEST_URI"]);
+';
+$a->setStub('<?php
+Phar::mungServer(array("PHP_SELF", "SCRIPT_NAME", "SCRIPT_FILENAME", "REQUEST_URI"));
+Phar::webPhar();
+echo "oops did not run\n";
+var_dump($_ENV, $_SERVER);
+__HALT_COMPILER();');
+?>
diff --git a/ext/phar/tests/frontcontroller18.phpt b/ext/phar/tests/frontcontroller18.phpt
new file mode 100644 (file)
index 0000000..e2ae111
--- /dev/null
@@ -0,0 +1,15 @@
+--TEST--
+Phar front controller $_SERVER munging failure
+--SKIPIF--
+<?php if (!extension_loaded("phar")) die("skip"); ?>
+--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 (file)
index 0000000..b5b9a23
--- /dev/null
@@ -0,0 +1,15 @@
+--TEST--
+Phar front controller $_SERVER munging failure 2
+--SKIPIF--
+<?php if (!extension_loaded("phar")) die("skip"); ?>
+--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 (file)
index 0000000..dd07356
--- /dev/null
@@ -0,0 +1,15 @@
+--TEST--
+Phar front controller $_SERVER munging failure 3
+--SKIPIF--
+<?php if (!extension_loaded("phar")) die("skip"); ?>
+--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 (file)
index 0000000..1270dc8
--- /dev/null
@@ -0,0 +1,20 @@
+--TEST--
+Phar front controller $_SERVER munging success
+--SKIPIF--
+<?php if (!extension_loaded("phar")) die("skip"); ?>
+--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 (file)
index 0000000..d84b11b
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 (file)
index 0000000..00861f6
--- /dev/null
@@ -0,0 +1,14 @@
+<?php
+@unlink(dirname(__FILE__) . '/frontcontroller9.phar');
+$a = new Phar(dirname(__FILE__) . '/frontcontroller9.phar');
+$a['a.phps'] = 'hio1';
+$a['a.jpg'] = 'hio2';
+$a['a.php'] = '<?php function hio(){}';
+$a['fronk.gronk'] = 'hio3';
+$a->setStub('<?php
+Phar::mungServer(array());
+Phar::webPhar("whatever", "index.php", null, array("jpg" => "foo/bar", "phps" => Phar::PHP, "php" => Phar::PHPS));
+echo "oops did not run\n";
+var_dump($_ENV, $_SERVER);
+__HALT_COMPILER();');
+?>