File otp_src_20.3.8.26-lib-asn1-compat.patch of Package erlang
diff -Ndurp otp_src_20.3.8.26/lib/asn1/src/asn1rtt_jer.erl otp_src_20.3.8.26-lib-asn1-compat/lib/asn1/src/asn1rtt_jer.erl
--- otp_src_20.3.8.26/lib/asn1/src/asn1rtt_jer.erl 2020-04-17 17:30:39.478146197 +0300
+++ otp_src_20.3.8.26-lib-asn1-compat/lib/asn1/src/asn1rtt_jer.erl 2020-04-17 18:02:29.618599486 +0300
@@ -94,8 +94,11 @@ encode_jer(octet_string,Value) when is_b
encode_jer({octet_string,_Prop}, Value) when is_binary(Value) ->
bitstring2json(Value);
-encode_jer({'ENUMERATED',EnumMap},Val) when is_map_key(Val,EnumMap) ->
- Val;
+encode_jer(Type = {'ENUMERATED',EnumMap},Val) ->
+ case EnumMap of
+ #{Val := _} -> Val;
+ _ -> exit({error,{asn1,{{encode,Type},Val}}})
+ end;
encode_jer({Type = {'ENUMERATED',_EnumList},_Constr}, Val) ->
encode_jer(Type,Val);
@@ -111,7 +114,7 @@ encode_jer({typeinfo,{Module,Func}},Val)
encode_jer({sof,Type},Vals) when is_list(Vals) ->
[encode_jer(Type,Val)||Val <- Vals];
encode_jer({choice,Choices},{Alt,Value}) ->
- case is_map_key(AltBin = atom_to_binary(Alt,utf8),Choices) of
+ case maps:is_key(AltBin = atom_to_binary(Alt,utf8),Choices) of
true ->
EncodedVal = encode_jer(maps:get(AltBin,Choices),Value),
#{AltBin => EncodedVal};
@@ -280,17 +283,21 @@ decode_jer({'ObjClassFieldType',_,_},Bin
decode_jer('ASN1_OPEN_TYPE',Bin) when is_binary(Bin) ->
Bin.
-decode_jer_component([{Name, Type, _OptOrDefault} | CompInfos], VMap, Acc)
- when is_map_key(Name, VMap) ->
- Value = maps:get(Name, VMap),
- Dec = decode_jer(Type, Value),
- decode_jer_component(CompInfos, VMap, [Dec | Acc]);
-decode_jer_component([{_Name, _Type, 'OPTIONAL'} | CompInfos], VMap, Acc) ->
- decode_jer_component(CompInfos, VMap, [asn1_NOVALUE | Acc]);
-decode_jer_component([{_Name, _Type, {'DEFAULT',Dvalue}} | CompInfos], VMap, Acc) ->
- decode_jer_component(CompInfos, VMap, [Dvalue | Acc]);
-decode_jer_component([{Name, _Type, _OptOrDefault} | _CompInfos], VMap, _Acc) ->
- exit({error,{asn1,{{decode,{mandatory_component_missing,Name}},VMap}}});
+decode_jer_component([{Name, Type, OptOrDefault} | CompInfos], VMap, Acc) ->
+ case VMap of
+ #{Name := Value} ->
+ Dec = decode_jer(Type, Value),
+ decode_jer_component(CompInfos, VMap, [Dec | Acc]);
+ _ ->
+ case OptOrDefault of
+ 'OPTIONAL' ->
+ decode_jer_component(CompInfos, VMap, [asn1_NOVALUE | Acc]);
+ {'DEFAULT',Dvalue} ->
+ decode_jer_component(CompInfos, VMap, [Dvalue | Acc]);
+ _ ->
+ exit({error,{asn1,{{decode,{mandatory_component_missing,Name}},VMap}}})
+ end
+ end;
decode_jer_component([], _, Acc) ->
lists:reverse(Acc).