From d6cafc6dbfa34c1ffe654f1a7957b0b7af957beb Mon Sep 17 00:00:00 2001 From: Ilia Alshanetsky Date: Wed, 4 Nov 2009 13:44:10 +0000 Subject: [PATCH] Fixed bug #50073 (parse_url() incorrect when ? in fragment). --- ext/standard/url.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/ext/standard/url.c b/ext/standard/url.c index d611e3b608..52566e9b3c 100644 --- a/ext/standard/url.c +++ b/ext/standard/url.c @@ -257,10 +257,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; @@ -341,10 +352,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) { -- 2.50.1