From e49fec4001dd3d9d48da9ec229271a9e422dd7d1 Mon Sep 17 00:00:00 2001 From: Bob Halley Date: Sat, 26 Jul 2025 08:36:29 -0700 Subject: [PATCH] Specify the utf-8 encoding when opening files [#1188]. --- dns/message.py | 2 +- dns/resolver.py | 2 +- dns/zone.py | 2 +- dns/zonefile.py | 2 +- tests/test_svcb.py | 9 ++++++--- tests/test_zone.py | 10 +++++----- 6 files changed, 15 insertions(+), 12 deletions(-) diff --git a/dns/message.py b/dns/message.py index 77bec1e9..b6cc2103 100644 --- a/dns/message.py +++ b/dns/message.py @@ -1738,7 +1738,7 @@ def from_file( """ if isinstance(f, str): - cm: contextlib.AbstractContextManager = open(f) + cm: contextlib.AbstractContextManager = open(f, "rt", encoding="utf-8") else: cm = contextlib.nullcontext(f) with cm as f: diff --git a/dns/resolver.py b/dns/resolver.py index fef9e84a..f7550cae 100644 --- a/dns/resolver.py +++ b/dns/resolver.py @@ -998,7 +998,7 @@ class BaseResolver: nameservers = [] if isinstance(f, str): try: - cm: contextlib.AbstractContextManager = open(f) + cm: contextlib.AbstractContextManager = open(f, "rt", encoding="utf-8") except OSError: # /etc/resolv.conf doesn't exist, can't be read, etc. raise NoResolverConfiguration(f"cannot open {f}") diff --git a/dns/zone.py b/dns/zone.py index 7cba657d..18039791 100644 --- a/dns/zone.py +++ b/dns/zone.py @@ -1378,7 +1378,7 @@ def from_file( if isinstance(f, str): if filename is None: filename = f - cm: contextlib.AbstractContextManager = open(f) + cm: contextlib.AbstractContextManager = open(f, "rt", encoding="utf-8") else: cm = contextlib.nullcontext(f) with cm as f: diff --git a/dns/zonefile.py b/dns/zonefile.py index d6047cce..fd0f4642 100644 --- a/dns/zonefile.py +++ b/dns/zonefile.py @@ -537,7 +537,7 @@ class Reader: self.default_ttl_known, ) ) - self.current_file = open(filename) + self.current_file = open(filename, "rt", encoding="utf-8") self.tok = dns.tokenizer.Tokenizer(self.current_file, filename) self.current_origin = new_origin elif c == "$GENERATE": diff --git a/tests/test_svcb.py b/tests/test_svcb.py index d2d8dd79..e92ec453 100644 --- a/tests/test_svcb.py +++ b/tests/test_svcb.py @@ -7,7 +7,6 @@ import dns.rdata import dns.rdtypes.svcbbase import dns.rrset from dns.tokenizer import Tokenizer - from tests.util import here @@ -303,9 +302,13 @@ class SVCBTestCase(unittest.TestCase): def test_svcb_spec_test_vectors(self): text_file = here("svcb_test_vectors.text") - text_tokenizer = Tokenizer(open(text_file), filename=text_file) + text_tokenizer = Tokenizer( + open(text_file, "rt", encoding="utf-8"), filename=text_file + ) generic_file = here("svcb_test_vectors.generic") - generic_tokenizer = Tokenizer(open(generic_file), filename=generic_file) + generic_tokenizer = Tokenizer( + open(generic_file, "rt", encoding="utf-8"), filename=generic_file + ) while True: while True: diff --git a/tests/test_zone.py b/tests/test_zone.py index 2e590e70..1d7cde35 100644 --- a/tests/test_zone.py +++ b/tests/test_zone.py @@ -320,8 +320,8 @@ def make_xfr(zone): def compare_files(test_name, a_name, b_name): - with open(a_name, "r") as a: - with open(b_name, "r") as b: + with open(a_name, "rt", encoding="utf-8") as a: + with open(b_name, "rt", encoding="utf-8") as b: differences = list(difflib.unified_diff(a.readlines(), b.readlines())) if len(differences) == 0: return True @@ -377,7 +377,7 @@ class ZoneTestCase(unittest.TestCase): def testToFileTextual(self): z = dns.zone.from_file(here("example"), "example") try: - f = open(here("example3-textual.out"), "w") + f = open(here("example3-textual.out"), "wt", encoding="utf-8") z.to_file(f) f.close() ok = compare_files( @@ -421,7 +421,7 @@ class ZoneTestCase(unittest.TestCase): ok = False try: text_zone = z.to_text(nl="\x0a") - f = open(here("example3.out"), "w") + f = open(here("example3.out"), "wt", encoding="utf-8") f.write(text_zone) f.close() ok = compare_files( @@ -435,7 +435,7 @@ class ZoneTestCase(unittest.TestCase): def testToFileTextualWithOrigin(self): z = dns.zone.from_file(here("example"), "example") try: - f = open(here("example4-textual.out"), "w") + f = open(here("example4-textual.out"), "wt", encoding="utf-8") z.to_file(f, want_origin=True) f.close() ok = compare_files( -- 2.47.3