From e67c584348beec3447e923a5ca8f1bfe78e94827 Mon Sep 17 00:00:00 2001 From: Greg Beaver Date: Thu, 7 Feb 2008 23:42:03 +0000 Subject: [PATCH] [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. --- ext/phar/phar_object.c | 295 ++++++++++++------ ext/phar/tests/frontcontroller10.phpt | 16 +- ext/phar/tests/frontcontroller21.phpt | 2 +- ext/phar/tests/frontcontroller3.phar | Bin 342 -> 421 bytes ext/phar/tests/frontcontroller3.phar.inc | 7 +- ext/phar/tests/frontcontroller4.phar | Bin 338 -> 432 bytes ext/phar/tests/frontcontroller4.phar.inc | 8 +- ext/phar/tests/frontcontroller6.phpt | 2 +- ext/phar/tests/frontcontroller8.phpt | 4 +- .../tests/tar/frontcontroller10.phar.phpt | 16 +- .../tests/tar/frontcontroller21.phar.phpt | 2 +- ext/phar/tests/tar/frontcontroller3.phar.inc | 7 +- ext/phar/tests/tar/frontcontroller3.phar.tar | Bin 5120 -> 5120 bytes ext/phar/tests/tar/frontcontroller4.phar.inc | 8 +- ext/phar/tests/tar/frontcontroller4.phar.tar | Bin 5120 -> 5120 bytes ext/phar/tests/tar/frontcontroller6.phar.phpt | 2 +- ext/phar/tests/tar/frontcontroller8.phar.phpt | 4 +- ext/phar/tests/withphar_web.phpt | 3 +- .../tests/zip/frontcontroller10.phar.phpt | 16 +- .../tests/zip/frontcontroller21.phar.phpt | 2 +- ext/phar/tests/zip/frontcontroller3.phar.inc | 7 +- ext/phar/tests/zip/frontcontroller3.phar.zip | Bin 562 -> 801 bytes ext/phar/tests/zip/frontcontroller4.phar.inc | 8 +- ext/phar/tests/zip/frontcontroller4.phar.zip | Bin 561 -> 812 bytes ext/phar/tests/zip/frontcontroller6.phar.phpt | 2 +- ext/phar/tests/zip/frontcontroller8.phar.phpt | 4 +- 26 files changed, 283 insertions(+), 132 deletions(-) diff --git a/ext/phar/phar_object.c b/ext/phar/phar_object.c index 434e7d9812..09f5986148 100755 --- a/ext/phar/phar_object.c +++ b/ext/phar/phar_object.c @@ -74,7 +74,7 @@ static int phar_file_type(HashTable *mimes, char *file, char **mime_type TSRMLS_ } /* }}} */ -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 @@ static void phar_mung_server_vars(char *fname, char *entry, int entry_len, char 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 @@ static void phar_mung_server_vars(char *fname, char *entry, int entry_len, char 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 @@ static void phar_mung_server_vars(char *fname, char *entry, int entry_len, char 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 @@ static int phar_file_action(phar_entry_data *phar, char *mime_type, int code, ch } 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 @@ static int phar_file_action(phar_entry_data *phar, char *mime_type, int code, ch 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 @@ static int phar_file_action(phar_entry_data *phar, char *mime_type, int code, ch 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("\n \n Access Denied\n \n \n

403 - File ", sizeof("\n \n Access Denied\n \n \n

403 - File ") - 1); + PHPWRITE(entry, entry_len); + PHPWRITE(" Access Denied

\n \n", sizeof(" Access Denied\n \n") - 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 @@ void phar_do_404(char *fname, int fname_len, char *f404, int f404_len, char *ent } 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 @@ nofile: ctr.line = "HTTP/1.0 404 Not Found"; sapi_header_op(SAPI_HEADER_REPLACE, &ctr TSRMLS_CC); sapi_send_headers(TSRMLS_C); - PHPWRITE("\n \n 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\n \n \n

404 - File ", sizeof("\n \n File Not Found\n \n \n

404 - File ") - 1); PHPWRITE(entry, entry_len); PHPWRITE(" Not Found

\n \n", sizeof(" Not Found\n \n") - 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 @@ PHP_METHOD(Phar, webPhar) { 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 @@ PHP_METHOD(Phar, webPhar) 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]; + + MAKE_STD_ZVAL(params); + ZVAL_STRINGL(params, entry, entry_len, 1); + zp[0] = ¶ms; + + 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; - pt = estrndup(path_info, (pt - path_info) + (fname_len - (basename - fname))); + 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; + } + } -skip_entry_dupe: + 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 @@ skip_entry_dupe: } } - 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 @@ skip_entry_dupe: 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); diff --git a/ext/phar/tests/frontcontroller10.phpt b/ext/phar/tests/frontcontroller10.phpt index a96ffe1159..195fdd8dff 100644 --- a/ext/phar/tests/frontcontroller10.phpt +++ b/ext/phar/tests/frontcontroller10.phpt @@ -10,9 +10,13 @@ PATH_INFO=/hi 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-- + + + Access Denied + + +

403 - File /hi Access Denied

+ + \ No newline at end of file diff --git a/ext/phar/tests/frontcontroller21.phpt b/ext/phar/tests/frontcontroller21.phpt index 8523209142..cfed28a98f 100644 --- a/ext/phar/tests/frontcontroller21.phpt +++ b/ext/phar/tests/frontcontroller21.phpt @@ -13,7 +13,7 @@ frontcontroller12.phar 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" diff --git a/ext/phar/tests/frontcontroller3.phar b/ext/phar/tests/frontcontroller3.phar index 69908c02ab0d0ac55527f85d5de401b9e2c1e402..fc63fd4f1c4235975af5ce0916476d9c8d290609 100644 GIT binary patch delta 178 zcmcb{w3J!R#=anL z(-br^i;GiBG*ptJRT5)0H5H0dOG=CKfa*YeYpz^?Dq1GO{}R<;rv(kLtqfB}@zq J4DL?8P5>zqCjI~b diff --git a/ext/phar/tests/frontcontroller3.phar.inc b/ext/phar/tests/frontcontroller3.phar.inc index 60d9ee0708..ef2bee282a 100644 --- a/ext/phar/tests/frontcontroller3.phar.inc +++ b/ext/phar/tests/frontcontroller3.phar.inc @@ -5,7 +5,12 @@ $a['a.php'] = 'hio'; $a['a.jpg'] = 'hio'; $a['a.phps'] = 'setStub(' "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();'); diff --git a/ext/phar/tests/frontcontroller4.phar b/ext/phar/tests/frontcontroller4.phar index 34605264a21e3d44fca55e9b7f18709e50592a02..c9413ba875c8aea52ab799084046f4248fd65700 100644 GIT binary patch delta 193 zcmcb_w1K(a#=anLAuic(8Ti}HXvL41fRm{6iM zS1ngSMq-hbRe5Ssz(fHZW~E}Ki2=pT9DS=N9+Lx8&*eeXWKKq1nf1Cyra3Hi_gSaH WuaUng}A~zFI Jox78-69DuFA}{~| diff --git a/ext/phar/tests/frontcontroller4.phar.inc b/ext/phar/tests/frontcontroller4.phar.inc index 5d9728cb19..5c6a43f954 100644 --- a/ext/phar/tests/frontcontroller4.phar.inc +++ b/ext/phar/tests/frontcontroller4.phar.inc @@ -5,7 +5,13 @@ $a['a.php'] = 'hio'; $a['a.jpg'] = 'hio'; $a['a.phps'] = 'setStub(' 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();'); diff --git a/ext/phar/tests/frontcontroller6.phpt b/ext/phar/tests/frontcontroller6.phpt index 7ec367285f..8e5d87a1be 100644 --- a/ext/phar/tests/frontcontroller6.phpt +++ b/ext/phar/tests/frontcontroller6.phpt @@ -13,7 +13,7 @@ Status: 404 Not Found --EXPECT-- - File Not Found<title> + <title>File Not Found

404 - File /notfound.php Not Found

diff --git a/ext/phar/tests/frontcontroller8.phpt b/ext/phar/tests/frontcontroller8.phpt index e48f231538..088c7f9d8c 100644 --- a/ext/phar/tests/frontcontroller8.phpt +++ b/ext/phar/tests/frontcontroller8.phpt @@ -13,9 +13,9 @@ Status: 404 Not Found --EXPECT-- - File Not Found<title> + <title>File Not Found -

404 - File index.php Not Found

+

404 - File /index.php Not Found

\ No newline at end of file diff --git a/ext/phar/tests/tar/frontcontroller10.phar.phpt b/ext/phar/tests/tar/frontcontroller10.phar.phpt index b46fbbdf03..fbbe312d1e 100644 --- a/ext/phar/tests/tar/frontcontroller10.phar.phpt +++ b/ext/phar/tests/tar/frontcontroller10.phar.phpt @@ -10,9 +10,13 @@ PATH_INFO=/hi 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-- + + + Access Denied + + +

403 - File /hi Access Denied

+ + \ No newline at end of file diff --git a/ext/phar/tests/tar/frontcontroller21.phar.phpt b/ext/phar/tests/tar/frontcontroller21.phar.phpt index f65690f1dc..2313cbba75 100644 --- a/ext/phar/tests/tar/frontcontroller21.phar.phpt +++ b/ext/phar/tests/tar/frontcontroller21.phar.phpt @@ -13,7 +13,7 @@ frontcontroller12.phar.tar 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" diff --git a/ext/phar/tests/tar/frontcontroller3.phar.inc b/ext/phar/tests/tar/frontcontroller3.phar.inc index e4416b78d9..02525232b6 100644 --- a/ext/phar/tests/tar/frontcontroller3.phar.inc +++ b/ext/phar/tests/tar/frontcontroller3.phar.inc @@ -5,7 +5,12 @@ $a['a.php'] = 'hio'; $a['a.jpg'] = 'hio'; $a['a.phps'] = 'setStub(' "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();'); diff --git a/ext/phar/tests/tar/frontcontroller3.phar.tar b/ext/phar/tests/tar/frontcontroller3.phar.tar index 59f32e1f47ebc332320fbecd50ccef527bbe723c..6f7361f5814be669e600db0eb786491cd15c5afd 100644 GIT binary patch delta 241 zcmZqBXwaC@BVcM|ZfI;^U}yjYre;QFlLZ-5H#0J}FpC?T83TpQkrkMm7??m5u(C2L zq?P6+mt^MWDHLm{Bx-V1b148paYLK3$YyjvFJ)Hmm delta 184 zcmZqBXwaC@BVb}+WNu_)YH9!kre-DvlLZ-5H#0J}FpC?Rm>3uum?JANH!(DUC}3q} zoSexfZJe2xl3JlxkWrwdqmWmclcS@MSX7i)si6sDDCuWpDk<37DJUg^locy!ZeGk5 f%Q$g^|0E7{+l>t&hI4i^qqxh=z!>T--v4X>`q(dV diff --git a/ext/phar/tests/tar/frontcontroller4.phar.inc b/ext/phar/tests/tar/frontcontroller4.phar.inc index d293f99dd5..eb1d56f0d4 100644 --- a/ext/phar/tests/tar/frontcontroller4.phar.inc +++ b/ext/phar/tests/tar/frontcontroller4.phar.inc @@ -5,7 +5,13 @@ $a['a.php'] = 'hio'; $a['a.jpg'] = 'hio'; $a['a.phps'] = 'setStub(' 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();'); diff --git a/ext/phar/tests/tar/frontcontroller4.phar.tar b/ext/phar/tests/tar/frontcontroller4.phar.tar index d494d98efee6d6128f0159fa30f80270ec306801..22ac39f35aa46d1c8d39915decee9a12f8e20c69 100644 GIT binary patch delta 261 zcmZqBXwaC@BVcM|ZfIm=Xlwukre?-QlLZ-5H#0J}FpC?Tn;94ym?JANH!(DUC}3q} ztWPV=OD@UG&r>MYP)XF}s^(Gvg5r|IlFVcUl_UjQg~Xzw#7Ye%{ftZ{1zS6Xw8Wg^ zR84EJvdlCEjm+ZW)DjJqq-d4ISWQiZqSTVoqCB8Z5FernCX{H+Rm&BSkyvD9Ri2sz sVrVFpPZncSV^%6w+8n?Z#5joq-77}M5SMaxGoyIY%)kihN#6f#0G2gFyZ`_I delta 154 zcmZqBXwaC@BVb}+WNu_)YHk1ore-EalLZ-5H#0J}FpC?R7#J8Dm?JANH!*}NU}a^T zT*_u9l2}xfSgE0;pOLAgU~8vPQdF9%xp^I15aVP8#<)ow=;j+6L(J#wW=65u%)l6G IFz - File Not Found<title> + <title>File Not Found

404 - File /notfound.php Not Found

diff --git a/ext/phar/tests/tar/frontcontroller8.phar.phpt b/ext/phar/tests/tar/frontcontroller8.phar.phpt index 22ddf22af7..0f6f50c700 100644 --- a/ext/phar/tests/tar/frontcontroller8.phar.phpt +++ b/ext/phar/tests/tar/frontcontroller8.phar.phpt @@ -13,9 +13,9 @@ Status: 404 Not Found --EXPECT-- - File Not Found<title> + <title>File Not Found -

404 - File index.php Not Found

+

404 - File /index.php Not Found

\ No newline at end of file diff --git a/ext/phar/tests/withphar_web.phpt b/ext/phar/tests/withphar_web.phpt index 887150de79..68b0241dd9 100644 --- a/ext/phar/tests/withphar_web.phpt +++ b/ext/phar/tests/withphar_web.phpt @@ -3,8 +3,9 @@ Phar: default web stub, with phar extension --SKIPIF-- --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-- diff --git a/ext/phar/tests/zip/frontcontroller10.phar.phpt b/ext/phar/tests/zip/frontcontroller10.phar.phpt index 275c47f809..76c2ca2c04 100644 --- a/ext/phar/tests/zip/frontcontroller10.phar.phpt +++ b/ext/phar/tests/zip/frontcontroller10.phar.phpt @@ -10,9 +10,13 @@ PATH_INFO=/hi 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-- + + + Access Denied + + +

403 - File /hi Access Denied

+ + \ No newline at end of file diff --git a/ext/phar/tests/zip/frontcontroller21.phar.phpt b/ext/phar/tests/zip/frontcontroller21.phar.phpt index 3f3e9f1add..e1d8ea2fdf 100644 --- a/ext/phar/tests/zip/frontcontroller21.phar.phpt +++ b/ext/phar/tests/zip/frontcontroller21.phar.phpt @@ -13,7 +13,7 @@ frontcontroller12.phar.zip 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" diff --git a/ext/phar/tests/zip/frontcontroller3.phar.inc b/ext/phar/tests/zip/frontcontroller3.phar.inc index a622b81f48..8cd949aa74 100644 --- a/ext/phar/tests/zip/frontcontroller3.phar.inc +++ b/ext/phar/tests/zip/frontcontroller3.phar.inc @@ -5,7 +5,12 @@ $a['a.php'] = 'hio'; $a['a.jpg'] = 'hio'; $a['a.phps'] = 'setStub(' "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();'); diff --git a/ext/phar/tests/zip/frontcontroller3.phar.zip b/ext/phar/tests/zip/frontcontroller3.phar.zip index 0ca3681e0b0cbe71e5b1f13bf75afd7500e4193a..5ac63f168292c8e5cae883469f1d7a2fe6382094 100644 GIT binary patch literal 801 zcma)4%}&BV5H129n!rI5k7lyzp-l)}2?)d}Q3Gm&hKriIK(T9Z+w=!8go8H^o_qp* z0Iz!R;4A2Z7!SUH(;^ZIMyJ_yCo|u-lkXd~5{(H#+}>c++Jj2S=8uA`V2r za9rxLCP)n^0JUv;DU*!B2o#Dyf^i(8RsI?DIgifTYBH04>Rs{I;rpX6f6dh=uN`}Vw#o%E!F~Vx?p?! zn3KHNrMA}cE-YEn%6s(`NZLWURxj6ZG)>!HuO4a}`@8B+wOo^xJd}zFaayohq0g!&ghqge_E~SelV{EcpEz;m`h_*?SkdfQ7cuKoA5hPHAm#&Npi>fy z^ovVMlR%C#?e^w6WFW%u-SX(;i>^$r-`C2!FmZ)?Pg&P8VU`1zDd$W7{QTVo=FG;k zYd17b2|KDY+h;Gs(UYt0^{6Fr-LS~DTWvY(C~xlUrmnzR&EL%Ha+^2YWn88Ddcwvz zGp2uSxYy2CviRUnxknG?@f91b()jv;&t&4CsHGE5Sc{8_e^!0^GQj4^$1=_Htm0Fi z+6QsetStub(' 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();'); diff --git a/ext/phar/tests/zip/frontcontroller4.phar.zip b/ext/phar/tests/zip/frontcontroller4.phar.zip index 08208a5565554ed3e2147ee064c6199159031bd1..70c70a1ddaf31e5e89fbe5809dd8a86d00167afe 100644 GIT binary patch literal 812 zcma)4!A`Pl&Ar^wh2#)X1lTDCTWdtYz7d}7x3B;pW8+zjJhb1}hY33fQy}Zdh@%fCPKKKr^ipU-m0wxHhovBN+WJ?1r{( literal 561 zcmWIWW@Zs#U|`^2uxwMeSo?na1y&%B8Hho2qFzBp!RZrc*ck!{sLLuy$D&R+r!heS zXpR^Vv%$!&ghqge_E~SelV{EcpEz;m`h_*?Skdg*!zyIb3)C|ki1~mR=#<1F z{o<0+B#@&_yH9f+G7w;R|F-)9r`NjsD zZ?Q>FI;C~$^T{pt2^Nv2GcF3GHO#&IZ10T4kuh(6^N39RW$=$Z<`!S#-p0m75BGSS zIb7xN{xEmR@`FDaHFoVjtRyMwDLcP$Y0#Y6JVBMBrOK~02y{IX00%1ZS~P%K6ZL@Mi>?Jda1mAnfVBWasTf@kdY~fo^Z=QtK^)-C R3W_rZ79hL^q+J<7JOIE>lDhx^ diff --git a/ext/phar/tests/zip/frontcontroller6.phar.phpt b/ext/phar/tests/zip/frontcontroller6.phar.phpt index c881d29661..a1c8adfef0 100644 --- a/ext/phar/tests/zip/frontcontroller6.phar.phpt +++ b/ext/phar/tests/zip/frontcontroller6.phar.phpt @@ -13,7 +13,7 @@ Status: 404 Not Found --EXPECT-- - File Not Found<title> + <title>File Not Found

404 - File /notfound.php Not Found

diff --git a/ext/phar/tests/zip/frontcontroller8.phar.phpt b/ext/phar/tests/zip/frontcontroller8.phar.phpt index 0e596ddd1e..08ee754485 100644 --- a/ext/phar/tests/zip/frontcontroller8.phar.phpt +++ b/ext/phar/tests/zip/frontcontroller8.phar.phpt @@ -13,9 +13,9 @@ Status: 404 Not Found --EXPECT-- - File Not Found<title> + <title>File Not Found -

404 - File index.php Not Found

+

404 - File /index.php Not Found

\ No newline at end of file -- 2.50.1