pollita Tue Apr 27 15:13:14 2004 EDT Modified files: /php-src/ext/standard url.c Log: BugFix 28187 parse_url does not handle scheme://[0123:4567::89]:12345/etc style IPv6 embedded address URLs http://cvs.php.net/diff.php/php-src/ext/standard/url.c?r1=1.77&r2=1.78&ty=u Index: php-src/ext/standard/url.c diff -u php-src/ext/standard/url.c:1.77 php-src/ext/standard/url.c:1.78 --- php-src/ext/standard/url.c:1.77 Sun Jan 25 10:08:31 2004 +++ php-src/ext/standard/url.c Tue Apr 27 15:13:13 2004 @@ -15,7 +15,7 @@ | Author: Jim Winstead <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ */ -/* $Id: url.c,v 1.77 2004/01/25 15:08:31 abies Exp $ */ +/* $Id: url.c,v 1.78 2004/04/27 19:13:13 pollita Exp $ */ #include <stdlib.h> #include <string.h> @@ -198,13 +198,20 @@ s = p + 1; } - + /* check for port */ - /* memrchr is a GNU specific extension - Emulate for wide compatability */ - for(p = e; *p != ':' && p >= s; p--); + if (*s == '[' && *(e-1) == ']') { + /* Short circuit portscan, + we're dealing with an + IPv6 embedded address */ + p = s; + } else { + /* memrchr is a GNU specific extension + Emulate for wide compatability */ + for(p = e; *p != ':' && p >= s; p--); + } - if (*p == ':') { + if (p >= s && *p == ':') { if (!ret->port) { p++; if (e-p > 5) { /* port cannot be longer then 5 characters */ @@ -224,6 +231,11 @@ p = e; } + if (*s == '[' && *(p-1) == ']') { + s++; + p--; + } + /* check if we have a valid host, if we don't reject the string as url */ if ((p-s) < 1) { STR_FREE(ret->scheme);
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php