From 25cdc7de2b09b4396286fb5f656347ec92da2c19 Mon Sep 17 00:00:00 2001 From: Greg Beaver Date: Mon, 21 Apr 2008 17:59:28 +0000 Subject: [PATCH] fix discovery of files hidden in a URL - makes using any regular front controller possible --- ext/phar/phar_object.c | 21 ++++++++++++------ ext/phar/tests/files/frontcontroller8.phar | Bin 479 -> 554 bytes .../tests/files/frontcontroller8.phar.inc | 1 + ext/phar/tests/frontcontroller25.phpt | 14 ++++++++++++ 4 files changed, 29 insertions(+), 7 deletions(-) create mode 100644 ext/phar/tests/frontcontroller25.phpt diff --git a/ext/phar/phar_object.c b/ext/phar/phar_object.c index a3af3695d4..e50092b195 100755 --- a/ext/phar/phar_object.c +++ b/ext/phar/phar_object.c @@ -384,7 +384,7 @@ nofile: 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; + char *e = *entry + 1, *u = NULL, *u1 = NULL, *saveu = NULL; int e_len = *entry_len - 1, u_len = 0; phar_archive_data **pphar; @@ -406,15 +406,22 @@ static void phar_postprocess_ru_web(char *fname, int fname_len, char **entry, in return; } if (u) { + u1 = strrchr(e, '/'); u[0] = '/'; saveu = u; - } - u = strrchr(e, '/'); - if (!u) { - if (saveu) { - saveu[0] = '/'; + e_len += u_len + 1; + u = u1; + if (!u) { + return; + } + } else { + u = strrchr(e, '/'); + if (!u) { + if (saveu) { + saveu[0] = '/'; + } + return; } - return; } u[0] = '\0'; u_len = strlen(u + 1); diff --git a/ext/phar/tests/files/frontcontroller8.phar b/ext/phar/tests/files/frontcontroller8.phar index a53bfe899634d7244ed7cd6b2e90371ece2e35e9..bd1070fc4fe253b025d21006e9553f4695202400 100644 GIT binary patch delta 252 zcmcc5yozPQY1YRK3=C`&FUZ#)zRcsn0_50MWuZjR`OX+(3R>(PVE%UZ%sBCr2?V zI)IE30*cnoQ+x?im64fmXk!mFMxiXRC_be$w?IQBKG-!V%rz)lDabW2)HOIHJ~YTv pDOS^Z@?=H>8A+oQo<|oytWQ@trMjRyXz@LMZ?M delta 109 zcmZ3*a-Vs^Y1RV_3=FIjFUTt|xya+e0_5h^J8W^Qad2_c`?URIAJ`+%%yOXaI0KnrR A+W-In diff --git a/ext/phar/tests/files/frontcontroller8.phar.inc b/ext/phar/tests/files/frontcontroller8.phar.inc index 84f12ce8d9..243da136c1 100644 --- a/ext/phar/tests/files/frontcontroller8.phar.inc +++ b/ext/phar/tests/files/frontcontroller8.phar.inc @@ -2,6 +2,7 @@ @unlink(dirname(__FILE__) . '/frontcontroller8.phar'); $a = new Phar(dirname(__FILE__) . '/frontcontroller8.phar'); $a['a.phps'] = 'hio1'; +$a['a1.phps'] = ' +--ENV-- +SCRIPT_NAME=/frontcontroller25.php +REQUEST_URI=/frontcontroller25.php/a1.phps/extra/stuff +PATH_INFO=/a1.phps/extra/stuff +--FILE_EXTERNAL-- +files/frontcontroller8.phar +--EXPECTHEADERS-- +Content-type: text/html +--EXPECTF-- +string(42) "/frontcontroller25.php/a1.phps/extra/stuff" \ No newline at end of file -- 2.50.1