diff options
author | Gustav Simonsson <[email protected]> | 2012-02-14 15:01:05 +0100 |
---|---|---|
committer | Gustav Simonsson <[email protected]> | 2012-02-14 15:01:05 +0100 |
commit | c8699e75489d99dad8ec9430a621a39030da3659 (patch) | |
tree | ac452386cb7a49aea3a38c21a12ddf24ef5cd166 | |
parent | 42550aa765f0336aaa103f059491d2f6a7df3a51 (diff) | |
parent | 6c2e966d4fccf7ec60795a3293492862f76aba5c (diff) | |
download | otp-c8699e75489d99dad8ec9430a621a39030da3659.tar.gz otp-c8699e75489d99dad8ec9430a621a39030da3659.tar.bz2 otp-c8699e75489d99dad8ec9430a621a39030da3659.zip |
Merge branch 'gustav/asn1-integer/sequence-fix/OTP-9688' into maint_with_asn1
-rw-r--r-- | lib/asn1/src/asn1ct_check.erl | 3 | ||||
-rw-r--r-- | lib/asn1/src/asn1ct_gen_per.erl | 4 | ||||
-rw-r--r-- | lib/asn1/src/asn1ct_gen_per_rt2ct.erl | 4 | ||||
-rw-r--r-- | lib/asn1/test/asn1_SUITE.erl.src | 25 |
4 files changed, 34 insertions, 2 deletions
diff --git a/lib/asn1/src/asn1ct_check.erl b/lib/asn1/src/asn1ct_check.erl index e318477234..105fc02819 100644 --- a/lib/asn1/src/asn1ct_check.erl +++ b/lib/asn1/src/asn1ct_check.erl @@ -5253,6 +5253,9 @@ check_int(S,[{'NamedNumber',Id,Num}|T],Acc) when is_integer(Num) -> check_int(S,[{'NamedNumber',Id,{identifier,_,Name}}|T],Acc) -> Val = dbget_ex(S,S#state.mname,Name), check_int(S,[{'NamedNumber',Id,Val#valuedef.value}|T],Acc); +check_int(S,[{'NamedNumber',Id,{'Externalvaluereference',_,Mod,Name}}|T],Acc) -> + Val = dbget_ex(S,Mod,Name), + check_int(S,[{'NamedNumber',Id,Val#valuedef.value}|T],Acc); check_int(_S,[],Acc) -> lists:keysort(2,Acc). diff --git a/lib/asn1/src/asn1ct_gen_per.erl b/lib/asn1/src/asn1ct_gen_per.erl index b90a0adf81..8fd7a69a19 100644 --- a/lib/asn1/src/asn1ct_gen_per.erl +++ b/lib/asn1/src/asn1ct_gen_per.erl @@ -358,6 +358,10 @@ greatest_common_range2({_,Int},VR={_Lb,_Ub}) when is_integer(Int) -> greatest_common_range2({_,L},{Lb,Ub}) when is_list(L) -> Min = least_Lb([Lb|L]), Max = greatest_Ub([Ub|L]), + [{'ValueRange',{Min,Max}}]; +greatest_common_range2({Lb1,Ub1},{Lb2,Ub2}) -> + Min = least_Lb([Lb1,Lb2]), + Max = greatest_Ub([Ub1,Ub2]), [{'ValueRange',{Min,Max}}]. mk_vr([{Type,I}]) when is_atom(Type), is_integer(I) -> diff --git a/lib/asn1/src/asn1ct_gen_per_rt2ct.erl b/lib/asn1/src/asn1ct_gen_per_rt2ct.erl index 1a0a0e211d..fb9613c18d 100644 --- a/lib/asn1/src/asn1ct_gen_per_rt2ct.erl +++ b/lib/asn1/src/asn1ct_gen_per_rt2ct.erl @@ -704,6 +704,10 @@ greatest_common_range([{_,Int}],VR=[{_,{_Lb,_Ub}}]) when is_integer(Int) -> greatest_common_range([{_,L}],[{_,{Lb,Ub}}]) when is_list(L) -> Min = least_Lb([Lb|L]), Max = greatest_Ub([Ub|L]), + [{'ValueRange',{Min,Max}}]; +greatest_common_range([{_,{Lb1,Ub1}}],[{_,{Lb2,Ub2}}]) -> + Min = least_Lb([Lb1,Lb2]), + Max = greatest_Ub([Ub1,Ub2]), [{'ValueRange',{Min,Max}}]. diff --git a/lib/asn1/test/asn1_SUITE.erl.src b/lib/asn1/test/asn1_SUITE.erl.src index 124ee2d2bb..dd24feeda9 100644 --- a/lib/asn1/test/asn1_SUITE.erl.src +++ b/lib/asn1/test/asn1_SUITE.erl.src @@ -96,7 +96,8 @@ all() -> [{group,compile},parse,default_per,default_ber,default_per_opt,per, testSSLspecs, testNortel,test_undecoded_rest, test_inline, testTcapsystem, testNBAPsystem, test_compile_options,testDoubleEllipses, test_modified_x420, - testX420, test_x691,ticket_6143, testExtensionAdditionGroup + testX420, test_x691,ticket_6143, testExtensionAdditionGroup, + test_OTP_9688 ] ++ common() ++ particular(). groups() -> @@ -2369,4 +2370,24 @@ test_modules() -> "LDAP" ]. - +test_OTP_9688(_Config) -> + Asn1Mod = "OTP-9688.asn1", + Files = [Asn1Mod, "OTP-9688.asn1db", "OTP-9688.beam", "OTP-9688.erl", "OTP-9688.hrl"], + Data = + " +OTP-9688 DEFINITIONS ::= BEGIN + + foo INTEGER ::= 1 + bar INTEGER ::= 42 + + Baz ::= INTEGER {x-y-z1(foo), x-y-z2(bar)} + Qux ::= SEQUENCE {flerpInfo SEQUENCE {x INTEGER (-10 | -9 | (0..4))} OPTIONAL} + +END +", + file:write_file(Asn1Mod, Data), + %% Does it compile with changes to asn1ct_check and asn1ct_gen_per_rt2ct? + %% (see ticket) + ok = asn1ct:compile(Asn1Mod), + [file:delete(File) || File <- Files], + ok.
\ No newline at end of file |