Skip to content

Commit 0daa3be

Browse files
committed
Improve bugfix for #321 and fixes #334
1 parent ab6baae commit 0daa3be

File tree

4 files changed

+19
-5
lines changed

4 files changed

+19
-5
lines changed

.php-cs-fixer.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
'remove_inheritdoc' => true,
2828
'allow_unused_params' => false,
2929
],
30-
'no_trailing_comma_in_singleline_array' => true,
30+
'no_trailing_comma_in_singleline' => true,
3131
'no_unused_imports' => true,
3232
'ordered_imports' => ['imports_order' => ['class', 'function', 'const'], 'sort_algorithm' => 'alpha'],
3333
'phpdoc_add_missing_param_annotation' => ['only_untyped' => true],

src/Rules.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,8 @@ private function getPublicSuffixLengthFromSection(DomainName $domain, string $se
277277
if (!array_key_exists($label, $rules)) {
278278
// for private domain suffix MUST be fully matched else no suffix is found
279279
// https://github.com/jeremykendall/php-domain-parser/issues/321
280-
if (self::PRIVATE_DOMAINS === $section && [] !== $rules) {
280+
// https://github.com/jeremykendall/php-domain-parser/issues/334
281+
if (self::PRIVATE_DOMAINS === $section && [] !== $rules && [] !== reset($rules)) {
281282
$labelCount = 0;
282283
}
283284
break;

src/RulesTest.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -603,4 +603,19 @@ public function testIssue321Failure(): void
603603

604604
self::$rules->getPrivateDomain('clientportal.virtualcloud.com.br');
605605
}
606+
607+
public function testWithMultiLevelPrivateDomain(): void
608+
{
609+
$domain = self::$rules->resolve('test-domain.eu.org');
610+
611+
self::assertFalse($domain->suffix()->isICANN());
612+
self::assertTrue($domain->suffix()->isPrivate());
613+
self::assertSame('eu.org', $domain->suffix()->value());
614+
615+
$domain = self::$rules->resolve('test-domain.lt.eu.org');
616+
617+
self::assertFalse($domain->suffix()->isICANN());
618+
self::assertTrue($domain->suffix()->isPrivate());
619+
self::assertSame('lt.eu.org', $domain->suffix()->value());
620+
}
606621
}

src/TopLevelDomains.php

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
use function count;
1212
use function in_array;
1313
use function preg_match;
14-
use function strpos;
1514
use function trim;
1615

1716
final class TopLevelDomains implements TopLevelDomainList
@@ -71,11 +70,10 @@ public static function parse(string $content): array
7170
foreach ($file as $line) {
7271
$line = trim($line);
7372
if ([] === $data) {
74-
$data = self::extractHeader($line);
73+
$data = self::extractHeader($line) + ['records' => []];
7574
continue;
7675
}
7776

78-
$data['records'] = $data['records'] ?? [];
7977
if (!str_contains($line, '#')) {
8078
$data['records'][self::extractRootZone($line)] = 1;
8179
continue;

0 commit comments

Comments
 (0)