diff --git a/libasn1fix/asn1fix_tags.c b/libasn1fix/asn1fix_tags.c index ed08513b..ff662cc3 100644 --- a/libasn1fix/asn1fix_tags.c +++ b/libasn1fix/asn1fix_tags.c @@ -44,6 +44,8 @@ asn1f_fetch_tags_impl(arg_t *arg, struct asn1p_type_tag_s **tags, int count, int if(expr->expr_type == ASN_TYPE_ANY && (flags & AFT_IMAGINARY_ANY)) tt.tag_value = -1; + else if(expr->expr_type == ASN_CONSTR_CHOICE) + return count ? count : -1; else return -1; } diff --git a/tests/62-any-OK.asn1 b/tests/62-any-OK.asn1 index f3d784ca..0e69e01d 100644 --- a/tests/62-any-OK.asn1 +++ b/tests/62-any-OK.asn1 @@ -14,7 +14,8 @@ BEGIN T ::= CHOICE { s1 T1-ext, s2 T2, - s3 T3 + s3 T3, + s4 T4 } T1-ext ::= SEQUENCE { @@ -37,4 +38,8 @@ BEGIN m2 [1] BOOLEAN } + T4 ::= [53] CHOICE { + m1 [1] IMPLICIT OCTET STRING + } + END diff --git a/tests/62-any-OK.asn1.-EF b/tests/62-any-OK.asn1.-EF index 4c8f5c4b..a7917fc7 100644 --- a/tests/62-any-OK.asn1.-EF +++ b/tests/62-any-OK.asn1.-EF @@ -7,7 +7,8 @@ BEGIN T ::= CHOICE { s1 T1-ext, s2 T2, - s3 T3 + s3 T3, + s4 T4 } T1-ext ::= SEQUENCE { @@ -30,4 +31,8 @@ T3 ::= SET { m2 [1] IMPLICIT BOOLEAN } +T4 ::= [53] EXPLICIT CHOICE { + m1 [1] IMPLICIT OCTET STRING +} + END