diff options
author | Björn Gustavsson <[email protected]> | 2013-02-26 13:29:14 +0100 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2013-05-31 14:52:16 +0200 |
commit | 08f656658b460eb2a1acf7a57ef0f5a9a3f4bc68 (patch) | |
tree | eb627c80c2f515ff7ddfed4d46ed6c97c23f6d6e /lib/asn1/src | |
parent | 9972afbb35b4f4d40aefce37f5220a26c91e19ac (diff) | |
download | otp-08f656658b460eb2a1acf7a57ef0f5a9a3f4bc68.tar.gz otp-08f656658b460eb2a1acf7a57ef0f5a9a3f4bc68.tar.bz2 otp-08f656658b460eb2a1acf7a57ef0f5a9a3f4bc68.zip |
Fix handling of open interval constraints with pre-defined integers
The compiler would crash when given code such as the following:
Type ::= INTEGER (lower<..<upper)
lower INTEGER ::= 0
lower INTEGER ::= 42
Diffstat (limited to 'lib/asn1/src')
-rw-r--r-- | lib/asn1/src/asn1ct_check.erl | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/lib/asn1/src/asn1ct_check.erl b/lib/asn1/src/asn1ct_check.erl index 60977ba54f..80bd429e2c 100644 --- a/lib/asn1/src/asn1ct_check.erl +++ b/lib/asn1/src/asn1ct_check.erl @@ -4035,23 +4035,19 @@ resolv_value1(S, ERef = #'Externalvaluereference'{value=Name}) -> resolv_value1(S,VDef) end end; -resolv_value1(S,{gt,V}) -> - case V of +resolv_value1(S, {gt,V}) -> + case resolv_value1(S, V) of Int when is_integer(Int) -> - V + 1; - #valuedef{value=Int} -> - 1 + resolv_value(S,Int); + Int + 1; Other -> - throw({error,{asn1,{undefined_type_or_value,Other}}}) + throw({error,{asn1,{not_integer_value,Other}}}) end; -resolv_value1(S,{lt,V}) -> - case V of +resolv_value1(S, {lt,V}) -> + case resolv_value1(S, V) of Int when is_integer(Int) -> - V - 1; - #valuedef{value=Int} -> - resolv_value(S,Int) - 1; + Int - 1; Other -> - throw({error,{asn1,{undefined_type_or_value,Other}}}) + throw({error,{asn1,{not_integer_value,Other}}}) end; resolv_value1(S,{'ValueFromObject',{object,Object},[{valuefieldreference, FieldName}]}) -> |