WIP DNS: 너무 긴 이름은 이름 탓으로 - "닿지 않음" 안내 · 작업 기록에 사이트 이름이 남지 않게 (15 지적) (검토 대기)
15 지적 · 관리자 10/17: "주소 이름이 너무 깁니다: <이름>" 이 작업 기록으로 가 연 사이트 이름이 남았다. 원인 (버그): 서버마다 묻다 실패한 끝에 "DNS 서버 (…) 에 닿지 않습니다: 주소 이름이 너무 깁니다: <이름>" (닿지 않음) 으로 바뀌어 기록되고, DNS 서버에 닿지 않는다는 안내까지 떴다 (DoH 도 같음). 고침: 묻기 전에 이름을 보고 이름 문제는 그대로 알린다 (닿지 않음 아님 → 기록 안 함 · 안내 안 띄움). 화면 (그 다운로드 줄) 에는 지금처럼 "주소 이름이 너무 깁니다: <이름>". Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>묶음6 v2026.10.12_972
parent
cd50edd666
commit
05074ec4bd
|
|
@ -200,6 +200,10 @@ class DnsResolver {
|
|||
|
||||
/// 서버들에 차례로 묻는다 (첫 서버가 답하지 않으면 다음 서버)
|
||||
Future<(DnsAnswer, String)> _ask(DnsConfig c, String name, int type) async {
|
||||
// 이름 자체의 문제 (너무 긴 이름) 는 서버 탓이 아니다 - 묻기 전에 보고 그대로 알린다.
|
||||
// 예전에는 서버마다 실패한 끝에 "DNS 서버 (…) 에 닿지 않습니다: 주소 이름이 너무 깁니다: <이름>" (닿지 않음) 으로 바뀌어
|
||||
// DNS 안내가 뜨고 작업 기록에 연 사이트 이름이 남았다 (15 지적 · 관리자 10/17)
|
||||
buildDnsQuery(name, type);
|
||||
if (c.mode == 'doh') return (await _doh(c, name, type), c.label);
|
||||
final servers = c.servers;
|
||||
if (servers.isEmpty) {
|
||||
|
|
|
|||
|
|
@ -477,6 +477,31 @@ void main() {
|
|||
expect((s.torKeepData, s.torHomeUrl, s.torJavaScript, s.torNoticeSeen), (false, 'https://check.torproject.org/', true, false));
|
||||
});
|
||||
|
||||
test('너무 긴 이름은 이름 탓 (닿지 않음 아님) - DNS 안내 · 작업 기록에 사이트 이름이 남지 않는다 (15 지적)', () async {
|
||||
final long = '${'a' * 70}.example.com';
|
||||
for (final c in [custom('192.0.2.1'), const DnsConfig(mode: 'doh', dohUrl: 'https://192.0.2.1/dns-query', primary: '192.0.2.1')]) {
|
||||
final r = DnsResolver(config: () => c, timeout: const Duration(milliseconds: 300));
|
||||
Object? err;
|
||||
try {
|
||||
await r.lookup(long);
|
||||
} catch (e) {
|
||||
err = e;
|
||||
}
|
||||
expect(err, isA<DnsException>(), reason: c.mode);
|
||||
expect((err! as DnsException).unreachable, isFalse, reason: '${c.mode}: 서버에 닿지 않음으로 보지 않는다');
|
||||
expect('$err', contains('주소 이름이 너무 깁니다'));
|
||||
// 작업 기록: 닿지 않음만 남기므로 이 실패는 기록하지 않는다 (사이트 이름이 남지 않음)
|
||||
final g = NetGuard.instance;
|
||||
final logged = <String>[];
|
||||
final oldLog = g.log;
|
||||
g.log = logged.add;
|
||||
addTearDown(() => g.log = oldLog);
|
||||
g.reportError(long, err);
|
||||
expect(logged.where((l) => l.contains('aaaa')), isEmpty);
|
||||
expect(g.failure.value, isNull, reason: 'DNS 안내 (닿지 않음) 를 띄우지 않는다');
|
||||
}
|
||||
});
|
||||
|
||||
test('247 · 249: 닿지 않는 DNS - 앱의 HTTP 오류를 사용자 글로 · 상태는 다시 답하거나 설정을 바꿀 때까지 남음', () async {
|
||||
final g = NetGuard.instance;
|
||||
final old = HttpOverrides.current;
|
||||
|
|
|
|||
Loading…
Reference in New Issue