diff options
author | Björn Gustavsson <[email protected]> | 2013-04-16 10:40:32 +0200 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2013-05-31 14:52:23 +0200 |
commit | a1495bd1e09dbefa8595e9388140140c143088f2 (patch) | |
tree | dc19bf40b19ca89b0c6e11b0874ffefa3ce2d05b /lib | |
parent | e0a1be73c126998b37ca42bbdc1da3d40bef3723 (diff) | |
download | otp-a1495bd1e09dbefa8595e9388140140c143088f2.tar.gz otp-a1495bd1e09dbefa8595e9388140140c143088f2.tar.bz2 otp-a1495bd1e09dbefa8595e9388140140c143088f2.zip |
PER/UPER: Fix decoding of semi-constrained INTEGERs
A semi-constrained INTEGER with a non-zero lower bound would be
incorrectly decoded. This bug was introduced in R16.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/asn1/src/asn1ct_imm.erl | 2 | ||||
-rw-r--r-- | lib/asn1/test/asn1_SUITE_data/Constraints.py | 4 | ||||
-rw-r--r-- | lib/asn1/test/testConstraints.erl | 10 |
3 files changed, 15 insertions, 1 deletions
diff --git a/lib/asn1/src/asn1ct_imm.erl b/lib/asn1/src/asn1ct_imm.erl index 5585cad925..c6803a0f96 100644 --- a/lib/asn1/src/asn1ct_imm.erl +++ b/lib/asn1/src/asn1ct_imm.erl @@ -198,7 +198,7 @@ per_dec_enumerated_fix_list([], Tail, _) -> Tail. per_dec_integer_1([{'SingleValue',Value}], _Aligned) -> {value,Value}; per_dec_integer_1([{'ValueRange',{Lb,'MAX'}}], Aligned) when is_integer(Lb) -> - per_dec_unconstrained(Aligned); + per_decode_semi_constrained(Lb, Aligned); per_dec_integer_1([{'ValueRange',{Lb,Ub}}], Aligned) when is_integer(Lb), is_integer(Ub) -> per_dec_constrained(Lb, Ub, Aligned); diff --git a/lib/asn1/test/asn1_SUITE_data/Constraints.py b/lib/asn1/test/asn1_SUITE_data/Constraints.py index a069364084..1d2f4bc44c 100644 --- a/lib/asn1/test/asn1_SUITE_data/Constraints.py +++ b/lib/asn1/test/asn1_SUITE_data/Constraints.py @@ -12,6 +12,10 @@ ContainedSubtype ::= INTEGER (INCLUDES Range10to20) -- Some ranges for additional constrained number testing. LongLong ::= INTEGER (0..18446744073709551615) Range256to65536 ::= INTEGER (256..65536) +SemiConstrained ::= INTEGER (100..MAX) +NegSemiConstrained ::= INTEGER (-128..MAX) + +-- Other constraints FixedSize ::= OCTET STRING (SIZE(10)) FixedSize2 ::= OCTET STRING (SIZE(10|20)) VariableSize ::= OCTET STRING (SIZE(1..10)) diff --git a/lib/asn1/test/testConstraints.erl b/lib/asn1/test/testConstraints.erl index fc217e45f7..b90ae8cab2 100644 --- a/lib/asn1/test/testConstraints.erl +++ b/lib/asn1/test/testConstraints.erl @@ -122,6 +122,16 @@ int_constraints(Rules) -> range_error(Rules, 'X1', 21), %%========================================================== + %% SemiConstrained + %%========================================================== + + roundtrip('SemiConstrained', 100), + roundtrip('SemiConstrained', 397249742397243), + roundtrip('NegSemiConstrained', -128), + roundtrip('NegSemiConstrained', -1), + roundtrip('NegSemiConstrained', 500), + + %%========================================================== %% SIZE Constraint (Duboisson p. 268) %% T ::= IA5String (SIZE (1|2, ..., SIZE (1|2|3))) %% T2 ::= IA5String (SIZE (1|2, ..., 3)) |