diff options
author | Björn Gustavsson <[email protected]> | 2012-11-19 14:44:15 +0100 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2012-11-26 11:12:59 +0100 |
commit | 649df4292bc8c425c52cba3657547251ef78254f (patch) | |
tree | 4bda3950a5fc09ee6ba2f5a3a5b161118bf0758a /lib/asn1/src/asn1ct_check.erl | |
parent | 8369dac09279010238c4b887cb3bb7be90dd159e (diff) | |
download | otp-649df4292bc8c425c52cba3657547251ef78254f.tar.gz otp-649df4292bc8c425c52cba3657547251ef78254f.tar.bz2 otp-649df4292bc8c425c52cba3657547251ef78254f.zip |
Fix BER encoding when multiple levels of typedefs are used
Diffstat (limited to 'lib/asn1/src/asn1ct_check.erl')
-rw-r--r-- | lib/asn1/src/asn1ct_check.erl | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/lib/asn1/src/asn1ct_check.erl b/lib/asn1/src/asn1ct_check.erl index 5019114bec..fe1b2e14a8 100644 --- a/lib/asn1/src/asn1ct_check.erl +++ b/lib/asn1/src/asn1ct_check.erl @@ -3262,7 +3262,7 @@ check_type(S=#state{recordtopname=TopName},Type,Ts) when is_record(Ts,type) -> inlined=IsInlined}, TestFun = fun(Tref) -> - {_,MaybeChoice} = get_referenced_type(S,Tref), + MaybeChoice = get_non_typedef(S, Tref), case catch((MaybeChoice#typedef.typespec)#type.def) of {'CHOICE',_} -> maybe_illicit_implicit_tag(choice,Tag); @@ -3617,6 +3617,14 @@ check_type(S=#state{recordtopname=TopName},Type,Ts) when is_record(Ts,type) -> check_type(_S,Type,Ts) -> exit({error,{asn1,internal_error,Type,Ts}}). +get_non_typedef(S, Tref0) -> + case get_referenced_type(S, Tref0) of + {_,#typedef{typespec=#type{def=#'Externaltypereference'{}=Tref}}} -> + get_non_typedef(S, Tref); + {_,Type} -> + Type + end. + %% tablecinf_choose. A SEQUENCE or SET may be inserted in another %% SEQUENCE or SET by the COMPONENTS OF directive. If this inserted %% type is a referenced type that already has been checked it already |