]> git.ipfire.org Git - thirdparty/dnspython.git/commitdiff
share code with svcbbase deleg
authorBob Halley <halley@dnspython.org>
Sun, 26 Jul 2026 18:52:20 +0000 (11:52 -0700)
committerBob Halley <halley@dnspython.org>
Sun, 26 Jul 2026 18:52:20 +0000 (11:52 -0700)
dns/rdtypes/delegbase.py

index 7292445c3efc218e14a4a64ffd43cadd027cf81a..fd2c08961c33e08bb7573954936ead26bcde3d22 100644 (file)
@@ -14,6 +14,7 @@ import dns.rdata
 import dns.renderer
 import dns.tokenizer
 import dns.wire
+from dns.rdtypes.svcbbase import _split, _unescape
 
 # Until there is an RFC, this module is experimental and may be changed in
 # incompatible ways.
@@ -96,80 +97,6 @@ def key_to_text(key):
     return DelegInfoKey.to_text(key).replace("_", "-").lower()
 
 
-# Like rdata escapify, but escapes ',' too.
-
-_escaped = b'",\\'
-
-
-def _escapify(qstring):
-    text = ""
-    for c in qstring:
-        if c in _escaped:
-            text += "\\" + chr(c)
-        elif c >= 0x20 and c < 0x7F:
-            text += chr(c)
-        else:
-            text += f"\\{c:03d}"
-    return text
-
-
-def _unescape(value: str) -> bytes:
-    if value == "":
-        return b""
-    unescaped = b""
-    l = len(value)
-    i = 0
-    while i < l:
-        c = value[i]
-        i += 1
-        if c == "\\":
-            if i >= l:  # pragma: no cover   (can't happen via tokenizer get())
-                raise dns.exception.UnexpectedEnd
-            c = value[i]
-            i += 1
-            if c.isdigit():
-                if i >= l:
-                    raise dns.exception.UnexpectedEnd
-                c2 = value[i]
-                i += 1
-                if i >= l:
-                    raise dns.exception.UnexpectedEnd
-                c3 = value[i]
-                i += 1
-                if not (c2.isdigit() and c3.isdigit()):
-                    raise dns.exception.SyntaxError
-                codepoint = int(c) * 100 + int(c2) * 10 + int(c3)
-                if codepoint > 255:
-                    raise dns.exception.SyntaxError
-                unescaped += b"%c" % (codepoint)
-                continue
-        unescaped += c.encode()
-    return unescaped
-
-
-def _split(value):
-    l = len(value)
-    i = 0
-    items = []
-    unescaped = b""
-    while i < l:
-        c = value[i]
-        i += 1
-        if c == ord("\\"):
-            if i >= l:  # pragma: no cover   (can't happen via tokenizer get())
-                raise dns.exception.UnexpectedEnd
-            c = value[i]
-            i += 1
-            unescaped += b"%c" % (c)
-        elif c == ord(","):
-            items.append(unescaped)
-            unescaped = b""
-        else:
-            unescaped += b"%c" % (c)
-    items.append(unescaped)
-    return items
-
-
 @dns.immutable.immutable
 class DelegInfo:
     """Abstract base class for DELEG infos"""