Pull request: 5089-windows-hosts-crash

Updates #5089.

Squashed commit of the following:

commit dd3ce763326ad3207de111bb911e0a2665bcebba
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Mon Nov 7 16:21:43 2022 +0300

    aghnet: fix comparison

commit 0d736fb7fc5cb2e77fd533cd95fdf3fbc6dc86d1
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Mon Nov 7 14:13:05 2022 +0300

    aghnet: fix crash
This commit is contained in:
Ainar Garipov 2022-11-07 16:51:07 +03:00
parent a7d02fa935
commit 464fbf0b54
2 changed files with 16 additions and 2 deletions

View File

@ -17,6 +17,14 @@ and this project adheres to
### Fixed
- Crash on Windows when system hosts files are read ([#5089]).
[#5089]: https://github.com/AdguardTeam/AdGuardHome/issues/5089
<!-- <!--
## [v0.107.18] - 2022-11-16 (APPROX.) ## [v0.107.18] - 2022-11-16 (APPROX.)
@ -1088,7 +1096,7 @@ See also the [v0.106.0 GitHub milestone][ms-v0.106.0].
- Hostname uniqueness validation in the DHCP server ([#2952]). - Hostname uniqueness validation in the DHCP server ([#2952]).
- Hostname generating for DHCP clients which don't provide their own ([#2723]). - Hostname generating for DHCP clients which don't provide their own ([#2723]).
- New flag `--no-etc-hosts` to disable client domain name lookups in the - New flag `--no-etc-hosts` to disable client domain name lookups in the
operating system's /etc/hosts files ([#1947]). operating system's `/etc/hosts` files ([#1947]).
- The ability to set up custom upstreams to resolve PTR queries for local - The ability to set up custom upstreams to resolve PTR queries for local
addresses and to disable the automatic resolving of clients' addresses addresses and to disable the automatic resolving of clients' addresses
([#2704]). ([#2704]).

View File

@ -139,6 +139,8 @@ type HostsRecord struct {
func (rec *HostsRecord) equal(other *HostsRecord) (ok bool) { func (rec *HostsRecord) equal(other *HostsRecord) (ok bool) {
if rec == nil { if rec == nil {
return other == nil return other == nil
} else if other == nil {
return false
} }
return rec.Canonical == other.Canonical && rec.Aliases.Equal(other.Aliases) return rec.Canonical == other.Canonical && rec.Aliases.Equal(other.Aliases)
@ -478,7 +480,11 @@ func (hc *HostsContainer) refresh() (err error) {
return fmt.Errorf("refreshing : %w", err) return fmt.Errorf("refreshing : %w", err)
} }
if maps.EqualFunc(hp.table, hc.last, (*HostsRecord).equal) { // hc.last is nil on the first refresh, so let that one through.
//
// TODO(a.garipov): Once https://github.com/golang/go/issues/56621 is
// resolved, remove the first condition.
if hc.last != nil && maps.EqualFunc(hp.table, hc.last, (*HostsRecord).equal) {
log.Debug("%s: no changes detected", hostsContainerPref) log.Debug("%s: no changes detected", hostsContainerPref)
return nil return nil