From 91e50177d53a9f88c613b89662f5a09d1d8f25b1 Mon Sep 17 00:00:00 2001 From: Niklas Keller Date: Sun, 2 Jun 2024 20:50:19 +0200 Subject: [PATCH] Use . instead of null in search list by default --- src/DnsConfig.php | 4 +++- src/Rfc1035StubDnsResolver.php | 15 +++++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/DnsConfig.php b/src/DnsConfig.php index 57c2ff8..d588cd2 100644 --- a/src/DnsConfig.php +++ b/src/DnsConfig.php @@ -49,7 +49,9 @@ public function __construct(array $nameservers, array $knownHosts = []) public function withSearchList(array $searchList): self { $self = clone $this; - $self->searchList = $searchList; + + // Replace null with '.' for backward compatibility + $self->searchList = \array_map(fn ($search) => $search ?? '.', $searchList); return $self; } diff --git a/src/Rfc1035StubDnsResolver.php b/src/Rfc1035StubDnsResolver.php index a6b5ab1..9f031e5 100644 --- a/src/Rfc1035StubDnsResolver.php +++ b/src/Rfc1035StubDnsResolver.php @@ -139,20 +139,23 @@ public function resolve(string $name, ?int $typeRestriction = null, ?Cancellatio \assert($this->config !== null); - $searchList = [null]; + $searchList = ['.']; if (!$trailingDot && $dots < $this->config->getNdots()) { - $searchList = \array_merge($this->config->getSearchList(), $searchList); + $configuredSearchList = $this->config->getSearchList(); + if (\in_array('.', $configuredSearchList, true)) { + $searchList = $configuredSearchList; + } else { + $searchList = \array_merge($configuredSearchList, $searchList); + } } $sendQuery = $this->query(...); foreach ($searchList as $searchIndex => $search) { for ($redirects = 0; $redirects < 5; $redirects++) { - $searchName = match ($search) { - null => $name, - "." => $name . ".", - default => $name . "." . $search, + '.' => \rtrim($name, '.') . '.', + default => $name . '.' . $search, }; try {