Fix theoretical memory leak on malloc error in CBS_asn1_ber_to_der.
On failure, CBB_finish doesn't call CBB_cleanup. Also chain more of the ||s together now that CBB_cleanup after failed CBB_init is legal. (I don't think this is actually reachable because the CBB is guaranteed to be flushed by this point.) Change-Id: Ib16a0a185f15e13675ac2550c5e8e0926ceb7957 Reviewed-on: https://boringssl-review.googlesource.com/7051 Reviewed-by: Adam Langley <agl@google.com>
This commit is contained in:
parent
168297e870
commit
11aac10987
@ -209,13 +209,12 @@ int CBS_asn1_ber_to_der(CBS *in, uint8_t **out, size_t *out_len) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!CBB_init(&cbb, CBS_len(in))) {
|
if (!CBB_init(&cbb, CBS_len(in)) ||
|
||||||
return 0;
|
!cbs_convert_ber(in, &cbb, 0, 0, 0) ||
|
||||||
}
|
!CBB_finish(&cbb, out, out_len)) {
|
||||||
if (!cbs_convert_ber(in, &cbb, 0, 0, 0)) {
|
|
||||||
CBB_cleanup(&cbb);
|
CBB_cleanup(&cbb);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return CBB_finish(&cbb, out, out_len);
|
return 1;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user