summaryrefslogtreecommitdiff
path: root/ext/standard/url.c
diff options
context:
space:
mode:
authorIlia Alshanetsky <iliaa@php.net>2009-11-04 13:44:10 +0000
committerIlia Alshanetsky <iliaa@php.net>2009-11-04 13:44:10 +0000
commit41611fd003b60fcc3a9e0566acb2848416639da5 (patch)
tree543bebed0a7d9ae717487690f1435c773212492b /ext/standard/url.c
parent973d7badd5e285c9140c15500193026b86833875 (diff)
downloadphp-git-41611fd003b60fcc3a9e0566acb2848416639da5.tar.gz
Fixed bug #50073 (parse_url() incorrect when ? in fragment).
Diffstat (limited to 'ext/standard/url.c')
-rw-r--r--ext/standard/url.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/ext/standard/url.c b/ext/standard/url.c
index 61bc393ea1..15c6a11109 100644
--- a/ext/standard/url.c
+++ b/ext/standard/url.c
@@ -201,10 +201,21 @@ PHPAPI php_url *php_url_parse_ex(char const *str, int length)
e = ue;
if (!(p = memchr(s, '/', (ue - s)))) {
- if ((p = memchr(s, '?', (ue - s)))) {
- e = p;
- } else if ((p = memchr(s, '#', (ue - s)))) {
- e = p;
+ char *query, *fragment;
+
+ query = memchr(s, '?', (ue - s));
+ fragment = memchr(s, '#', (ue - s));
+
+ if (query && fragment) {
+ if (query > fragment) {
+ p = e = fragment;
+ } else {
+ p = e = query;
+ }
+ } else if (query) {
+ p = e = query;
+ } else if (fragment) {
+ p = e = fragment;
}
} else {
e = p;
@@ -285,10 +296,10 @@ PHPAPI php_url *php_url_parse_ex(char const *str, int length)
if ((p = memchr(s, '?', (ue - s)))) {
pp = strchr(s, '#');
-
+
if (pp && pp < p) {
p = pp;
- pp = strchr(pp+2, '#');
+ goto label_parse;
}
if (p - s) {