Skip to content

Commit 13a364c

Browse files
authored
Merge pull request #336 from jeremykendall/bugfix/private-domain-parsing
Improve bugfix for #321 and fixes #334
2 parents 63cab52 + 4a76d50 commit 13a364c

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

src/Rules.php

Lines changed: 13 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 && self::hasRemainingRuleLabels($rules)) {
281282
$labelCount = 0;
282283
}
283284
break;
@@ -290,4 +291,15 @@ private function getPublicSuffixLengthFromSection(DomainName $domain, string $se
290291

291292
return $labelCount;
292293
}
294+
295+
private static function hasRemainingRuleLabels(array $rules): bool
296+
{
297+
foreach ($rules as $rule) {
298+
if ([] !== $rule) {
299+
return true;
300+
}
301+
}
302+
303+
return false;
304+
}
293305
}

src/RulesTest.php

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

591591
self::$rules->getPrivateDomain('clientportal.virtualcloud.com.br');
592592
}
593+
594+
public function testWithMultiLevelPrivateDomain(): void
595+
{
596+
$domain = self::$rules->resolve('test-domain.eu.org');
597+
598+
self::assertFalse($domain->suffix()->isICANN());
599+
self::assertTrue($domain->suffix()->isPrivate());
600+
self::assertSame('eu.org', $domain->suffix()->value());
601+
602+
$domain = self::$rules->resolve('test-domain.lt.eu.org');
603+
604+
self::assertFalse($domain->suffix()->isICANN());
605+
self::assertTrue($domain->suffix()->isPrivate());
606+
self::assertSame('lt.eu.org', $domain->suffix()->value());
607+
}
593608
}

0 commit comments

Comments
 (0)