Skip to content

Commit 94ffc4f

Browse files
committed
bug #11469 [BrowserKit] Fixed server HTTP_HOST port uri conversion (bcremer, fabpot)
This PR was merged into the 2.3 branch. Discussion ---------- [BrowserKit] Fixed server HTTP_HOST port uri conversion | Q | A | ------------- | --- | Bug fix? | yes | New feature? | no | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | #11356 | License | MIT | Doc PR | n/a See #11356 Commits ------- 103fd88 [BrowserKit] refactor code and fix unquoted regex f401ab9 Fixed server HTTP_HOST port uri conversion
2 parents 045cbc5 + 103fd88 commit 94ffc4f

File tree

2 files changed

+31
-7
lines changed

2 files changed

+31
-7
lines changed

src/Symfony/Component/BrowserKit/Client.php

+13-7
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@ public function request($method, $uri, array $parameters = array(), array $files
304304
$uri = $this->getAbsoluteUri($uri);
305305

306306
if (isset($server['HTTP_HOST'])) {
307-
$uri = preg_replace('{^(https?\://)'.parse_url($uri, PHP_URL_HOST).'}', '${1}'.$server['HTTP_HOST'], $uri);
307+
$uri = preg_replace('{^(https?\://)'.preg_quote($this->extractHost($uri)).'}', '${1}'.$server['HTTP_HOST'], $uri);
308308
}
309309

310310
if (isset($server['HTTPS'])) {
@@ -317,12 +317,7 @@ public function request($method, $uri, array $parameters = array(), array $files
317317
$server['HTTP_REFERER'] = $this->history->current()->getUri();
318318
}
319319

320-
$server['HTTP_HOST'] = parse_url($uri, PHP_URL_HOST);
321-
322-
if ($port = parse_url($uri, PHP_URL_PORT)) {
323-
$server['HTTP_HOST'] .= ':'.$port;
324-
}
325-
320+
$server['HTTP_HOST'] = $this->extractHost($uri);
326321
$server['HTTPS'] = 'https' == parse_url($uri, PHP_URL_SCHEME);
327322

328323
$this->internalRequest = new Request($uri, $method, $parameters, $files, $this->cookieJar->allValues($uri), $server, $content);
@@ -619,4 +614,15 @@ private function updateServerFromUri($server, $uri)
619614

620615
return $server;
621616
}
617+
618+
private function extractHost($uri)
619+
{
620+
$host = parse_url($uri, PHP_URL_HOST);
621+
622+
if ($port = parse_url($uri, PHP_URL_PORT)) {
623+
return $host.':'.$port;
624+
}
625+
626+
return $host;
627+
}
622628
}

src/Symfony/Component/BrowserKit/Tests/ClientTest.php

+18
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,24 @@ public function testRequestURIConversion()
210210
$this->assertEquals('http://www.example.com/foo/bar', $client->getRequest()->getUri(), '->request() uses the previous request for relative URLs');
211211
}
212212

213+
public function testRequestURIConversionByServerHost()
214+
{
215+
$client = new TestClient();
216+
217+
$server = array('HTTP_HOST' => 'www.exampl+e.com:8000');
218+
$parameters = array();
219+
$files = array();
220+
221+
$client->request('GET', 'http://exampl+e.com', $parameters, $files, $server);
222+
$this->assertEquals('http://www.exampl+e.com:8000', $client->getRequest()->getUri(), '->request() uses HTTP_HOST to add port');
223+
224+
$client->request('GET', 'http://exampl+e.com:8888', $parameters, $files, $server);
225+
$this->assertEquals('http://www.exampl+e.com:8000', $client->getRequest()->getUri(), '->request() uses HTTP_HOST to modify existing port');
226+
227+
$client->request('GET', 'http://exampl+e.com:8000', $parameters, $files, $server);
228+
$this->assertEquals('http://www.exampl+e.com:8000', $client->getRequest()->getUri(), '->request() uses HTTP_HOST respects correct set port');
229+
}
230+
213231
public function testRequestReferer()
214232
{
215233
$client = new TestClient();

0 commit comments

Comments
 (0)