Use a sized type for asn1t.h flags. We currently shift between unsigned long and int. Bug: 516 Change-Id: I9e3fcc9393e24a352a2c08b9df0650a508d7a60b Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/55448 Reviewed-by: Bob Beck <bbe@google.com> Commit-Queue: Bob Beck <bbe@google.com> Auto-Submit: David Benjamin <davidben@google.com>
diff --git a/crypto/asn1/tasn_dec.c b/crypto/asn1/tasn_dec.c index de87791..5eb6e6e 100644 --- a/crypto/asn1/tasn_dec.c +++ b/crypto/asn1/tasn_dec.c
@@ -377,7 +377,7 @@ if (i == (it->tcount - 1)) { isopt = 0; } else { - isopt = (char)(seqtt->flags & ASN1_TFLG_OPTIONAL); + isopt = (seqtt->flags & ASN1_TFLG_OPTIONAL) != 0; } // attempt to read in field, allowing each to be OPTIONAL @@ -459,14 +459,14 @@ static int asn1_template_ex_d2i(ASN1_VALUE **val, const unsigned char **in, long inlen, const ASN1_TEMPLATE *tt, char opt, int depth) { - int flags, aclass; + int aclass; int ret; long len; const unsigned char *p, *q; if (!val) { return 0; } - flags = tt->flags; + uint32_t flags = tt->flags; aclass = flags & ASN1_TFLG_TAG_CLASS; p = *in; @@ -517,13 +517,13 @@ static int asn1_template_noexp_d2i(ASN1_VALUE **val, const unsigned char **in, long len, const ASN1_TEMPLATE *tt, char opt, int depth) { - int flags, aclass; + int aclass; int ret; const unsigned char *p; if (!val) { return 0; } - flags = tt->flags; + uint32_t flags = tt->flags; aclass = flags & ASN1_TFLG_TAG_CLASS; p = *in;
diff --git a/crypto/asn1/tasn_enc.c b/crypto/asn1/tasn_enc.c index 39a3d52..5b9a8d4 100644 --- a/crypto/asn1/tasn_enc.c +++ b/crypto/asn1/tasn_enc.c
@@ -263,9 +263,9 @@ // taking an |optional| parameter, it uses the |ASN1_TFLG_OPTIONAL| flag. static int asn1_template_ex_i2d(ASN1_VALUE **pval, unsigned char **out, const ASN1_TEMPLATE *tt, int tag, int iclass) { - int i, ret, flags, ttag, tclass; + int i, ret, ttag, tclass; size_t j; - flags = tt->flags; + uint32_t flags = tt->flags; // Historically, |iclass| was repurposed to pass additional flags into the // encoding process.
diff --git a/include/openssl/asn1t.h b/include/openssl/asn1t.h index 105cee8..b32fe34 100644 --- a/include/openssl/asn1t.h +++ b/include/openssl/asn1t.h
@@ -348,7 +348,7 @@ */ struct ASN1_TEMPLATE_st { -unsigned long flags; /* Various flags */ +uint32_t flags; /* Various flags */ long tag; /* tag, not used if no tagging */ unsigned long offset; /* Offset of this field in structure */ const char *field_name; /* Field name */ @@ -366,7 +366,7 @@ typedef struct asn1_must_be_null_st ASN1_MUST_BE_NULL; struct ASN1_ADB_st { - unsigned long flags; /* Various flags */ + uint32_t flags; /* Various flags */ unsigned long offset; /* Offset of selector field */ ASN1_MUST_BE_NULL *unused; const ASN1_ADB_TABLE *tbl; /* Table of possible types */ @@ -563,7 +563,7 @@ typedef struct ASN1_AUX_st { void *app_data; - int flags; + uint32_t flags; int ref_offset; /* Offset of reference value */ ASN1_aux_cb *asn1_cb; int enc_offset; /* Offset of ASN1_ENCODING structure */