diff options
author | Hans Nilsson <[email protected]> | 2017-11-21 16:25:31 +0100 |
---|---|---|
committer | Hans Nilsson <[email protected]> | 2017-11-21 19:36:35 +0100 |
commit | 1a2a36794f1913b5a813c133bdfb9eea74d0a386 (patch) | |
tree | 3557c42469974601ab3dc7f66193ad2b0f97c266 /lib/asn1 | |
parent | bab7b1aba04209c90d15be7147cc3524ae6964f5 (diff) | |
download | otp-1a2a36794f1913b5a813c133bdfb9eea74d0a386.tar.gz otp-1a2a36794f1913b5a813c133bdfb9eea74d0a386.tar.bz2 otp-1a2a36794f1913b5a813c133bdfb9eea74d0a386.zip |
asn1: Protect more by try..catch
Diffstat (limited to 'lib/asn1')
-rw-r--r-- | lib/asn1/src/asn1ct_gen.erl | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/lib/asn1/src/asn1ct_gen.erl b/lib/asn1/src/asn1ct_gen.erl index 806f8420ec..bd50a1ee18 100644 --- a/lib/asn1/src/asn1ct_gen.erl +++ b/lib/asn1/src/asn1ct_gen.erl @@ -707,6 +707,7 @@ gen_exports([_|_]=L0, Prefix, Arity) -> pgen_dispatcher(Erules, []) -> gen_info_functions(Erules); pgen_dispatcher(Gen, Types) -> + %% MODULE HEAD emit(["-export([encode/2,decode/2]).",nl,nl]), gen_info_functions(Gen), @@ -714,6 +715,7 @@ pgen_dispatcher(Gen, Types) -> NoFinalPadding = lists:member(no_final_padding, Options), NoOkWrapper = proplists:get_bool(no_ok_wrapper, Options), + %% ENCODER Call = case Gen of #gen{erule=per,aligned=true} -> asn1ct_func:need({per,complete,1}), @@ -740,6 +742,7 @@ pgen_dispatcher(Gen, Types) -> end, emit([nl,nl]), + %% DECODER ReturnRest = proplists:get_bool(undec_rest, Gen#gen.options), Data = case Gen#gen.erule =:= ber andalso ReturnRest of true -> "Data0"; @@ -747,6 +750,12 @@ pgen_dispatcher(Gen, Types) -> end, emit(["decode(Type, ",Data,") ->",nl]), + + case NoOkWrapper of + false -> emit(["try",nl," case",nl," begin",nl]); + true -> emit(["case",nl," begin"]) + end, + DecWrap = case {Gen,ReturnRest} of {#gen{erule=ber},false} -> @@ -754,20 +763,18 @@ pgen_dispatcher(Gen, Types) -> "element(1, ber_decode_nif(Data))"; {#gen{erule=ber},true} -> asn1ct_func:need({ber,ber_decode_nif,1}), - emit(["{Data,Rest} = ber_decode_nif(Data0),",nl]), + emit([" {Data,Rest} = ber_decode_nif(Data0),",nl]), "Data"; {_,_} -> "Data" end, - emit([case NoOkWrapper of - false -> "try"; - true -> "case" - end, " decode_disp(Type, ",DecWrap,") of",nl]), + + emit([" decode_disp(Type, ",DecWrap,")",nl," end of",nl]), case Gen of #gen{erule=ber} -> - emit([" Result ->",nl]); + emit([" Result ->",nl]); #gen{erule=per} -> - emit([" {Result,Rest} ->",nl]) + emit([" {Result,Rest} ->",nl]) end, case ReturnRest of false -> result_line(NoOkWrapper, ["Result"]); @@ -775,11 +782,12 @@ pgen_dispatcher(Gen, Types) -> end, case NoOkWrapper of false -> - emit([nl,try_catch(),nl,nl]); + emit([nl," end",nl,try_catch(),nl,nl]); true -> emit([nl,"end.",nl,nl]) end, + %% REST of MODULE gen_decode_partial_incomplete(Gen), gen_partial_inc_dispatcher(Gen), |