• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

dnsimple / erldns / 23734733377
87%

Build:
DEFAULT BRANCH: main
Ran 30 Mar 2026 08:15AM UTC
Jobs 1
Files 50
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

30 Mar 2026 08:14AM UTC coverage: 86.825% (+0.3%) from 86.478%
23734733377

push

github

web-flow
fix: prevent infinite recursion in resolver with depth counter (#342)

* fix: end self-delegation loop; normalize zone insert grouping by labels

Fix an infinite loop in `resolve_exact_type_match_delegated/8` when the NS
RR owner name and the answer RR owner name refer to the same DNS name
but use different FQDN spellings (e.g. with vs without a trailing dot).
Binary match (=:=) treated them as different, so we took the
delegated-restart path and could recurse without making progress.

Changes:
- `resolve_exact_type_match/4`: compare SOA and NS owner names with
  `dns_domain:are_equal/2` instead of `=:=`, so apex detection is
  DNS-correct.
- `resolve_exact_type_match_delegated/8`: compare NS and answer owner
  names with `dns_domain:are_equal_labels/2` on `dns_domain:split/1`
  results. When they match, keep the existing "self delegation" response
  (`aa=false`, NOERROR, NS in authority) instead of calling
  `restart_delegated_query/5`.
- `resolve_best_match/7`: compare the current QName to the question name
  with `dns_domain:are_equal/2` instead of `=:=`, so CNAME-followed
  resolution still lines up with the original query when names differ
  only by presentation.
- `erldns_zone_cache`: `build_named_index/1` now groups RRs by owner as
  label lists (`dns_domain:split(dns_domain:to_lower(Name)))`), not by
  lowercased FQDN binaries. Equivalent owners that differ only by case
  or trailing dot collapse to one bucket; prepare_zone_records/2 uses
  those keys directly and no longer splits an FQDN map key again. Tests:
- Add resolve_authoritative_self_delegation_trailing_dot_name_mismatch/1
  with a zone where the A and NS owner names differ only by a trailing
  dot, and assert resolution completes (with a timeout guard against
  regressions).

* fix: guard against infinite recursion with depth counter

Replace the previous self-delegation loop workaround with a
general-purpose depth counter that prevents all forms of unbounded
recursion (self-delegati... (continued)

11 of 14 new or added lines in 1 file covered. (78.57%)

1 existing line in 1 file now uncovered.

1720 of 1981 relevant lines covered (86.82%)

1153.92 hits per line

New Missed Lines in Diff

Lines Coverage ∆ File
3
78.75
5.5% src/pipes/erldns_resolver.erl

Uncovered Existing Lines

Lines Coverage ∆ File
1
84.42
-1.3% src/listeners/udp/erldns_proto_udp.erl
Jobs
ID Job ID Ran Files Coverage
1 23734733377.1 30 Mar 2026 08:15AM UTC 50
86.82
GitHub Action Run
Source Files on build 23734733377
  • Tree
  • List 50
  • Changed 4
  • Source Changed 1
  • Coverage Changed 4
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #23734733377
  • cee84d8c on github
  • Prev Build on main (#23504158941)
  • Next Build on main (#23735895865)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc