summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBob Halley <halley@dnspython.org>2020-08-25 07:38:31 -0700
committerBob Halley <halley@dnspython.org>2020-08-25 07:38:31 -0700
commit6594ff23d1cc231ceef285d96dfcdc1bb5de814f (patch)
tree49d23ebaa4324bdfcdc04c68802785782b322e87
parentf65cd9fa9cbf8ae19bad346dcad5d90b33ed9625 (diff)
downloaddnspython-6594ff23d1cc231ceef285d96dfcdc1bb5de814f.tar.gz
stronger constructor checking in SVCB/HTTPS params
-rw-r--r--dns/rdtypes/svcbbase.py25
1 files changed, 8 insertions, 17 deletions
diff --git a/dns/rdtypes/svcbbase.py b/dns/rdtypes/svcbbase.py
index 8ccdf23..ae2a949 100644
--- a/dns/rdtypes/svcbbase.py
+++ b/dns/rdtypes/svcbbase.py
@@ -149,18 +149,13 @@ class Param:
def emptiness(cls):
return Emptiness.NEVER
- def as_value(self, value):
- # This is the "additional type checking" placeholder that actually
- # doesn't do any additional checking.
- return value
-
@dns.immutable.immutable
class GenericParam(Param):
"""Generic SVCB parameter
"""
def __init__(self, value):
- self.value = self.as_value(value)
+ self.value = dns.rdata.Rdata._as_bytes(value, True)
@classmethod
def emptiness(cls):
@@ -200,8 +195,7 @@ class MandatoryParam(Param):
prior_k = k
if k == ParamKey.MANDATORY:
raise ValueError('listed the mandatory key as mandatory')
- keys = dns.immutable.constify(keys)
- self.keys = self.as_value(keys)
+ self.keys = tuple(keys)
@classmethod
def from_value(cls, value):
@@ -232,11 +226,10 @@ class MandatoryParam(Param):
class ALPNParam(Param):
def __init__(self, ids):
for id in ids:
+ id = dns.rdata.Rdata._as_bytes(id, True, 255)
if len(id) == 0:
raise dns.exception.FormError('empty ALPN')
- if len(id) > 255:
- raise ValueError('ALPN id too long')
- self.ids = self.as_value(dns.immutable.constify(ids))
+ self.ids = tuple(ids)
@classmethod
def from_value(cls, value):
@@ -292,9 +285,7 @@ class NoDefaultALPNParam(Param):
@dns.immutable.immutable
class PortParam(Param):
def __init__(self, port):
- if port < 0 or port > 65535:
- raise ValueError('port out-of-range')
- self.port = self.as_value(port)
+ self.port = dns.rdata.Rdata._as_uint16(port)
@classmethod
def from_value(cls, value):
@@ -319,7 +310,7 @@ class IPv4HintParam(Param):
for address in addresses:
# check validity
dns.ipv4.inet_aton(address)
- self.addresses = self.as_value(dns.immutable.constify(addresses))
+ self.addresses = tuple(addresses)
@classmethod
def from_value(cls, value):
@@ -348,7 +339,7 @@ class IPv6HintParam(Param):
for address in addresses:
# check validity
dns.ipv6.inet_aton(address)
- self.addresses = self.as_value(dns.immutable.constify(addresses))
+ self.addresses = tuple(addresses)
@classmethod
def from_value(cls, value):
@@ -374,7 +365,7 @@ class IPv6HintParam(Param):
@dns.immutable.immutable
class ECHConfigParam(Param):
def __init__(self, echconfig):
- self.echconfig = self.as_value(echconfig)
+ self.echconfig = dns.rdata.Rdata._as_bytes(echconfig, True)
@classmethod
def from_value(cls, value):