Bug #20308 (Feature Request)

From: Date: Wed, 27 Nov 2002 21:19:57 +0000
Subject: Bug #20308 (Feature Request)
Groups: php.dev 
Request: Send a blank email to php-dev+get-91839@lists.php.net to get a copy of this message
While waiting for opinions on Bug#20460 I went ahead and addressed #20308. User complains that parse_url returns the full email address in 'path' element. Makes reference to documents which claim it should return 'user' and 'host' element. To address this request and maintain backward compatability I wrote a patch to split the 'path' element in to 'host' and 'user' elements then return all three. Ex: *current behavior* print_r(parse_url("mailto:pollita@php.net")); Array ( [scheme] => mailto [path] => pollita@php.net } *new behavior* print_r(parse_url("mailto:pollita@php.net")); Array ( [scheme] => mailto [path] => pollita@php.net [user] => pollita [host] => php.net } If there are no objections I'll commit this change. Index: url.c =================================================================== RCS file: /repository/php4/ext/standard/url.c,v retrieving revision 1.59 diff -u -r1.59 url.c --- url.c 14 Nov 2002 13:40:14 -0000 1.59 +++ url.c 27 Nov 2002 20:44:25 -0000 @@ -267,6 +267,26 @@ php_replace_controlchars(ret->path); } + if (strcmp(ret->scheme,"mailto") == 0) { + s = estrndup(ret->path, strlen(ret->path)); + ue = s + strlen(ret->path); + p = s + 1; + /* a mailto starting with @ would be malformed, but let's keep it clean */ + if (s[0] == '@') { + s[0] = '\0'; + } + /* scan for @ to separate user from host */ + while (p < ue && p[-1] != '\0') { + if (p[0] == '@') { + p[0] = '\0'; + } + p++; + } + ret->user = s; + /* the free() process in php_url_free will segfault if we don't duplicate this string value */ + ret->host = estrndup(p, (ue-p)); + } + return ret; } /* }}} */

Index: url.c =================================================================== RCS file: /repository/php4/ext/standard/url.c,v retrieving revision 1.59 diff -u -r1.59 url.c --- url.c 14 Nov 2002 13:40:14 -0000 1.59 +++ url.c 27 Nov 2002 20:44:25 -0000 @@ -267,6 +267,26 @@ php_replace_controlchars(ret->path); } + if (strcmp(ret->scheme,"mailto") == 0) { + s = estrndup(ret->path, strlen(ret->path)); + ue = s + strlen(ret->path); + p = s + 1; + /* a mailto starting with @ would be malformed, but let's keep it clean */ + if (s[0] == '@') { + s[0] = '\0'; + } + /* scan for @ to separate user from host */ + while (p < ue && p[-1] != '\0') { + if (p[0] == '@') { + p[0] = '\0'; + } + p++; + } + ret->user = s; + /* the free() process in php_url_free will segfault if we don't duplicate this string value */ + ret->host = estrndup(p, (ue-p)); + } + return ret; } /* }}} */
« previous php.dev (#91839) next »