Skip to content

Commit

Permalink
Merge branch 'bjorn/asn1/broken-default-in-ext/ERIERL-60/OTP-13011' i…
Browse files Browse the repository at this point in the history
…nto maint-20

* bjorn/asn1/broken-default-in-ext/ERIERL-60/OTP-13011:
  Bump version
  Fix broken handling of default values in extensions for PER
  • Loading branch information
Erlang/OTP committed Aug 23, 2017
2 parents 73ecd4c + 17884d5 commit 9685b8b
Show file tree
Hide file tree
Showing 7 changed files with 79 additions and 3 deletions.
6 changes: 4 additions & 2 deletions lib/asn1/src/asn1ct_constructed_per.erl
Original file line number Diff line number Diff line change
Expand Up @@ -985,9 +985,11 @@ gen_enc_components_call1(Gen, TopType, [C|Rest], DynamicEnc, Ext) ->
Imm1;
'OPTIONAL' ->
enc_absent(Gen, Element, [asn1_NOVALUE], Imm1);
{'DEFAULT',Def} ->
{'DEFAULT',Def} when Ext =:= noext ->
DefValues = def_values(Type, Def),
enc_absent(Gen, Element, DefValues, Imm1)
enc_absent(Gen, Element, DefValues, Imm1);
{'DEFAULT',_} ->
enc_absent(Gen, Element, [asn1_DEFAULT], Imm1)
end,
Imm = case Imm2 of
[] -> [];
Expand Down
1 change: 1 addition & 0 deletions lib/asn1/src/asn1rtt_per_common.erl
Original file line number Diff line number Diff line change
Expand Up @@ -542,6 +542,7 @@ extension_bitmap(_Val, Pos, Limit, Acc) when Pos >= Limit ->
extension_bitmap(Val, Pos, Limit, Acc) ->
Bit = case element(Pos, Val) of
asn1_NOVALUE -> 0;
asn1_DEFAULT -> 0;
_ -> 1
end,
extension_bitmap(Val, Pos+1, Limit, (Acc bsl 1) bor Bit).
1 change: 1 addition & 0 deletions lib/asn1/test/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ MODULES= \
testChoTypeRefSet \
testConstraints \
testDef \
testExtensionDefault \
testOpt \
testSeqDefault \
testSeqExtension \
Expand Down
7 changes: 7 additions & 0 deletions lib/asn1/test/asn1_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,7 @@ groups() ->
testImport,
testDER,
testDEFAULT,
testExtensionDefault,
testMvrasn6,
testContextSwitchingTypes,
testOpenTypeImplicitTag,
Expand Down Expand Up @@ -444,6 +445,12 @@ testDEFAULT(Config, Rule, Opts) ->
testDef:main(Rule),
testSeqSetDefaultVal:main(Rule, Opts).

testExtensionDefault(Config) ->
test(Config, fun testExtensionDefault/3).
testExtensionDefault(Config, Rule, Opts) ->
asn1_test_lib:compile_all(["ExtensionDefault"], Config, [Rule|Opts]),
testExtensionDefault:main(Rule).

testMaps(Config) ->
test(Config, fun testMaps/3,
[{ber,[maps,no_ok_wrapper]},
Expand Down
12 changes: 12 additions & 0 deletions lib/asn1/test/asn1_SUITE_data/ExtensionDefault.asn1
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
ExtensionDefault DEFINITIONS AUTOMATIC TAGS ::=

BEGIN

Message ::= SEQUENCE {
id INTEGER (0..5),
...,
priority Priority DEFAULT low
}
Priority ::= ENUMERATED { low(0), high(1), ... }

END
53 changes: 53 additions & 0 deletions lib/asn1/test/testExtensionDefault.erl
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
%%
%% %CopyrightBegin%
%%
%% Copyright Ericsson AB 2017. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
%% You may obtain a copy of the License at
%%
%% http://www.apache.org/licenses/LICENSE-2.0
%%
%% Unless required by applicable law or agreed to in writing, software
%% distributed under the License is distributed on an "AS IS" BASIS,
%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
%% See the License for the specific language governing permissions and
%% limitations under the License.
%%
%% %CopyrightEnd%
%%
%%
-module(testExtensionDefault).

-export([main/1]).

main(_Erule) ->
roundtrip('Message', {'Message',1,low}), %Will be explicitly encoded.
roundtrip('Message', {'Message',1,high}),
roundtrip('Message', {'Message',1,asn1_DEFAULT}, {'Message',1,low}),

map_roundtrip('Message', #{id=>1,priority=>low}), %Will be explicitly encoded.
map_roundtrip('Message', #{id=>1,priority=>high}),
map_roundtrip('Message', #{id=>1}, #{id=>1,priority=>low}),
ok.

roundtrip(Type, Value) ->
asn1_test_lib:roundtrip('ExtensionDefault', Type, Value).

roundtrip(Type, Value, Expected) ->
%% asn1_test_lib:roundtrip/3 will invoke map_roundtrip/3, which will
%% not work in this case. Therefore, implement the roundtrip ourselves.
M = 'ExtensionDefault',
{ok,Enc} = M:encode(Type, Value),
{ok,Expected} = M:decode(Type, Enc),
ok.

map_roundtrip(Type, Value) ->
map_roundtrip(Type, Value, Value).

map_roundtrip(Type, Value, Expected) ->
M = 'maps_ExtensionDefault',
Enc = M:encode(Type, Value),
Expected = M:decode(Type, Enc),
ok.
2 changes: 1 addition & 1 deletion lib/asn1/vsn.mk
Original file line number Diff line number Diff line change
@@ -1 +1 @@
ASN1_VSN = 5.0.1
ASN1_VSN = 5.0.2

0 comments on commit 9685b8b

Please sign in to comment.