diff --git a/lib/ResourceRecord.php b/lib/ResourceRecord.php index 8a056d7..489c17f 100755 --- a/lib/ResourceRecord.php +++ b/lib/ResourceRecord.php @@ -209,7 +209,7 @@ public function toWire(): string throw new UnsetValueException('ResourceRecord TTL has not been set.'); } - if (!Validator::fullyQualifiedDomainName($this->name)) { + if (!Validator::fullyQualifiedDomainName($this->name, false)) { throw new InvalidArgumentException(sprintf('"%s" is not a fully qualified domain name.', $this->name)); } diff --git a/tests/ResourceRecordTest.php b/tests/ResourceRecordTest.php index 9a74bb0..671c820 100644 --- a/tests/ResourceRecordTest.php +++ b/tests/ResourceRecordTest.php @@ -121,6 +121,19 @@ public function testToWire(): void $this->assertEquals($expectation, $rr->toWire()); } + public function testToWireNameWithUnderscore(): void + { + $rr = new ResourceRecord(); + $rr->setName('_sip._tcp.example.com.'); + $rr->setClass(Classes::INTERNET); + $rr->setRdata(Factory::SRV(0, 5, 5060, 'sip.example.com.')); + $rr->setTtl(3600); + + $decoded = ResourceRecord::fromWire($rr->toWire()); + + $this->assertEquals('_sip._tcp.example.com.', $decoded->getName()); + } + public function dataProviderForTestToWireThrowsExceptionsIfValuesAreNotSet(): array { $rr_noName = new ResourceRecord();