summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandre Snarskii <snar@snar.spb.ru>2021-08-23 13:44:08 +0300
committerAlexandre Snarskii <snar@snar.spb.ru>2021-08-23 13:44:08 +0300
commite61baae9fb990f6456f1f76474cf0851cb5d2a7d (patch)
tree228bbdc0e2e94d8da9274007c15bfee8b8d367f4
parent715e883337236d4d7d14e5f1905cd458572e8c90 (diff)
downloaderlang-e61baae9fb990f6456f1f76474cf0851cb5d2a7d.tar.gz
Malformed DNS RRs shall result in parse errors
-rw-r--r--lib/kernel/src/inet_dns.erl7
1 files changed, 7 insertions, 0 deletions
diff --git a/lib/kernel/src/inet_dns.erl b/lib/kernel/src/inet_dns.erl
index 7a9444ba74..8f63dfdf11 100644
--- a/lib/kernel/src/inet_dns.erl
+++ b/lib/kernel/src/inet_dns.erl
@@ -500,6 +500,13 @@ decode_data(<<Flags:8,Data0/binary>>, _, ?S_CAA, _) ->
orelse throw(?DECODE_ERROR),
Value = binary_to_list(Data1),
{Flags,inet_db:tolower(Tag),Value};
+%% malformed known RR in inet domain
+decode_data(_, in, T, _) when T == ?S_A; T == ?S_AAAA; T == ?S_WKS ->
+ throw(?DECODE_ERROR);
+%% malormed known RR in any domain
+decode_data(_, _, T, _) when T == ?S_HINFO; T == ?S_MX; T == ?S_SRV;
+ T == ?S_NAPTR; T == ?S_URI; T == ?S_CAA ->
+ throw(?DECODE_ERROR);
%% sofar unknown or non standard
decode_data(Data, _, _, _) ->
Data.