cvs: php4 /ext/standard url.c
| From: | Stig Venaas | Date: | Fri, 22 Sep 2000 00:12:01 +0000 |
| Subject: | cvs: php4 /ext/standard url.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-1823@lists.php.net to get a copy of this message | ||
venaas Thu Sep 21 17:12:01 2000 EDT
Modified files:
/php4/ext/standard url.c
Log:
Parsing of URLs with literal IPv6 addresses, see RFC 2732
@- IPv6 support in fopen (one can access IPv6 ftp/web servers) (Stig Venaas)
Index: php4/ext/standard/url.c
diff -u php4/ext/standard/url.c:1.28 php4/ext/standard/url.c:1.29
--- php4/ext/standard/url.c:1.28 Tue Aug 8 02:06:51 2000
+++ php4/ext/standard/url.c Thu Sep 21 17:12:00 2000
@@ -15,7 +15,7 @@
| Author: Jim Winstead (jimw@php.net) |
+----------------------------------------------------------------------+
*/
-/* $Id: url.c,v 1.28 2000/08/08 09:06:51 martin Exp $ */
+/* $Id: url.c,v 1.29 2000/09/22 00:12:00 venaas Exp $ */
#include <stdlib.h>
#include <string.h>
@@ -116,8 +116,8 @@
regfree(&re); /* free the old regex */
- if ((cerr=regcomp(&re, "^(([^@:]+)(:([^@:]+))?@)?([^:@]+)(:([^:@]+))?",
REG_EXTENDED))
- || (err=regexec(&re, result, 10, subs, 0))) {
+ if ((cerr=regcomp(&re,
"^(([^@:]+)(:([^@:]+))?@)?((\\[(.*)\\])|([^:@]+))(:([^:@]+))?", REG_EXTENDED))
+ || (err=regexec(&re, result, 11, subs, 0))) {
STR_FREE(ret->scheme);
STR_FREE(ret->path);
STR_FREE(ret->query);
@@ -135,11 +135,13 @@
if (subs[4].rm_so != -1 && subs[4].rm_so < length) {
ret->pass = estrndup(result + subs[4].rm_so, subs[4].rm_eo - subs[4].rm_so);
}
- if (subs[5].rm_so != -1 && subs[5].rm_so < length) {
- ret->host = estrndup(result + subs[5].rm_so, subs[5].rm_eo - subs[5].rm_so);
- }
if (subs[7].rm_so != -1 && subs[7].rm_so < length) {
- ret->port = (unsigned short) strtol(result + subs[7].rm_so, NULL, 10);
+ ret->host = estrndup(result + subs[7].rm_so, subs[7].rm_eo - subs[7].rm_so);
+ } else if (subs[8].rm_so != -1 && subs[8].rm_so < length) {
+ ret->host = estrndup(result + subs[8].rm_so, subs[8].rm_eo - subs[8].rm_so);
+ }
+ if (subs[10].rm_so != -1 && subs[10].rm_so < length) {
+ ret->port = (unsigned short) strtol(result + subs[10].rm_so, NULL, 10);
}
efree(result);
}