mirror of
https://github.com/guzzle/guzzle.git
synced 2025-02-25 02:22:57 +01:00
Fixes edge-cases in Url, QueryString, and Request
Falsy values (the string "0") are now handled properly e.g. http://foo.com?0, http://foo.com#0
This commit is contained in:
parent
cde72ff57a
commit
db5b96d08d
@ -349,11 +349,7 @@ class Request extends AbstractMessage implements RequestInterface
|
||||
*/
|
||||
public function getPath()
|
||||
{
|
||||
if ($path = $this->url->getPath()) {
|
||||
return '/' . ltrim($path, '/');
|
||||
} else {
|
||||
return '/';
|
||||
}
|
||||
return '/' . ltrim($this->url->getPath(), '/');
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -45,7 +45,7 @@ class QueryString extends Collection
|
||||
{
|
||||
$q = new static();
|
||||
|
||||
if (!empty($query)) {
|
||||
if (0 !== strlen($query)) {
|
||||
if ($query[0] == '?') {
|
||||
$query = substr($query, 1);
|
||||
}
|
||||
|
@ -35,7 +35,7 @@ class Url
|
||||
$parts = ParserRegistry::getInstance()->getParser('url')->parseUrl($url);
|
||||
|
||||
// Convert the query string into a QueryString object
|
||||
if ($parts['query']) {
|
||||
if (0 !== strlen($parts['query'])) {
|
||||
$parts['query'] = QueryString::fromString($parts['query']);
|
||||
}
|
||||
|
||||
@ -81,7 +81,7 @@ class Url
|
||||
}
|
||||
|
||||
// Add the path component if present
|
||||
if (!empty($parts['path'])) {
|
||||
if (isset($parts['path']) && 0 !== strlen($parts['path'])) {
|
||||
// Always ensure that the path begins with '/' if set and something is before the path
|
||||
if ($url && $parts['path'][0] != '/' && substr($url, -1) != '/') {
|
||||
$url .= '/';
|
||||
|
@ -337,6 +337,22 @@ class RequestTest extends \Guzzle\Tests\GuzzleTestCase
|
||||
$this->assertEquals('/index.html', $this->request->getPath());
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Guzzle\Http\Message\Request::getHost
|
||||
* @covers Guzzle\Http\Message\Request::getPath
|
||||
* @covers Guzzle\Http\Message\Request::getQuery
|
||||
*/
|
||||
public function testPermitsFalsyComponents()
|
||||
{
|
||||
$request = new Request('GET', 'http://0/0?0');
|
||||
$this->assertSame('0', $request->getHost());
|
||||
$this->assertSame('/0', $request->getPath());
|
||||
$this->assertSame('0=', $request->getQuery(true));
|
||||
|
||||
$request = new Request('GET', '0');
|
||||
$this->assertEquals('/0', $request->getPath());
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Guzzle\Http\Message\Request::getPort
|
||||
* @covers Guzzle\Http\Message\Request::setPort
|
||||
|
@ -220,6 +220,18 @@ class QueryStringTest extends \Guzzle\Tests\GuzzleTestCase
|
||||
$this->assertEquals('foo', (string) $query);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Guzzle\Http\QueryString::fromString
|
||||
* @covers Guzzle\Http\QueryString::__toString
|
||||
*/
|
||||
public function testAllowsFalsyQueryStringValues()
|
||||
{
|
||||
$query = QueryString::fromString('0');
|
||||
$this->assertEquals('0=', (string) $query);
|
||||
$query->set('0', QueryString::BLANK);
|
||||
$this->assertSame('0', (string) $query);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Guzzle\Http\QueryString::fromString
|
||||
*/
|
||||
|
@ -46,6 +46,50 @@ class UrlTest extends \Guzzle\Tests\GuzzleTestCase
|
||||
$this->assertTrue($u->isAbsolute());
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Guzzle\Http\Url::factory
|
||||
* @covers Guzzle\Http\Url::getHost
|
||||
* @covers Guzzle\Http\Url::getPort
|
||||
* @covers Guzzle\Http\Url::getQuery
|
||||
* @covers Guzzle\Http\Url::getPath
|
||||
* @covers Guzzle\Http\Url::getFragment
|
||||
* @covers Guzzle\Http\Url::__toString
|
||||
*/
|
||||
public function testAllowsFalsyUrlParts()
|
||||
{
|
||||
$url = Url::factory('http://0:50/0?0#0');
|
||||
$this->assertSame('0', $url->getHost());
|
||||
$this->assertEquals(50, $url->getPort());
|
||||
$this->assertSame('/0', $url->getPath());
|
||||
$this->assertEquals('0=', (string) $url->getQuery());
|
||||
$this->assertSame('0', $url->getFragment());
|
||||
$this->assertEquals('http://0:50/0?0=#0', (string) $url);
|
||||
|
||||
$url = Url::factory('');
|
||||
$this->assertSame('', (string) $url);
|
||||
|
||||
$url = Url::factory('0');
|
||||
$this->assertSame('0', (string) $url);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Guzzle\Http\Url::buildUrl
|
||||
*/
|
||||
public function testBuildsRelativeUrlsWithFalsyParts()
|
||||
{
|
||||
$url = Url::buildUrl(array(
|
||||
'host' => '0',
|
||||
'path' => '0',
|
||||
));
|
||||
|
||||
$this->assertSame('//0/0', $url);
|
||||
|
||||
$url = Url::buildUrl(array(
|
||||
'path' => '0',
|
||||
));
|
||||
$this->assertSame('0', $url);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Guzzle\Http\Url
|
||||
*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user