Re: [PEAR-BUGS] [PEAR-BUG] Bug #19176 [Com]: resolve() does not merge the path if the base path is empty
[email protected] ("
[email protected]")
Sun, 4 Mar 2012 15:00:05 +0800
| Newsgroups |
php.pear.qa |
| Message-ID |
<[email protected]> |
iPhone
On Mar 4, 2012, at 12:40, "[email protected]" <[email protected]> wrote:
> Edit report at https://pear.php.net/bugs/bug.php?id=19176&edit=1
>
> ID: 19176
> Comment by: [email protected]
> Reported By: mkauffman at rightnow dot com
> Summary: resolve() does not merge the path if the base path is
> empty
> Status: Open
> Type: Bug
> Package: Net_URL2
> Operating System: Linux
> Package Version: 2.0.0
> PHP Version: 5.2.12
> Roadmap Versions:
> New Comment:
>
> I could reproduce the problem but came to another conclusion using a
> step debugger.
>
> The "5.2.3. Merge Paths" subroutine is broken. Per RFC:
>
> If the base URI has a defined authority component and an empty
> path, then return a string consisting of "/" concatenated with
> the
> reference's path;
>
> Net_URL2 did not took the reference path but the base path. I could fix
> it with the following patch:
>
>
> Index: Net/URL2.php
> ===================================================================
> --- Net/URL2.php (revision 323857)
> +++ Net/URL2.php (revision )
> @@ -720,7 +720,7 @@
> } else {
> // Merge paths (RFC 3986, section 5.2.3)
> if ($this->_host !== false && $this->_path ==
> '') {
> - $target->_path = '/' . $this->_path;
> + $target->_path = '/' . $reference->_path;
> } else {
> $i = strrpos($this->_path, '/');
> if ($i !== false) {
>
>
> Previous Comments:
> ------------------------------------------------------------------------
>
> [2011-12-31 02:16:08] wellnamed
>
> -Summary: resolve() does not merge the path if the base url is
> empty
> +Summary: resolve() does not merge the path if the base path is
> empty
> Fixed the summary to reference base path
>
> ------------------------------------------------------------------------
>
> [2011-12-31 02:07:54] wellnamed
>
> Description:
> ------------
> If you define a Net_URL2 instance that looks like "http://www.foo.com"
>
> and then output $foo->resolve('bar.html')->getUrl()
>
> The resulting url is "http://www.foo.com/"
>
> It appears to me that the issue is at line 729 in URL2.php. The line
>
> $target->_path .= $reference->_path;
>
> should be outside of the else statement so that it appends the reference
> path in both cases. This seems to fix at least this case, although I
> confess I haven't done enough testing and am not familiar enough with
> this code to be sure that it's entirely correct.
>
> Test script:
> ---------------
> $foo = new new Net_URL2("http://www.foo.com");
> $test = $foo->resolve('test.html')->getURL();
>
> print $test;
>
> Expected result:
> ----------------
> http://www.foo.com/test.html
>
> Actual result:
> --------------
> http://www.foo.com/
>
> ------------------------------------------------------------------------
>
>
> --
> Edit this bug report at https://pear.php.net/bugs/bug.php?id=19176&edit=1
>
>
> --
> PEAR Bugs Mailing List (http://pear.php.net/bugs/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>