From 7205cf3cfe9e5dd142513541414b0327aa3be0cf Mon Sep 17 00:00:00 2001 From: Michael Wallner Date: Fri, 31 Oct 2014 15:03:11 +0100 Subject: [PATCH] fix edge cases with @ --- php_http_url.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/php_http_url.c b/php_http_url.c index 4263aab..1f06271 100644 --- a/php_http_url.c +++ b/php_http_url.c @@ -528,7 +528,7 @@ static STATUS parse_hostinfo(php_http_url_t *url, const char *ptr) case ':': if (port) { php_error_docref(NULL TSRMLS_CC, E_WARNING, - "Failed to parse port; duplicate ':' at pos %u in '%s'", + "Failed to parse port; unexpected ':' at pos %u in '%s'", (unsigned) (ptr - tmp), tmp); return FAILURE; } @@ -625,12 +625,19 @@ static STATUS parse_hostinfo(php_http_url_t *url, const char *ptr) static const char *parse_authority(php_http_url_t *url) { - const char *tmp = url->ptr; + const char *tmp = url->ptr, *host = NULL; do { switch (*url->ptr) { case '@': /* userinfo delimiter */ + if (host) { + TSRMLS_FETCH_FROM_CTX(url->ts); + php_error_docref(NULL TSRMLS_CC, E_WARNING, + "Failed to parse userinfo; unexpected '@'"); + return NULL; + } + host = url->ptr + 1; if (tmp != url->ptr && SUCCESS != parse_userinfo(url, tmp)) { return NULL; } -- 2.30.2