aboutsummaryrefslogtreecommitdiffstats
path: root/libasn1fix
diff options
context:
space:
mode:
authorLev Walkin <vlm@lionet.info>2006-08-28 02:12:49 +0000
committerLev Walkin <vlm@lionet.info>2006-08-28 02:12:49 +0000
commitef4a32bd3fac06caa052ab113694736a40027b3d (patch)
tree9fa25e03522d52be8ef595d5293d5f29f6114446 /libasn1fix
parent0f8d4a4145f854dc6ca223bd2d78f18def39d264 (diff)
test whether bit string values are identifiers
Diffstat (limited to 'libasn1fix')
-rw-r--r--libasn1fix/asn1fix_bitstring.c28
1 files changed, 26 insertions, 2 deletions
diff --git a/libasn1fix/asn1fix_bitstring.c b/libasn1fix/asn1fix_bitstring.c
index 8297f276..f8adc753 100644
--- a/libasn1fix/asn1fix_bitstring.c
+++ b/libasn1fix/asn1fix_bitstring.c
@@ -1,6 +1,7 @@
#include "asn1fix_internal.h"
-int asn1f_fix_bit_string_value(arg_t *arg, asn1p_expr_t *ttype);
+static int asn1f_fix_bit_string_type(arg_t *arg);
+static int asn1f_fix_bit_string_value(arg_t *arg, asn1p_expr_t *ttype);
static void asn1f_BS_remove_trailing_zero_bits(asn1p_value_t *value);
static int asn1f_BS_unparsed_convert(arg_t *arg, asn1p_value_t *value, asn1p_expr_t *ttype);
@@ -22,10 +23,33 @@ asn1f_fix_bit_string(arg_t *arg) {
}
}
+ if(expr->meta_type == AMT_TYPE
+ && expr->expr_type == ASN_BASIC_BIT_STRING) {
+ ret = asn1f_fix_bit_string_type(arg);
+ RET2RVAL(ret, r_value);
+ }
+
return r_value;
}
-int
+static int
+asn1f_fix_bit_string_type(arg_t *arg) {
+ asn1p_expr_t *expr = arg->expr;
+ asn1p_expr_t *v;
+
+ TQ_FOR(v, &(expr->members), next) {
+ if(v->expr_type != A1TC_UNIVERVAL) {
+ FATAL("BIT STRING value at line %d "
+ "is not an identifier",
+ v->_lineno);
+ return -1;
+ }
+ }
+
+ return 0;
+}
+
+static int
asn1f_fix_bit_string_value(arg_t *arg, asn1p_expr_t *ttype) {
asn1p_expr_t *expr = arg->expr;
int r_value = 0;