diff options
author | Lev Walkin <vlm@lionet.info> | 2006-08-28 02:12:49 +0000 |
---|---|---|
committer | Lev Walkin <vlm@lionet.info> | 2006-08-28 02:12:49 +0000 |
commit | ef4a32bd3fac06caa052ab113694736a40027b3d (patch) | |
tree | 9fa25e03522d52be8ef595d5293d5f29f6114446 /libasn1fix | |
parent | 0f8d4a4145f854dc6ca223bd2d78f18def39d264 (diff) |
test whether bit string values are identifiers
Diffstat (limited to 'libasn1fix')
-rw-r--r-- | libasn1fix/asn1fix_bitstring.c | 28 |
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; |