Allow out_present to be NULL in CBS_get_optional_asn1
This is useful to skip an optional element, and mirrors the behaviour of CBS_get_optional_asn1_octet_string. Change-Id: Icb538c5e99a1d4e46412cae3c438184a94fab339 Reviewed-on: https://boringssl-review.googlesource.com/5800 Reviewed-by: Adam Langley <agl@google.com>
This commit is contained in:
parent
c9d40ba5b0
commit
23b185a3cf
@ -329,14 +329,19 @@ int CBS_get_asn1_uint64(CBS *cbs, uint64_t *out) {
|
||||
}
|
||||
|
||||
int CBS_get_optional_asn1(CBS *cbs, CBS *out, int *out_present, unsigned tag) {
|
||||
int present = 0;
|
||||
|
||||
if (CBS_peek_asn1_tag(cbs, tag)) {
|
||||
if (!CBS_get_asn1(cbs, out, tag)) {
|
||||
return 0;
|
||||
}
|
||||
*out_present = 1;
|
||||
} else {
|
||||
*out_present = 0;
|
||||
present = 1;
|
||||
}
|
||||
|
||||
if (out_present != NULL) {
|
||||
*out_present = present;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -178,10 +178,10 @@ OPENSSL_EXPORT int CBS_get_any_ber_asn1_element(CBS *cbs, CBS *out,
|
||||
* in 64 bits. */
|
||||
OPENSSL_EXPORT int CBS_get_asn1_uint64(CBS *cbs, uint64_t *out);
|
||||
|
||||
/* CBS_get_optional_asn1 gets an optional explicitly-tagged element
|
||||
* from |cbs| tagged with |tag| and sets |*out| to its contents. If
|
||||
* present, it sets |*out_present| to one, otherwise zero. It returns
|
||||
* one on success, whether or not the element was present, and zero on
|
||||
/* CBS_get_optional_asn1 gets an optional explicitly-tagged element from |cbs|
|
||||
* tagged with |tag| and sets |*out| to its contents. If present and if
|
||||
* |out_present| is not NULL, it sets |*out_present| to one, otherwise zero. It
|
||||
* returns one on success, whether or not the element was present, and zero on
|
||||
* decode failure. */
|
||||
OPENSSL_EXPORT int CBS_get_optional_asn1(CBS *cbs, CBS *out, int *out_present,
|
||||
unsigned tag);
|
||||
|
Loading…
Reference in New Issue
Block a user