From a0c9290c01e98d4fce4c5ebbe9728f2d37199f3c Mon Sep 17 00:00:00 2001 From: Lev Walkin <vlm@lionet.info> Date: Mon, 28 Aug 2006 02:24:24 +0000 Subject: [PATCH] identifier name clash --- libasn1fix/asn1fix_bitstring.c | 17 ++++++++++++++--- libasn1fix/asn1fix_enum.c | 3 +-- libasn1fix/asn1fix_integer.c | 15 +++++---------- libasn1fix/asn1fix_misc.c | 3 +-- tests/113-bit-string-SE.asn1 | 16 ++++++++++++++++ 5 files changed, 37 insertions(+), 17 deletions(-) create mode 100644 tests/113-bit-string-SE.asn1 diff --git a/libasn1fix/asn1fix_bitstring.c b/libasn1fix/asn1fix_bitstring.c index f8adc753..e2f2434a 100644 --- a/libasn1fix/asn1fix_bitstring.c +++ b/libasn1fix/asn1fix_bitstring.c @@ -36,17 +36,28 @@ static int asn1f_fix_bit_string_type(arg_t *arg) { asn1p_expr_t *expr = arg->expr; asn1p_expr_t *v; + int r_value = 0; + int ret; TQ_FOR(v, &(expr->members), next) { + /* Check identifier uniqueness as per 21.4 */ + ret = asn1f_check_unique_expr_child(arg, v, 0); + RET2RVAL(ret, r_value); + + if(v->expr_type == A1TC_EXTENSIBLE) { + FATAL("Extension marker (...) is not allowed " + "as a BIT STRING NamedBit at line %d ", + v->_lineno); + return -1; + } if(v->expr_type != A1TC_UNIVERVAL) { FATAL("BIT STRING value at line %d " - "is not an identifier", - v->_lineno); + "is not an identifier", v->_lineno); return -1; } } - return 0; + return r_value; } static int diff --git a/libasn1fix/asn1fix_enum.c b/libasn1fix/asn1fix_enum.c index ce2fc2fc..cf03914f 100644 --- a/libasn1fix/asn1fix_enum.c +++ b/libasn1fix/asn1fix_enum.c @@ -34,8 +34,7 @@ asn1f_fix_enum(arg_t *arg) { */ if(ev->expr_type == A1TC_EXTENSIBLE) { if(ext_marker) { - arg->eh(1, - "Enumeration %s at line %d: " + FATAL("Enumeration %s at line %d: " "Second extension marker is not allowed", expr->Identifier, ev->_lineno); diff --git a/libasn1fix/asn1fix_integer.c b/libasn1fix/asn1fix_integer.c index 8a144911..0302acd2 100644 --- a/libasn1fix/asn1fix_integer.c +++ b/libasn1fix/asn1fix_integer.c @@ -38,20 +38,17 @@ asn1f_fix_integer(arg_t *arg) { * Found "...", check correctness. */ if(iv->expr_type == A1TC_EXTENSIBLE) { - arg->eh(1, - "INTEGER %s at line %d: " + FATAL("INTEGER %s at line %d: " "Extension marker is not allowed", expr->Identifier, - iv->_lineno - ); + iv->_lineno); rvalue = -1; continue; } if(iv->Identifier == NULL || iv->expr_type != A1TC_UNIVERVAL) { - arg->eh(1, - "INTEGER %s at line %d: " + FATAL("INTEGER %s at line %d: " "Unsupported enumeration element %s", expr->Identifier, iv->_lineno, @@ -62,8 +59,7 @@ asn1f_fix_integer(arg_t *arg) { } if(iv->value == NULL) { - arg->eh(1, - "INTEGER %s at line %d: " + FATAL("INTEGER %s at line %d: " "Value for the identifier %s " "must be set explicitly", expr->Identifier, @@ -84,8 +80,7 @@ asn1f_fix_integer(arg_t *arg) { } if(iv->value->type != ATV_INTEGER) { - arg->eh(1, - "INTEGER %s at line %d: " + FATAL("INTEGER %s at line %d: " "Value for the identifier %s " "is not compatible with INTEGER type", expr->Identifier, diff --git a/libasn1fix/asn1fix_misc.c b/libasn1fix/asn1fix_misc.c index 72317aa2..9e8cc07f 100644 --- a/libasn1fix/asn1fix_misc.c +++ b/libasn1fix/asn1fix_misc.c @@ -294,8 +294,7 @@ asn1f_check_unique_expr_child(arg_t *arg, asn1p_expr_t *child, msg = opt_compare ?"Expressions clash" :"Identifiers name clash"; - arg->eh(1, - "%s: " + FATAL("%s: " "\"%s\" at line %d has similar %s with " "\"%s\" at line %d", msg, diff --git a/tests/113-bit-string-SE.asn1 b/tests/113-bit-string-SE.asn1 new file mode 100644 index 00000000..110e7644 --- /dev/null +++ b/tests/113-bit-string-SE.asn1 @@ -0,0 +1,16 @@ + +-- SE: Semantic error + +-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1) +-- .spelio.software.asn1c.test (9363.1.5.1) +-- .113 + +ModuleBitStringExtensibility + { iso org(3) dod(6) internet (1) private(4) enterprise(1) + spelio(9363) software(1) asn1c(5) test(1) 113 } + DEFINITIONS ::= +BEGIN + + T ::= BIT STRING { one(1), one(2) } + +END -- GitLab