Skip to content

Commit 8bcda18

Browse files
committed
test: Add non-NULL checks for "pointer of array" API functions
1 parent 5a08c1b commit 8bcda18

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

src/modules/musig/tests_impl.h

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,13 @@ static void musig_api_tests(void) {
201201
CHECK(secp256k1_musig_pubkey_agg(CTX, &agg_pk, &keyagg_cache, pk_ptr, 2) == 1);
202202
CHECK(secp256k1_musig_pubkey_agg(CTX, NULL, &keyagg_cache, pk_ptr, 2) == 1);
203203
CHECK(secp256k1_musig_pubkey_agg(CTX, &agg_pk, NULL, pk_ptr, 2) == 1);
204+
/* check that NULL in array of public key pointers is not allowed */
205+
for (i = 0; i < 2; i++) {
206+
const secp256k1_pubkey *original_ptr = pk_ptr[i];
207+
pk_ptr[i] = NULL;
208+
CHECK_ILLEGAL(CTX, secp256k1_musig_pubkey_agg(CTX, &agg_pk, NULL, pk_ptr, 2));
209+
pk_ptr[i] = original_ptr;
210+
}
204211
CHECK_ILLEGAL(CTX, secp256k1_musig_pubkey_agg(CTX, &agg_pk, &keyagg_cache, NULL, 2));
205212
CHECK(memcmp_and_randomize(agg_pk.data, zeros132, sizeof(agg_pk.data)) == 0);
206213
CHECK_ILLEGAL(CTX, secp256k1_musig_pubkey_agg(CTX, &agg_pk, &keyagg_cache, invalid_pk_ptr2, 2));
@@ -350,6 +357,13 @@ static void musig_api_tests(void) {
350357

351358
/** Receive nonces and aggregate **/
352359
CHECK(secp256k1_musig_nonce_agg(CTX, &aggnonce, pubnonce_ptr, 2) == 1);
360+
/* check that NULL in array of public nonce pointers is not allowed */
361+
for (i = 0; i < 2; i++) {
362+
const secp256k1_musig_pubnonce *original_ptr = pubnonce_ptr[i];
363+
pubnonce_ptr[i] = NULL;
364+
CHECK_ILLEGAL(CTX, secp256k1_musig_nonce_agg(CTX, &aggnonce, pubnonce_ptr, 2));
365+
pubnonce_ptr[i] = original_ptr;
366+
}
353367
CHECK_ILLEGAL(CTX, secp256k1_musig_nonce_agg(CTX, NULL, pubnonce_ptr, 2));
354368
CHECK_ILLEGAL(CTX, secp256k1_musig_nonce_agg(CTX, &aggnonce, NULL, 2));
355369
CHECK_ILLEGAL(CTX, secp256k1_musig_nonce_agg(CTX, &aggnonce, pubnonce_ptr, 0));
@@ -474,6 +488,13 @@ static void musig_api_tests(void) {
474488

475489
/** Signature aggregation and verification */
476490
CHECK(secp256k1_musig_partial_sig_agg(CTX, pre_sig, &session, partial_sig_ptr, 2) == 1);
491+
/* check that NULL in array of partial signature pointers is not allowed */
492+
for (i = 0; i < 2; i++) {
493+
const secp256k1_musig_partial_sig *original_ptr = partial_sig_ptr[i];
494+
partial_sig_ptr[i] = NULL;
495+
CHECK_ILLEGAL(CTX, secp256k1_musig_partial_sig_agg(CTX, pre_sig, &session, partial_sig_ptr, 2));
496+
partial_sig_ptr[i] = original_ptr;
497+
}
477498
CHECK_ILLEGAL(CTX, secp256k1_musig_partial_sig_agg(CTX, NULL, &session, partial_sig_ptr, 2));
478499
CHECK_ILLEGAL(CTX, secp256k1_musig_partial_sig_agg(CTX, pre_sig, NULL, partial_sig_ptr, 2));
479500
CHECK_ILLEGAL(CTX, secp256k1_musig_partial_sig_agg(CTX, pre_sig, &invalid_session, partial_sig_ptr, 2));

src/tests.c

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6052,6 +6052,7 @@ static void run_eckey_edge_case_test(void) {
60526052
secp256k1_pubkey pubkey_negone;
60536053
const secp256k1_pubkey *pubkeys[3];
60546054
size_t len;
6055+
int i;
60556056
/* Group order is too large, reject. */
60566057
CHECK(secp256k1_ec_seckey_verify(CTX, orderc) == 0);
60576058
SECP256K1_CHECKMEM_UNDEFINE(&pubkey, sizeof(pubkey));
@@ -6245,6 +6246,14 @@ static void run_eckey_edge_case_test(void) {
62456246
CHECK(secp256k1_ec_pubkey_combine(CTX, &pubkey, pubkeys, 3) == 1);
62466247
SECP256K1_CHECKMEM_CHECK(&pubkey, sizeof(secp256k1_pubkey));
62476248
CHECK(secp256k1_memcmp_var(&pubkey, zeros, sizeof(secp256k1_pubkey)) > 0);
6249+
/* check that NULL in array of pubkey pointers is not allowed */
6250+
for (i = 0; i < 3; i++) {
6251+
const secp256k1_pubkey *original_ptr = pubkeys[i];
6252+
secp256k1_pubkey result;
6253+
pubkeys[i] = NULL;
6254+
CHECK_ILLEGAL(CTX, secp256k1_ec_pubkey_combine(CTX, &result, pubkeys, 3));
6255+
pubkeys[i] = original_ptr;
6256+
}
62486257
len = 33;
62496258
CHECK(secp256k1_ec_pubkey_serialize(CTX, ctmp, &len, &pubkey, SECP256K1_EC_COMPRESSED) == 1);
62506259
CHECK(secp256k1_ec_pubkey_serialize(CTX, ctmp2, &len, &pubkey_one, SECP256K1_EC_COMPRESSED) == 1);
@@ -6640,6 +6649,7 @@ static void permute(size_t *arr, size_t n) {
66406649
static void test_sort_api(void) {
66416650
secp256k1_pubkey pks[2];
66426651
const secp256k1_pubkey *pks_ptr[2];
6652+
int i;
66436653

66446654
pks_ptr[0] = &pks[0];
66456655
pks_ptr[1] = &pks[1];
@@ -6648,6 +6658,13 @@ static void test_sort_api(void) {
66486658
testutil_random_pubkey_test(&pks[1]);
66496659

66506660
CHECK(secp256k1_ec_pubkey_sort(CTX, pks_ptr, 2) == 1);
6661+
/* check that NULL in array of public key pointers is not allowed */
6662+
for (i = 0; i < 2; i++) {
6663+
const secp256k1_pubkey *original_ptr = pks_ptr[i];
6664+
pks_ptr[i] = NULL;
6665+
CHECK_ILLEGAL(CTX, secp256k1_ec_pubkey_sort(CTX, pks_ptr, 2));
6666+
pks_ptr[i] = original_ptr;
6667+
}
66516668
CHECK_ILLEGAL(CTX, secp256k1_ec_pubkey_sort(CTX, NULL, 2));
66526669
CHECK(secp256k1_ec_pubkey_sort(CTX, pks_ptr, 0) == 1);
66536670
/* Test illegal public keys */

0 commit comments

Comments
 (0)