bppp: check for overflow in generator allocation
This commit is contained in:
@@ -28,6 +28,11 @@ secp256k1_bppp_generators *secp256k1_bppp_generators_create(const secp256k1_cont
|
|||||||
if (ret == NULL) {
|
if (ret == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
/* Ensure that multiplication will not wrap around */
|
||||||
|
if (n > SIZE_MAX / sizeof(*ret->gens)) {
|
||||||
|
free(ret);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
ret->gens = checked_malloc(&ctx->error_callback, n * sizeof(*ret->gens));
|
ret->gens = checked_malloc(&ctx->error_callback, n * sizeof(*ret->gens));
|
||||||
if (ret->gens == NULL) {
|
if (ret->gens == NULL) {
|
||||||
free(ret);
|
free(ret);
|
||||||
|
|||||||
@@ -28,6 +28,8 @@ static void test_bppp_generators_api(void) {
|
|||||||
CHECK(gens != NULL);
|
CHECK(gens != NULL);
|
||||||
gens_orig = gens; /* Preserve for round-trip test */
|
gens_orig = gens; /* Preserve for round-trip test */
|
||||||
|
|
||||||
|
CHECK(secp256k1_bppp_generators_create(CTX, SIZE_MAX / sizeof(secp256k1_ge) + 1) == NULL);
|
||||||
|
|
||||||
/* Serialize */
|
/* Serialize */
|
||||||
CHECK_ILLEGAL(CTX, secp256k1_bppp_generators_serialize(CTX, NULL, gens_ser, &len));
|
CHECK_ILLEGAL(CTX, secp256k1_bppp_generators_serialize(CTX, NULL, gens_ser, &len));
|
||||||
CHECK_ILLEGAL(CTX, secp256k1_bppp_generators_serialize(CTX, gens, NULL, &len));
|
CHECK_ILLEGAL(CTX, secp256k1_bppp_generators_serialize(CTX, gens, NULL, &len));
|
||||||
|
|||||||
Reference in New Issue
Block a user