summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKenneth Lundin <kenneth@erlang.org>2021-04-07 17:39:22 +0200
committerKenneth Lundin <kenneth@erlang.org>2021-04-07 17:39:22 +0200
commit48c225a58ad35ea71aa3d1173dfed4aaf4c2dd7b (patch)
tree7b4f38df98701114dac8f4f8b5aa65f9bc3ed817
parent6b84252af93f3353ba438d679052565cdbcf646a (diff)
downloaderlang-kenneth/asn1_paramtype/OTP-17227.tar.gz
Correction for JER encoding rules so that an INTEGER value outside thekenneth/asn1_paramtype/OTP-17227
declared range are now reported as error during decode. OTP-17306, ERIERL-506
-rw-r--r--lib/asn1/src/asn1rtt_jer.erl8
-rw-r--r--lib/asn1/test/testConstraints.erl7
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)