cellog Thu Feb 7 23:42:02 2008 UTC
Modified files: /pecl/phar phar_object.c /pecl/phar/tests frontcontroller10.phpt frontcontroller21.phpt frontcontroller3.phar frontcontroller3.phar.inc frontcontroller4.phar frontcontroller4.phar.inc frontcontroller6.phpt frontcontroller8.phpt withphar_web.phpt /pecl/phar/tests/tar frontcontroller10.phar.phpt frontcontroller21.phar.phpt frontcontroller3.phar.inc frontcontroller3.phar.tar frontcontroller4.phar.inc frontcontroller4.phar.tar frontcontroller6.phar.phpt frontcontroller8.phar.phpt /pecl/phar/tests/zip frontcontroller10.phar.phpt frontcontroller21.phar.phpt frontcontroller3.phar.inc frontcontroller3.phar.zip frontcontroller4.phar.inc frontcontroller4.phar.zip frontcontroller6.phar.phpt frontcontroller8.phar.phpt Log: [DOC] refactor the $rewrites parameter in Phar::webPhar. Now it is a callback that accepts the path requested. This callback should return the actual filename requested as a string, or false to deny access as HTTP 403. Also fix incorrect munging of SCRIPT_NAME variable in mungServer More importantly, Phar::webPhar now finds the filename hidden in: http://localhost/myphar.phar/internal/file.php/extra/stuff as 'internal/file.php' in phar 'myphar.phar' with REQUEST_URI '/internal/file.php/extra/stuff' this will allow pharring up apps that use REQUEST_URI for front controller stuff.
http://cvs.php.net/viewvc.cgi/pecl/phar/phar_object.c?r1=1.143&r2=1.144&diff_format=u Index: pecl/phar/phar_object.c diff -u pecl/phar/phar_object.c:1.143 pecl/phar/phar_object.c:1.144 --- pecl/phar/phar_object.c:1.143 Thu Feb 7 04:24:56 2008 +++ pecl/phar/phar_object.c Thu Feb 7 23:42:02 2008 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: phar_object.c,v 1.143 2008/02/07 04:24:56 cellog Exp $ */ +/* $Id: phar_object.c,v 1.144 2008/02/07 23:42:02 cellog Exp $ */ #include "phar_internal.h" #include "func_interceptors.h" @@ -74,7 +74,7 @@ } /* }}} */ -static void phar_mung_server_vars(char *fname, char *entry, int entry_len, char *basename, int basename_len TSRMLS_DC) +static void phar_mung_server_vars(char *fname, char *entry, int entry_len, char *basename, int basename_len, char *request_uri, int request_uri_len TSRMLS_DC) { zval **_SERVER, **stuff; char *path_info; @@ -83,66 +83,67 @@ if (SUCCESS != zend_hash_find(&EG(symbol_table), "_SERVER", sizeof("_SERVER"), (void **) &_SERVER)) { return; } -#define PHAR_MUNG_REPLACE(vname) \ - if (zend_hash_exists(&(PHAR_GLOBALS->phar_SERVER_mung_list), #vname, sizeof(#vname)-1)) { \ - if (SUCCESS == zend_hash_find(Z_ARRVAL_PP(_SERVER), #vname, sizeof(#vname), (void **) &stuff)) { \ - int code; \ - zval *temp; \ - char newname[sizeof("SCRIPT_FILENAME")+4]; \ - \ - path_info = Z_STRVAL_PP(stuff); \ - code = Z_STRLEN_PP(stuff); \ - Z_STRVAL_PP(stuff) = estrndup(Z_STRVAL_PP(stuff) + basename_len, Z_STRLEN_PP(stuff) - basename_len); \ - Z_STRLEN_PP(stuff) -= basename_len; \ - \ - MAKE_STD_ZVAL(temp); \ - Z_TYPE_P(temp) = IS_STRING; \ - Z_STRVAL_P(temp) = path_info; \ - Z_STRLEN_P(temp) = code; \ - memset(newname, 0, sizeof("SCRIPT_FILENAME")+4); \ - memcpy(newname, "PHAR_", 5); \ - memcpy(newname + 5, #vname, sizeof(#vname)); \ - zend_hash_update(Z_ARRVAL_PP(_SERVER), newname, strlen(newname)+1, (void *) &temp, sizeof(zval **), NULL); \ - } \ - } /* PATH_INFO and PATH_TRANSLATED should always be munged */ if (SUCCESS == zend_hash_find(Z_ARRVAL_PP(_SERVER), "PATH_INFO", sizeof("PATH_INFO"), (void **) &stuff)) { int code; zval *temp; char newname[] = "PHAR_PATH_INFO"; - + path_info = Z_STRVAL_PP(stuff); code = Z_STRLEN_PP(stuff); - Z_STRVAL_PP(stuff) = estrndup(Z_STRVAL_PP(stuff) + entry_len, Z_STRLEN_PP(stuff) - entry_len); - Z_STRLEN_PP(stuff) -= entry_len; - + ZVAL_STRINGL(*stuff, Z_STRVAL_PP(stuff) + entry_len, Z_STRLEN_PP(stuff) - entry_len - request_uri_len, 1); + MAKE_STD_ZVAL(temp); - Z_TYPE_P(temp) = IS_STRING; - Z_STRVAL_P(temp) = path_info; - Z_STRLEN_P(temp) = code; - zend_hash_update(Z_ARRVAL_PP(_SERVER), newname, strlen(newname)+1, (void *) &temp, sizeof(zval **), NULL); + ZVAL_STRINGL(temp, path_info, code, 0); + zend_hash_update(Z_ARRVAL_PP(_SERVER), newname, sizeof(newname), (void *) &temp, sizeof(zval **), NULL); } if (SUCCESS == zend_hash_find(Z_ARRVAL_PP(_SERVER), "PATH_TRANSLATED", sizeof("PATH_TRANSLATED"), (void **) &stuff)) { int code; zval *temp; char newname[] = "PHAR_PATH_TRANSLATED"; - + path_info = Z_STRVAL_PP(stuff); code = Z_STRLEN_PP(stuff); Z_STRLEN_PP(stuff) = spprintf(&(Z_STRVAL_PP(stuff)), 4096, "phar://%s%s", fname, entry); - - MAKE_STD_ZVAL(temp); - Z_TYPE_P(temp) = IS_STRING; - Z_STRVAL_P(temp) = path_info; - Z_STRLEN_P(temp) = code; - zend_hash_update(Z_ARRVAL_PP(_SERVER), newname, strlen(newname)+1, (void *) &temp, sizeof(zval **), NULL); + + MAKE_STD_ZVAL(temp); + ZVAL_STRINGL(temp, path_info, code, 0); + zend_hash_update(Z_ARRVAL_PP(_SERVER), newname, sizeof(newname), (void *) &temp, sizeof(zval **), NULL); } if (!PHAR_GLOBALS->phar_SERVER_mung_list.arBuckets || !zend_hash_num_elements(&(PHAR_GLOBALS->phar_SERVER_mung_list))) { return; } - PHAR_MUNG_REPLACE(REQUEST_URI); - PHAR_MUNG_REPLACE(PHP_SELF); + if (zend_hash_exists(&(PHAR_GLOBALS->phar_SERVER_mung_list), "REQUEST_URI", sizeof("REQUEST_URI")-1)) { + if (SUCCESS == zend_hash_find(Z_ARRVAL_PP(_SERVER), "REQUEST_URI", sizeof("REQUEST_URI"), (void **) &stuff)) { + int code; + zval *temp; + char newname[] = "PHAR_REQUEST_URI"; + + path_info = Z_STRVAL_PP(stuff); + code = Z_STRLEN_PP(stuff); + ZVAL_STRINGL(*stuff, Z_STRVAL_PP(stuff) + basename_len, Z_STRLEN_PP(stuff) - basename_len, 1); + + MAKE_STD_ZVAL(temp); + ZVAL_STRINGL(temp, path_info, code, 0); + zend_hash_update(Z_ARRVAL_PP(_SERVER), newname, sizeof(newname), (void *) &temp, sizeof(zval **), NULL); + } + } + if (zend_hash_exists(&(PHAR_GLOBALS->phar_SERVER_mung_list), "PHP_SELF", sizeof("PHP_SELF")-1)) { + if (SUCCESS == zend_hash_find(Z_ARRVAL_PP(_SERVER), "PHP_SELF", sizeof("PHP_SELF"), (void **) &stuff)) { + int code; + zval *temp; + char newname[] = "PHAR_PHP_SELF"; + + path_info = Z_STRVAL_PP(stuff); + code = Z_STRLEN_PP(stuff); + ZVAL_STRINGL(*stuff, Z_STRVAL_PP(stuff) + basename_len, Z_STRLEN_PP(stuff) - basename_len, 1); + + MAKE_STD_ZVAL(temp); + ZVAL_STRINGL(temp, path_info, code, 0); + zend_hash_update(Z_ARRVAL_PP(_SERVER), newname, sizeof(newname), (void *) &temp, sizeof(zval **), NULL); + } + } if (zend_hash_exists(&(PHAR_GLOBALS->phar_SERVER_mung_list), "SCRIPT_NAME", sizeof("SCRIPT_NAME")-1)) { if (SUCCESS == zend_hash_find(Z_ARRVAL_PP(_SERVER), "SCRIPT_NAME", sizeof("SCRIPT_NAME"), (void **) &stuff)) { @@ -152,13 +153,15 @@ path_info = Z_STRVAL_PP(stuff); code = Z_STRLEN_PP(stuff); - Z_STRLEN_PP(stuff) = spprintf(&(Z_STRVAL_PP(stuff)), 4096, "phar://%s%s", fname, entry); + if (entry[0] != '/') { + Z_STRLEN_PP(stuff) = spprintf(&(Z_STRVAL_PP(stuff)), 4096, "phar://%s%s", fname, entry); + } else { + ZVAL_STRINGL(*stuff, entry, entry_len, 1); + } - MAKE_STD_ZVAL(temp); - Z_TYPE_P(temp) = IS_STRING; - Z_STRVAL_P(temp) = path_info; - Z_STRLEN_P(temp) = code; - zend_hash_update(Z_ARRVAL_PP(_SERVER), newname, strlen(newname)+1, (void *) &temp, sizeof(zval **), NULL); + MAKE_STD_ZVAL(temp); + ZVAL_STRINGL(temp, path_info, code, 0); + zend_hash_update(Z_ARRVAL_PP(_SERVER), newname, sizeof(newname), (void *) &temp, sizeof(zval **), NULL); } } @@ -167,21 +170,19 @@ int code; zval *temp; char newname[] = "PHAR_SCRIPT_FILENAME"; - + path_info = Z_STRVAL_PP(stuff); code = Z_STRLEN_PP(stuff); Z_STRLEN_PP(stuff) = spprintf(&(Z_STRVAL_PP(stuff)), 4096, "phar://%s%s", fname, entry); - - MAKE_STD_ZVAL(temp); - Z_TYPE_P(temp) = IS_STRING; - Z_STRVAL_P(temp) = path_info; - Z_STRLEN_P(temp) = code; - zend_hash_update(Z_ARRVAL_PP(_SERVER), newname, strlen(newname)+1, (void *) &temp, sizeof(zval **), NULL); + + MAKE_STD_ZVAL(temp); + ZVAL_STRINGL(temp, path_info, code, 0); + zend_hash_update(Z_ARRVAL_PP(_SERVER), newname, sizeof(newname), (void *) &temp, sizeof(zval **), NULL); } } } -static int phar_file_action(phar_entry_data *phar, char *mime_type, int code, char *entry, int entry_len, char *arch, int arch_len, char *basename, int basename_len TSRMLS_DC) +static int phar_file_action(phar_entry_data *phar, char *mime_type, int code, char *entry, int entry_len, char *arch, int arch_len, char *basename, int basename_len, char *ru, int ru_len TSRMLS_DC) { char *name = NULL, buf[8192], *cwd; zend_syntax_highlighter_ini syntax_highlighter_ini; @@ -203,8 +204,7 @@ } php_get_highlight_struct(&syntax_highlighter_ini); - if (highlight_file(name, &syntax_highlighter_ini TSRMLS_CC) == FAILURE) { - } + highlight_file(name, &syntax_highlighter_ini TSRMLS_CC); phar_entry_delref(phar TSRMLS_CC); efree(name); @@ -255,7 +255,7 @@ return PHAR_MIME_OTHER; case PHAR_MIME_PHP: if (basename) { - phar_mung_server_vars(arch, entry, entry_len, basename, basename_len TSRMLS_CC); + phar_mung_server_vars(arch, entry, entry_len, basename, basename_len, ru, ru_len TSRMLS_CC); efree(basename); } phar_entry_delref(phar TSRMLS_CC); @@ -327,7 +327,21 @@ return -1; } -void phar_do_404(char *fname, int fname_len, char *f404, int f404_len, char *entry, int entry_len TSRMLS_DC) +static void phar_do_403(char *entry, int entry_len TSRMLS_DC) +{ + sapi_header_line ctr = {0}; + + ctr.response_code = 403; + ctr.line_len = sizeof("HTTP/1.0 403 Access Denied"); + ctr.line = "HTTP/1.0 403 Access Denied"; + sapi_header_op(SAPI_HEADER_REPLACE, &ctr TSRMLS_CC); + sapi_send_headers(TSRMLS_C); + PHPWRITE("<html>\n <head>\n <title>Access Denied</title>\n </head>\n <body>\n <h1>403 - File ", sizeof("<html>\n <head>\n <title>Access Denied</title>\n </head>\n <body>\n <h1>403 - File ") - 1); + PHPWRITE(entry, entry_len); + PHPWRITE(" Access Denied</h1>\n </body>\n</html>", sizeof(" Access Denied</h1>\n </body>\n</html>") - 1); +} + +static void phar_do_404(char *fname, int fname_len, char *f404, int f404_len, char *entry, int entry_len TSRMLS_DC) { int hi; phar_entry_data *phar; @@ -339,7 +353,7 @@ } goto nofile; } - hi = phar_file_action(phar, "text/html", PHAR_MIME_PHP, f404, f404_len, fname, fname_len, NULL, 0 TSRMLS_CC); + hi = phar_file_action(phar, "text/html", PHAR_MIME_PHP, f404, f404_len, fname, fname_len, NULL, 0, NULL, 0 TSRMLS_CC); } else { sapi_header_line ctr = {0}; nofile: @@ -348,13 +362,54 @@ ctr.line = "HTTP/1.0 404 Not Found"; sapi_header_op(SAPI_HEADER_REPLACE, &ctr TSRMLS_CC); sapi_send_headers(TSRMLS_C); - PHPWRITE("<html>\n <head>\n <title>File Not Found<title>\n </head>\n <body>\n <h1>404 - File ", sizeof("<html>\n <head>\n <title>File Not Found<title>\n </head>\n <body>\n <h1>404 - File ") - 1); + PHPWRITE("<html>\n <head>\n <title>File Not Found</title>\n </head>\n <body>\n <h1>404 - File ", sizeof("<html>\n <head>\n <title>File Not Found</title>\n </head>\n <body>\n <h1>404 - File ") - 1); PHPWRITE(entry, entry_len); PHPWRITE(" Not Found</h1>\n </body>\n</html>", sizeof(" Not Found</h1>\n </body>\n</html>") - 1); } } -/* {{{ proto void Phar::webPhar([string alias, [string index, [string f404, [array mimetypes, [array rewrites]]]]]) +static void phar_postprocess_ru_web(char *fname, int fname_len, char **entry, + int *entry_len, char **ru, int *ru_len TSRMLS_DC) +{ + char *e = *entry + 1, *u = NULL, *saveu = NULL; + int e_len = *entry_len - 1, u_len = 0; + phar_archive_data **pphar; + + /* we already know we can retrieve the phar if we reach here */ + zend_hash_find(&(PHAR_GLOBALS->phar_fname_map), fname, fname_len, (void **) &pphar); + + do { + if (zend_hash_exists(&((*pphar)->manifest), e, e_len)) { + if (u) { + u[0] = '/'; + *ru = estrndup(u, u_len+1); + u_len++; + u[0] = '\0'; + } else { + *ru = NULL; + } + *ru_len = u_len; + *entry_len = e_len + 1; + return; + } + if (u) { + u[0] = '/'; + saveu = u; + } + u = strrchr(e, '/'); + if (!u) { + if (saveu) { + saveu[0] = '/'; + } + return; + } + u[0] = '\0'; + u_len = strlen(u + 1); + e_len -= u_len + 1; + } while (1); +} + +/* {{{ proto void Phar::webPhar([string alias, [string index, [string f404, [array mimetypes, [callback rewrites]]]]]) * mapPhar for web-based phars. Reads the currently executed file (a phar) * and registers its manifest. When executed in the CLI or CGI command-line sapi, * this works exactly like mapPhar(). When executed by a web-based sapi, this @@ -365,15 +420,14 @@ { HashTable mimetypes; phar_mime_type mime; - zval *mimeoverride = NULL, *rewrites = NULL; - char *alias = NULL, *error, *plain_map, *index_php, *f404 = NULL; - int alias_len = 0, ret, f404_len = 0, free_pathinfo = 0; + zval *mimeoverride = NULL, *rewrite = NULL; + char *alias = NULL, *error, *plain_map, *index_php, *f404 = NULL, *ru = NULL; + int alias_len = 0, ret, f404_len = 0, free_pathinfo = 0, ru_len = 0; char *fname, *basename, *path_info, *mime_type, *entry, *pt; int fname_len, entry_len, code, index_php_len = 0; phar_entry_data *phar; - zval **fd_ptr; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s!s!saa", &alias, &alias_len, &index_php, &index_php_len, &f404, &f404_len, &mimeoverride, &rewrites) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s!s!saz", &alias, &alias_len, &index_php, &index_php_len, &f404, &f404_len, &mimeoverride, &rewrite) == FAILURE) { return; } @@ -435,23 +489,92 @@ entry_len = 0; } pt = estrndup(testit, (pt - testit) + (fname_len - (basename - fname))); - goto skip_entry_dupe; } else { path_info = SG(request_info).request_uri; - } - if (!(pt = strstr(path_info, basename))) { - /* this can happen with rewrite rules - and we have no idea what to do then, so return */ - return; + if (!(pt = strstr(path_info, basename))) { + /* this can happen with rewrite rules - and we have no idea what to do then, so return */ + return; + } + entry_len = strlen(path_info); + + entry_len -= (pt - path_info) + (fname_len - (basename - fname)); + entry = estrndup(pt + (fname_len - (basename - fname)), entry_len); + + pt = estrndup(path_info, (pt - path_info) + (fname_len - (basename - fname))); } - entry_len = strlen(path_info); - entry_len -= (pt - path_info) + (fname_len - (basename - fname)); - entry = estrndup(pt + (fname_len - (basename - fname)), entry_len); + if (rewrite) { + zend_fcall_info fci; + zend_fcall_info_cache fcc; + zval *params, *retval_ptr, **zp[1]; - pt = estrndup(path_info, (pt - path_info) + (fname_len - (basename - fname))); + MAKE_STD_ZVAL(params); + ZVAL_STRINGL(params, entry, entry_len, 1); + zp[0] = ¶ms; -skip_entry_dupe: + if (FAILURE == zend_fcall_info_init(rewrite, &fci, &fcc, NULL TSRMLS_CC)) { + zend_throw_exception_ex(spl_ce_RuntimeException, 0 TSRMLS_CC, "phar error: invalid rewrite callback"); + if (free_pathinfo) { + efree(path_info); + } + return; + } + + fci.param_count = 1; + fci.params = zp; +#if PHP_VERSION_ID < 50300 + params->refcount++; +#else + Z_ADDREF_P(params); +#endif + fci.retval_ptr_ptr = &retval_ptr; + + if (FAILURE == zend_call_function(&fci, &fcc TSRMLS_CC)) { + if (!EG(exception)) { + zend_throw_exception_ex(spl_ce_RuntimeException, 0 TSRMLS_CC, "phar error: failed to call rewrite callback"); + } + if (free_pathinfo) { + efree(path_info); + } + return; + } + if (!retval_ptr) { + if (free_pathinfo) { + efree(path_info); + } + zend_throw_exception_ex(spl_ce_RuntimeException, 0 TSRMLS_CC, "phar error: rewrite callback must return a string or false"); + return; + } + switch (Z_TYPE_P(retval_ptr)) { + case IS_STRING : + efree(entry); + entry = Z_STRVAL_P(retval_ptr); + entry_len = Z_STRLEN_P(retval_ptr); + break; + case IS_BOOL : + phar_do_403(entry, entry_len TSRMLS_CC); + if (free_pathinfo) { + efree(path_info); + } + zend_bailout(); + return; + case IS_NULL : + /* just use what we have now */ + break; + default: + efree(retval_ptr); + if (free_pathinfo) { + efree(path_info); + } + zend_throw_exception_ex(spl_ce_RuntimeException, 0 TSRMLS_CC, "phar error: rewrite callback must return a string or false"); + return; + } + } + + if (entry_len) { + phar_postprocess_ru_web(fname, fname_len, &entry, &entry_len, &ru, &ru_len TSRMLS_CC); + } if (!entry_len || (entry_len == 1 && entry[0] == '/')) { efree(entry); /* direct request */ @@ -507,24 +630,6 @@ } } - if (rewrites) { - /* check for "rewrite" urls */ - if (SUCCESS == zend_hash_find(Z_ARRVAL_P(rewrites), entry, entry_len+1, (void **) &fd_ptr)) { - if (IS_STRING != Z_TYPE_PP(fd_ptr)) { -#ifdef PHP_WIN32 - efree(fname); -#endif - zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "phar rewrite value for \"%s\" was not a string", entry); - return; - } - if (entry != index_php) { - efree(entry); - } - entry = Z_STRVAL_PP(fd_ptr); - entry_len = Z_STRLEN_PP(fd_ptr); - } - } - if (FAILURE == phar_get_entry_data(&phar, fname, fname_len, entry, entry_len, "r", 0, &error TSRMLS_CC)) { phar_do_404(fname, fname_len, f404, f404_len, entry, entry_len TSRMLS_CC); #ifdef PHP_WIN32 @@ -649,7 +754,7 @@ no_mimes: code = phar_file_type(&mimetypes, entry, &mime_type TSRMLS_CC); - ret = phar_file_action(phar, mime_type, code, entry, entry_len, fname, fname_len, pt, strlen(pt) TSRMLS_CC); + ret = phar_file_action(phar, mime_type, code, entry, entry_len, fname, fname_len, pt, strlen(pt), ru, ru_len TSRMLS_CC); zend_hash_destroy(&mimetypes); #ifdef PHP_WIN32 efree(fname); http://cvs.php.net/viewvc.cgi/pecl/phar/tests/frontcontroller10.phpt?r1=1.2&r2=1.3&diff_format=u Index: pecl/phar/tests/frontcontroller10.phpt diff -u pecl/phar/tests/frontcontroller10.phpt:1.2 pecl/phar/tests/frontcontroller10.phpt:1.3 --- pecl/phar/tests/frontcontroller10.phpt:1.2 Thu Feb 7 04:24:56 2008 +++ pecl/phar/tests/frontcontroller10.phpt Thu Feb 7 23:42:02 2008 @@ -10,9 +10,13 @@ frontcontroller4.phar --EXPECTHEADERS-- Content-type: text/html ---EXPECTF-- -Fatal error: Uncaught exception 'UnexpectedValueException' with message 'phar rewrite value for "/hi" was not a string' in %sfrontcontroller10.php:2 -Stack trace: -#0 %sfrontcontroller10.php(2): Phar::webPhar('whatever', 'index.php', '', Array, Array) -#1 {main} - thrown in %sfrontcontroller10.php on line 2 \ No newline at end of file +Status: 403 Access Denied +--EXPECT-- +<html> + <head> + <title>Access Denied</title> + </head> + <body> + <h1>403 - File /hi Access Denied</h1> + </body> +</html> \ No newline at end of file http://cvs.php.net/viewvc.cgi/pecl/phar/tests/frontcontroller21.phpt?r1=1.4&r2=1.5&diff_format=u Index: pecl/phar/tests/frontcontroller21.phpt diff -u pecl/phar/tests/frontcontroller21.phpt:1.4 pecl/phar/tests/frontcontroller21.phpt:1.5 --- pecl/phar/tests/frontcontroller21.phpt:1.4 Thu Feb 7 04:24:56 2008 +++ pecl/phar/tests/frontcontroller21.phpt Thu Feb 7 23:42:02 2008 @@ -13,7 +13,7 @@ Content-type: text/html --EXPECTF-- string(10) "/index.php" -string(%d) "phar://%sfrontcontroller21.php/index.php" +string(10) "/index.php" string(%d) "phar://%sfrontcontroller21.php/index.php" string(18) "/index.php?test=hi" string(32) "/frontcontroller21.php/index.php" http://cvs.php.net/viewvc.cgi/pecl/phar/tests/frontcontroller3.phar?r1=1.3&r2=1.4&diff_format=u Index: pecl/phar/tests/frontcontroller3.phar http://cvs.php.net/viewvc.cgi/pecl/phar/tests/frontcontroller3.phar.inc?r1=1.2&r2=1.3&diff_format=u Index: pecl/phar/tests/frontcontroller3.phar.inc diff -u pecl/phar/tests/frontcontroller3.phar.inc:1.2 pecl/phar/tests/frontcontroller3.phar.inc:1.3 --- pecl/phar/tests/frontcontroller3.phar.inc:1.2 Sat Jan 5 04:30:29 2008 +++ pecl/phar/tests/frontcontroller3.phar.inc Thu Feb 7 23:42:02 2008 @@ -5,7 +5,12 @@ $a['a.jpg'] = 'hio'; $a['a.phps'] = '<?php function hio(){}'; $a->setStub('<?php -Phar::webPhar("whatever", "index.php", null, array(), array("/hi" => "a.phps")); +function s($a) +{ + static $b = array("/hi" => "a.phps"); + if (isset($b[$a])) return $b[$a]; +} +Phar::webPhar("whatever", "/index.php", null, array(), "s"); echo "oops did not run\n"; var_dump($_ENV, $_SERVER); __HALT_COMPILER();'); http://cvs.php.net/viewvc.cgi/pecl/phar/tests/frontcontroller4.phar?r1=1.1&r2=1.2&diff_format=u Index: pecl/phar/tests/frontcontroller4.phar http://cvs.php.net/viewvc.cgi/pecl/phar/tests/frontcontroller4.phar.inc?r1=1.1&r2=1.2&diff_format=u Index: pecl/phar/tests/frontcontroller4.phar.inc diff -u pecl/phar/tests/frontcontroller4.phar.inc:1.1 pecl/phar/tests/frontcontroller4.phar.inc:1.2 --- pecl/phar/tests/frontcontroller4.phar.inc:1.1 Sat Jan 5 05:12:43 2008 +++ pecl/phar/tests/frontcontroller4.phar.inc Thu Feb 7 23:42:02 2008 @@ -5,7 +5,13 @@ $a['a.jpg'] = 'hio'; $a['a.phps'] = '<?php function hio(){}'; $a->setStub('<?php -Phar::webPhar("whatever", "index.php", null, array(), array("/hi" => true)); +function s($a) +{ + static $b = array("/hi" => false); + if (isset($b[$a])) return $b[$a]; + return $a; +} +Phar::webPhar("whatever", "index.php", null, array(), "s"); echo "oops did not run\n"; var_dump($_ENV, $_SERVER); __HALT_COMPILER();'); http://cvs.php.net/viewvc.cgi/pecl/phar/tests/frontcontroller6.phpt?r1=1.2&r2=1.3&diff_format=u Index: pecl/phar/tests/frontcontroller6.phpt diff -u pecl/phar/tests/frontcontroller6.phpt:1.2 pecl/phar/tests/frontcontroller6.phpt:1.3 --- pecl/phar/tests/frontcontroller6.phpt:1.2 Thu Feb 7 04:24:57 2008 +++ pecl/phar/tests/frontcontroller6.phpt Thu Feb 7 23:42:02 2008 @@ -13,7 +13,7 @@ --EXPECT-- <html> <head> - <title>File Not Found<title> + <title>File Not Found</title> </head> <body> <h1>404 - File /notfound.php Not Found</h1> http://cvs.php.net/viewvc.cgi/pecl/phar/tests/frontcontroller8.phpt?r1=1.3&r2=1.4&diff_format=u Index: pecl/phar/tests/frontcontroller8.phpt diff -u pecl/phar/tests/frontcontroller8.phpt:1.3 pecl/phar/tests/frontcontroller8.phpt:1.4 --- pecl/phar/tests/frontcontroller8.phpt:1.3 Thu Feb 7 04:24:57 2008 +++ pecl/phar/tests/frontcontroller8.phpt Thu Feb 7 23:42:02 2008 @@ -13,9 +13,9 @@ --EXPECT-- <html> <head> - <title>File Not Found<title> + <title>File Not Found</title> </head> <body> - <h1>404 - File index.php Not Found</h1> + <h1>404 - File /index.php Not Found</h1> </body> </html> \ No newline at end of file http://cvs.php.net/viewvc.cgi/pecl/phar/tests/withphar_web.phpt?r1=1.1&r2=1.2&diff_format=u Index: pecl/phar/tests/withphar_web.phpt diff -u pecl/phar/tests/withphar_web.phpt:1.1 pecl/phar/tests/withphar_web.phpt:1.2 --- pecl/phar/tests/withphar_web.phpt:1.1 Sun Jan 20 00:49:44 2008 +++ pecl/phar/tests/withphar_web.phpt Thu Feb 7 23:42:02 2008 @@ -3,8 +3,9 @@ --SKIPIF-- <?php if (!extension_loaded("phar")) die("skip");?> --ENV-- -SCRIPT_NAME=/withphar_web.php/web.php +SCRIPT_NAME=/withphar_web.php REQUEST_URI=/withphar_web.php/web.php +PATH_INFO=/web.php --FILE_EXTERNAL-- nophar.phar --EXPECTHEADERS-- http://cvs.php.net/viewvc.cgi/pecl/phar/tests/tar/frontcontroller10.phar.phpt?r1=1.3&r2=1.4&diff_format=u Index: pecl/phar/tests/tar/frontcontroller10.phar.phpt diff -u pecl/phar/tests/tar/frontcontroller10.phar.phpt:1.3 pecl/phar/tests/tar/frontcontroller10.phar.phpt:1.4 --- pecl/phar/tests/tar/frontcontroller10.phar.phpt:1.3 Thu Feb 7 04:24:57 2008 +++ pecl/phar/tests/tar/frontcontroller10.phar.phpt Thu Feb 7 23:42:02 2008 @@ -10,9 +10,13 @@ frontcontroller4.phar.tar --EXPECTHEADERS-- Content-type: text/html ---EXPECTF-- -Fatal error: Uncaught exception 'UnexpectedValueException' with message 'phar rewrite value for "/hi" was not a string' in %sfrontcontroller10.phar.php:2 -Stack trace: -#0 %sfrontcontroller10.phar.php(2): Phar::webPhar('whatever', 'index.php', '', Array, Array) -#1 {main} - thrown in %sfrontcontroller10.phar.php on line 2 \ No newline at end of file +Status: 403 Access Denied +--EXPECT-- +<html> + <head> + <title>Access Denied</title> + </head> + <body> + <h1>403 - File /hi Access Denied</h1> + </body> +</html> \ No newline at end of file http://cvs.php.net/viewvc.cgi/pecl/phar/tests/tar/frontcontroller21.phar.phpt?r1=1.3&r2=1.4&diff_format=u Index: pecl/phar/tests/tar/frontcontroller21.phar.phpt diff -u pecl/phar/tests/tar/frontcontroller21.phar.phpt:1.3 pecl/phar/tests/tar/frontcontroller21.phar.phpt:1.4 --- pecl/phar/tests/tar/frontcontroller21.phar.phpt:1.3 Thu Feb 7 04:24:57 2008 +++ pecl/phar/tests/tar/frontcontroller21.phar.phpt Thu Feb 7 23:42:02 2008 @@ -13,7 +13,7 @@ Content-type: text/html --EXPECTF-- string(10) "/index.php" -string(%d) "phar://%sfrontcontroller21.phar.php/index.php" +string(10) "/index.php" string(%d) "phar://%sfrontcontroller21.phar.php/index.php" string(18) "/index.php?test=hi" string(37) "/frontcontroller21.phar.php/index.php" http://cvs.php.net/viewvc.cgi/pecl/phar/tests/tar/frontcontroller3.phar.inc?r1=1.1&r2=1.2&diff_format=u Index: pecl/phar/tests/tar/frontcontroller3.phar.inc diff -u pecl/phar/tests/tar/frontcontroller3.phar.inc:1.1 pecl/phar/tests/tar/frontcontroller3.phar.inc:1.2 --- pecl/phar/tests/tar/frontcontroller3.phar.inc:1.1 Mon Jan 7 05:35:16 2008 +++ pecl/phar/tests/tar/frontcontroller3.phar.inc Thu Feb 7 23:42:02 2008 @@ -5,7 +5,12 @@ $a['a.jpg'] = 'hio'; $a['a.phps'] = '<?php function hio(){}'; $a->setStub('<?php -Phar::webPhar("whatever", "index.php", null, array(), array("/hi" => "a.phps")); +function s($a) +{ + static $b = array("/hi" => "a.phps"); + if (isset($b[$a])) return $b[$a]; +} +Phar::webPhar("whatever", "/index.php", null, array(), "s"); echo "oops did not run\n"; var_dump($_ENV, $_SERVER); __HALT_COMPILER();'); http://cvs.php.net/viewvc.cgi/pecl/phar/tests/tar/frontcontroller3.phar.tar?r1=1.1&r2=1.2&diff_format=u Index: pecl/phar/tests/tar/frontcontroller3.phar.tar http://cvs.php.net/viewvc.cgi/pecl/phar/tests/tar/frontcontroller4.phar.inc?r1=1.1&r2=1.2&diff_format=u Index: pecl/phar/tests/tar/frontcontroller4.phar.inc diff -u pecl/phar/tests/tar/frontcontroller4.phar.inc:1.1 pecl/phar/tests/tar/frontcontroller4.phar.inc:1.2 --- pecl/phar/tests/tar/frontcontroller4.phar.inc:1.1 Mon Jan 7 05:35:16 2008 +++ pecl/phar/tests/tar/frontcontroller4.phar.inc Thu Feb 7 23:42:02 2008 @@ -5,7 +5,13 @@ $a['a.jpg'] = 'hio'; $a['a.phps'] = '<?php function hio(){}'; $a->setStub('<?php -Phar::webPhar("whatever", "index.php", null, array(), array("/hi" => true)); +function s($a) +{ + static $b = array("/hi" => false); + if (isset($b[$a])) return $b[$a]; + return $a; +} +Phar::webPhar("whatever", "index.php", null, array(), "s"); echo "oops did not run\n"; var_dump($_ENV, $_SERVER); __HALT_COMPILER();'); http://cvs.php.net/viewvc.cgi/pecl/phar/tests/tar/frontcontroller4.phar.tar?r1=1.1&r2=1.2&diff_format=u Index: pecl/phar/tests/tar/frontcontroller4.phar.tar http://cvs.php.net/viewvc.cgi/pecl/phar/tests/tar/frontcontroller6.phar.phpt?r1=1.2&r2=1.3&diff_format=u Index: pecl/phar/tests/tar/frontcontroller6.phar.phpt diff -u pecl/phar/tests/tar/frontcontroller6.phar.phpt:1.2 pecl/phar/tests/tar/frontcontroller6.phar.phpt:1.3 --- pecl/phar/tests/tar/frontcontroller6.phar.phpt:1.2 Thu Feb 7 04:24:57 2008 +++ pecl/phar/tests/tar/frontcontroller6.phar.phpt Thu Feb 7 23:42:02 2008 @@ -13,7 +13,7 @@ --EXPECT-- <html> <head> - <title>File Not Found<title> + <title>File Not Found</title> </head> <body> <h1>404 - File /notfound.php Not Found</h1> http://cvs.php.net/viewvc.cgi/pecl/phar/tests/tar/frontcontroller8.phar.phpt?r1=1.2&r2=1.3&diff_format=u Index: pecl/phar/tests/tar/frontcontroller8.phar.phpt diff -u pecl/phar/tests/tar/frontcontroller8.phar.phpt:1.2 pecl/phar/tests/tar/frontcontroller8.phar.phpt:1.3 --- pecl/phar/tests/tar/frontcontroller8.phar.phpt:1.2 Thu Feb 7 04:24:57 2008 +++ pecl/phar/tests/tar/frontcontroller8.phar.phpt Thu Feb 7 23:42:02 2008 @@ -13,9 +13,9 @@ --EXPECT-- <html> <head> - <title>File Not Found<title> + <title>File Not Found</title> </head> <body> - <h1>404 - File index.php Not Found</h1> + <h1>404 - File /index.php Not Found</h1> </body> </html> \ No newline at end of file http://cvs.php.net/viewvc.cgi/pecl/phar/tests/zip/frontcontroller10.phar.phpt?r1=1.4&r2=1.5&diff_format=u Index: pecl/phar/tests/zip/frontcontroller10.phar.phpt diff -u pecl/phar/tests/zip/frontcontroller10.phar.phpt:1.4 pecl/phar/tests/zip/frontcontroller10.phar.phpt:1.5 --- pecl/phar/tests/zip/frontcontroller10.phar.phpt:1.4 Thu Feb 7 04:24:57 2008 +++ pecl/phar/tests/zip/frontcontroller10.phar.phpt Thu Feb 7 23:42:02 2008 @@ -10,9 +10,13 @@ frontcontroller4.phar.zip --EXPECTHEADERS-- Content-type: text/html ---EXPECTF-- -Fatal error: Uncaught exception 'UnexpectedValueException' with message 'phar rewrite value for "/hi" was not a string' in %sfrontcontroller10.phar.php:2 -Stack trace: -#0 %sfrontcontroller10.phar.php(2): Phar::webPhar('whatever', 'index.php', '', Array, Array) -#1 {main} - thrown in %sfrontcontroller10.phar.php on line 2 \ No newline at end of file +Status: 403 Access Denied +--EXPECT-- +<html> + <head> + <title>Access Denied</title> + </head> + <body> + <h1>403 - File /hi Access Denied</h1> + </body> +</html> \ No newline at end of file http://cvs.php.net/viewvc.cgi/pecl/phar/tests/zip/frontcontroller21.phar.phpt?r1=1.5&r2=1.6&diff_format=u Index: pecl/phar/tests/zip/frontcontroller21.phar.phpt diff -u pecl/phar/tests/zip/frontcontroller21.phar.phpt:1.5 pecl/phar/tests/zip/frontcontroller21.phar.phpt:1.6 --- pecl/phar/tests/zip/frontcontroller21.phar.phpt:1.5 Thu Feb 7 04:24:57 2008 +++ pecl/phar/tests/zip/frontcontroller21.phar.phpt Thu Feb 7 23:42:02 2008 @@ -13,7 +13,7 @@ Content-type: text/html --EXPECTF-- string(10) "/index.php" -string(%d) "phar://%sfrontcontroller21.phar.php/index.php" +string(10) "/index.php" string(%d) "phar://%sfrontcontroller21.phar.php/index.php" string(18) "/index.php?test=hi" string(37) "/frontcontroller21.phar.php/index.php" http://cvs.php.net/viewvc.cgi/pecl/phar/tests/zip/frontcontroller3.phar.inc?r1=1.1&r2=1.2&diff_format=u Index: pecl/phar/tests/zip/frontcontroller3.phar.inc diff -u pecl/phar/tests/zip/frontcontroller3.phar.inc:1.1 pecl/phar/tests/zip/frontcontroller3.phar.inc:1.2 --- pecl/phar/tests/zip/frontcontroller3.phar.inc:1.1 Tue Jan 8 07:08:45 2008 +++ pecl/phar/tests/zip/frontcontroller3.phar.inc Thu Feb 7 23:42:02 2008 @@ -5,7 +5,12 @@ $a['a.jpg'] = 'hio'; $a['a.phps'] = '<?php function hio(){}'; $a->setStub('<?php -Phar::webPhar("whatever", "index.php", null, array(), array("/hi" => "a.phps")); +function s($a) +{ + static $b = array("/hi" => "a.phps"); + if (isset($b[$a])) return $b[$a]; +} +Phar::webPhar("whatever", "/index.php", null, array(), "s"); echo "oops did not run\n"; var_dump($_ENV, $_SERVER); __HALT_COMPILER();'); http://cvs.php.net/viewvc.cgi/pecl/phar/tests/zip/frontcontroller3.phar.zip?r1=1.1&r2=1.2&diff_format=u Index: pecl/phar/tests/zip/frontcontroller3.phar.zip http://cvs.php.net/viewvc.cgi/pecl/phar/tests/zip/frontcontroller4.phar.inc?r1=1.1&r2=1.2&diff_format=u Index: pecl/phar/tests/zip/frontcontroller4.phar.inc diff -u pecl/phar/tests/zip/frontcontroller4.phar.inc:1.1 pecl/phar/tests/zip/frontcontroller4.phar.inc:1.2 --- pecl/phar/tests/zip/frontcontroller4.phar.inc:1.1 Tue Jan 8 07:08:45 2008 +++ pecl/phar/tests/zip/frontcontroller4.phar.inc Thu Feb 7 23:42:02 2008 @@ -5,7 +5,13 @@ $a['a.jpg'] = 'hio'; $a['a.phps'] = '<?php function hio(){}'; $a->setStub('<?php -Phar::webPhar("whatever", "index.php", null, array(), array("/hi" => true)); +function s($a) +{ + static $b = array("/hi" => false); + if (isset($b[$a])) return $b[$a]; + return $a; +} +Phar::webPhar("whatever", "index.php", null, array(), "s"); echo "oops did not run\n"; var_dump($_ENV, $_SERVER); __HALT_COMPILER();'); http://cvs.php.net/viewvc.cgi/pecl/phar/tests/zip/frontcontroller4.phar.zip?r1=1.1&r2=1.2&diff_format=u Index: pecl/phar/tests/zip/frontcontroller4.phar.zip http://cvs.php.net/viewvc.cgi/pecl/phar/tests/zip/frontcontroller6.phar.phpt?r1=1.4&r2=1.5&diff_format=u Index: pecl/phar/tests/zip/frontcontroller6.phar.phpt diff -u pecl/phar/tests/zip/frontcontroller6.phar.phpt:1.4 pecl/phar/tests/zip/frontcontroller6.phar.phpt:1.5 --- pecl/phar/tests/zip/frontcontroller6.phar.phpt:1.4 Thu Feb 7 04:24:57 2008 +++ pecl/phar/tests/zip/frontcontroller6.phar.phpt Thu Feb 7 23:42:02 2008 @@ -13,7 +13,7 @@ --EXPECT-- <html> <head> - <title>File Not Found<title> + <title>File Not Found</title> </head> <body> <h1>404 - File /notfound.php Not Found</h1> http://cvs.php.net/viewvc.cgi/pecl/phar/tests/zip/frontcontroller8.phar.phpt?r1=1.4&r2=1.5&diff_format=u Index: pecl/phar/tests/zip/frontcontroller8.phar.phpt diff -u pecl/phar/tests/zip/frontcontroller8.phar.phpt:1.4 pecl/phar/tests/zip/frontcontroller8.phar.phpt:1.5 --- pecl/phar/tests/zip/frontcontroller8.phar.phpt:1.4 Thu Feb 7 04:24:57 2008 +++ pecl/phar/tests/zip/frontcontroller8.phar.phpt Thu Feb 7 23:42:02 2008 @@ -13,9 +13,9 @@ --EXPECT-- <html> <head> - <title>File Not Found<title> + <title>File Not Found</title> </head> <body> - <h1>404 - File index.php Not Found</h1> + <h1>404 - File /index.php Not Found</h1> </body> </html> \ No newline at end of file