Net_URL: default argument values override object properties in initialize()
| From: | spaze | Date: | Thu, 10 May 2007 22:15:07 +0000 |
| Subject: | Net_URL: default argument values override object properties in initialize() | ||
| Groups: | php.pear.dev | ||
| Request: | Send a blank email to pear-dev+get-46723@lists.php.net to get a copy of this message | ||
Hello,
sorry for writing to the list, I tried to report this on the issue
tracker, but after submitting I got this message on the website:
| ERROR:
| Critical internal error: could not send email to your address
| <minehere>, please write a mail message to the <i>pear-dev</i>mailing
| list and report this problem with details. We apologize for the
| problem, your report will help us to fix it for future users: No such
| handle found, cannot send confirmation email
Anyway, I have found and fixed issue/bug with default argument values
overriding object properties in initialize() in the CVS sources of
Net_URL (running PHP 5.2.1 on Win32 with CVS version of Net_URL,
URL.php revision 1.45.)
Description:
Regarding the revision 1.45 of URL.php there's a showstopper in initialize():
In __construct() you set the object properties and then call the
initialize() method with no arguments:
$this->url = $url;
$this->useBrackets = $useBrackets;
$this->initialize();
But initialize() is declared with default argument values:
function initialize($url = null, $useBrackets = true)
and later you copy the arguments into object properties:
$this->useBrackets = $useBrackets;
$this->url = $url;
So the $url passed to the contructor is not taken into care and the
defaults are used. Plus sometimes you refer to the function argument
instead of the object property:
if (!preg_match('/^[a-z0-9]+:\/\//i', $url)) {
In previous revisions (i.e. stable 1.36) everything works fine.
Please find attached patch against 1.46 which fixes all the problems,
thanks for reviewing.
Test code:
require_once 'Net/URL.php';
$dsn = 'imap://foo:bar@mail.example.com:143/INBOX';
$net_url =& new Net_URL($dsn);
echo $net_url->host;
Expected result:
mail.example.com
Actual result:
localhost
Thanks.