Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 5daac12

Browse files
committed
Merge branch 'refs/heads/fix-dns-ipv6'
2 parents 6b1468c + a7ad4bf commit 5daac12

File tree

2 files changed

+37
-1
lines changed

2 files changed

+37
-1
lines changed

src/React/Dns/Resolver/Factory.php

+10-1
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,15 @@ protected function createCachedExecutor(LoopInterface $loop)
4646

4747
protected function addPortToServerIfMissing($nameserver)
4848
{
49-
return false === strpos($nameserver, ':') ? "$nameserver:53" : $nameserver;
49+
if (strpos($nameserver, '[') === false && substr_count($nameserver, ':') >= 2) {
50+
// several colons, but not enclosed in square brackets => enclose IPv6 address in square brackets
51+
$nameserver = '[' . $nameserver . ']';
52+
}
53+
// assume a dummy scheme when checking for the port, otherwise parse_url() fails
54+
if (parse_url('dummy://' . $nameserver, PHP_URL_PORT) === null) {
55+
$nameserver .= ':53';
56+
}
57+
58+
return $nameserver;
5059
}
5160
}

tests/React/Tests/Dns/Resolver/FactoryTest.php

+27
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,33 @@ public function createCachedShouldCreateResolverWithCachedExecutor()
4141
$this->assertInstanceOf('React\Dns\Query\CachedExecutor', $this->getResolverPrivateMemberValue($resolver, 'executor'));
4242
}
4343

44+
/**
45+
* @test
46+
* @dataProvider factoryShouldAddDefaultPortProvider
47+
*/
48+
public function factoryShouldAddDefaultPort($input, $expected)
49+
{
50+
$loop = $this->getMock('React\EventLoop\LoopInterface');
51+
52+
$factory = new Factory();
53+
$resolver = $factory->create($input, $loop);
54+
55+
$this->assertInstanceOf('React\Dns\Resolver\Resolver', $resolver);
56+
$this->assertSame($expected, $this->getResolverPrivateMemberValue($resolver, 'nameserver'));
57+
}
58+
59+
public static function factoryShouldAddDefaultPortProvider()
60+
{
61+
return array(
62+
array('8.8.8.8', '8.8.8.8:53'),
63+
array('1.2.3.4:5', '1.2.3.4:5'),
64+
array('localhost', 'localhost:53'),
65+
array('localhost:1234', 'localhost:1234'),
66+
array('::1', '[::1]:53'),
67+
array('[::1]:53', '[::1]:53')
68+
);
69+
}
70+
4471
private function getResolverPrivateMemberValue($resolver, $field)
4572
{
4673
$reflector = new \ReflectionProperty('React\Dns\Resolver\Resolver', $field);

0 commit comments

Comments
 (0)