From 48c225a58ad35ea71aa3d1173dfed4aaf4c2dd7b Mon Sep 17 00:00:00 2001 From: Kenneth Lundin Date: Wed, 7 Apr 2021 17:39:22 +0200 Subject: Correction for JER encoding rules so that an INTEGER value outside the declared range are now reported as error during decode. OTP-17306, ERIERL-506 --- lib/asn1/src/asn1rtt_jer.erl | 8 +++++--- lib/asn1/test/testConstraints.erl | 7 +++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/lib/asn1/src/asn1rtt_jer.erl b/lib/asn1/src/asn1rtt_jer.erl index 80006e78a7..1efb9f1079 100644 --- a/lib/asn1/src/asn1rtt_jer.erl +++ b/lib/asn1/src/asn1rtt_jer.erl @@ -220,6 +220,8 @@ decode_jer({string,_Prop},Str) when is_binary(Str) -> binary_to_list(Str); decode_jer('INTEGER',Int) when is_integer(Int) -> Int; +decode_jer({'INTEGER',{Min,Max}},Int) when is_integer(Int),Max >=Int, Int >= Min -> + Int; decode_jer({Type = {'INTEGER_NNL',_NNList},_},Int) -> decode_jer(Type,Int); decode_jer({'INTEGER_NNL',NNList},Int) -> @@ -229,8 +231,6 @@ decode_jer({'INTEGER_NNL',NNList},Int) -> _ -> Int end; -decode_jer({'INTEGER',_Prop},Int) when is_integer(Int) -> - Int; decode_jer('BOOLEAN',Bool) when is_boolean(Bool) -> Bool; decode_jer({'BOOLEAN',_Prop},Bool) when is_boolean(Bool) -> @@ -280,7 +280,9 @@ decode_jer('RELATIVE-OID',OidBin) when is_binary(OidBin) -> decode_jer({'ObjClassFieldType',_,_},Bin) when is_binary(Bin) -> Bin; decode_jer('ASN1_OPEN_TYPE',Bin) when is_binary(Bin) -> - Bin. + Bin; +decode_jer(Type,Val) -> + exit({error,{asn1,{{decode,Type},Val}}}). decode_jer_component([{Name, Type, _OptOrDefault} | CompInfos], VMap, Acc) when is_map_key(Name, VMap) -> diff --git a/lib/asn1/test/testConstraints.erl b/lib/asn1/test/testConstraints.erl index 4611bbe2cf..2119056b19 100644 --- a/lib/asn1/test/testConstraints.erl +++ b/lib/asn1/test/testConstraints.erl @@ -26,6 +26,13 @@ -include_lib("common_test/include/ct.hrl"). int_constraints(Rules) -> + case Rules of + jer -> + {error,_} = 'Constraints':decode('SingleValue', <<"0">>), + {error,_} = 'Constraints':decode('SingleValue2', <<"21">>); + _ -> + ok + end, %%========================================================== %% SingleValue ::= INTEGER (1) -- cgit v1.2.1