From f7c7510b55efe6a1ab1133f47ec4c3b0371784e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Gustavsson?= Date: Tue, 2 Apr 2013 13:39:50 +0200 Subject: Prevent loss of objects after the extension marker In an object set with a single root object, objects after the extension marker would be lost. --- lib/asn1/src/asn1ct_check.erl | 4 ++-- lib/asn1/test/asn1_SUITE_data/Param2.asn1 | 12 ++++++++++++ lib/asn1/test/testParameterizedInfObj.erl | 5 +++++ 3 files changed, 19 insertions(+), 2 deletions(-) (limited to 'lib') diff --git a/lib/asn1/src/asn1ct_check.erl b/lib/asn1/src/asn1ct_check.erl index 2b48c62ac9..99b09c4e90 100644 --- a/lib/asn1/src/asn1ct_check.erl +++ b/lib/asn1/src/asn1ct_check.erl @@ -1025,8 +1025,8 @@ prepare_objset({{'SingleValue',Set},Ext}) -> %% {set,lists:append([Set,Ext]),true}; prepare_objset({Set,Ext}) when is_list(Set) -> {set,merge_sets(Set,Ext),true}; -prepare_objset({ObjDef={object,definedsyntax,_ObjFields},_Ext}) -> - {set,[ObjDef],true}; +prepare_objset({{object,definedsyntax,_ObjFields}=Set,Ext}) -> + {set,merge_sets(Set, Ext),true}; prepare_objset(ObjDef={object,definedsyntax,_ObjFields}) -> {set,[ObjDef],false}; prepare_objset({ObjDef=#type{},Ext}) when is_list(Ext) -> diff --git a/lib/asn1/test/asn1_SUITE_data/Param2.asn1 b/lib/asn1/test/asn1_SUITE_data/Param2.asn1 index 4393f875b6..09ccb367d8 100644 --- a/lib/asn1/test/asn1_SUITE_data/Param2.asn1 +++ b/lib/asn1/test/asn1_SUITE_data/Param2.asn1 @@ -33,4 +33,16 @@ BEGIN --Delete-end } + SingleRoot ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { SingleRootIEs } }, + ... + } + + -- The extension was lost when there was a single root item. + SingleRootIEs S1AP-PROTOCOL-IES ::= { + { ID 1 TYPE OCTET STRING }, + ..., + { ID 2 TYPE INTEGER } + } + END diff --git a/lib/asn1/test/testParameterizedInfObj.erl b/lib/asn1/test/testParameterizedInfObj.erl index 2c3bb0d119..940b96a339 100644 --- a/lib/asn1/test/testParameterizedInfObj.erl +++ b/lib/asn1/test/testParameterizedInfObj.erl @@ -141,6 +141,11 @@ param2(Config, Erule) -> asn1_wrapper:decode('Param2', 'HandoverRequired', Enc), true = is_binary(Open100), true = is_binary(Open101), + + %% Test single root. + roundtrip2('SingleRoot', + {'SingleRoot',[{'ProtocolIE-Field',1,"ABC"}, + {'ProtocolIE-Field',2,9999}]}), ok. -- cgit v1.2.3