aboutsummaryrefslogtreecommitdiffstats
path: root/lib/asn1/src
diff options
context:
space:
mode:
authorBjörn Gustavsson <[email protected]>2013-02-26 13:29:14 +0100
committerBjörn Gustavsson <[email protected]>2013-05-31 14:52:16 +0200
commit08f656658b460eb2a1acf7a57ef0f5a9a3f4bc68 (patch)
treeeb627c80c2f515ff7ddfed4d46ed6c97c23f6d6e /lib/asn1/src
parent9972afbb35b4f4d40aefce37f5220a26c91e19ac (diff)
downloadotp-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.erl20
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}]}) ->