diff --git a/lib/asn1/check-gen.c b/lib/asn1/check-gen.c index 8f417a7ee..87deb61c0 100644 --- a/lib/asn1/check-gen.c +++ b/lib/asn1/check-gen.c @@ -604,8 +604,6 @@ test_choice (void) return ret; } -#ifdef IMPLICIT_TAGGING_WORKS - static int cmp_TESTImplicit (void *a, void *b) { @@ -614,7 +612,7 @@ cmp_TESTImplicit (void *a, void *b) COMPARE_INTEGER(aa,ab,ti1); COMPARE_INTEGER(aa,ab,ti2.foo); - + COMPARE_INTEGER(aa,ab,ti3); return 0; } @@ -641,19 +639,29 @@ test_implicit (void) TESTImplicit c0; memset(&c0, 0, sizeof(c0)); - c0.ti1 = 1; + c0.ti1 = 0; c0.ti2.foo = 2; c0.ti3 = 3; tests[0].val = &c0; - return generic_test (tests, ntests, sizeof(TESTImplicit), + ret += generic_test (tests, ntests, sizeof(TESTImplicit), (generic_encode)encode_TESTImplicit, (generic_length)length_TESTImplicit, (generic_decode)decode_TESTImplicit, (generic_free)free_TESTImplicit, cmp_TESTImplicit); -} + +#ifdef IMPLICIT_TAGGING_WORKS + ret += generic_test (tests, ntests, sizeof(TESTImplicit2), + (generic_encode)encode_TESTImplicit2, + (generic_length)length_TESTImplicit2, + (generic_decode)decode_TESTImplicit2, + (generic_free)free_TESTImplicit2, + cmp_TESTImplicit); + #endif /* IMPLICIT_TAGGING_WORKS */ + return ret; +} static int check_fail_largetag(void) diff --git a/lib/asn1/test.asn1 b/lib/asn1/test.asn1 index 752c593a9..1a3110294 100644 --- a/lib/asn1/test.asn1 +++ b/lib/asn1/test.asn1 @@ -32,6 +32,14 @@ TESTInteger2 ::= [4] IMPLICIT TESTInteger TESTInteger3 ::= [5] IMPLICIT TESTInteger2 TESTImplicit ::= SEQUENCE { + ti1[0] IMPLICIT INTEGER (-2147483648..2147483647), + ti2[1] IMPLICIT SEQUENCE { + foo[127] INTEGER (-2147483648..2147483647) + }, + ti3[2] IMPLICIT [5] IMPLICIT [4] IMPLICIT INTEGER (-2147483648..2147483647) +} + +TESTImplicit2 ::= SEQUENCE { ti1[0] IMPLICIT TESTInteger, ti2[1] IMPLICIT TESTLargeTag, ti3[2] IMPLICIT TESTInteger3