@@ -44,6 +44,33 @@ static int all_bytes_equal(const void* s, unsigned char value, size_t n) {
44
44
return 1 ;
45
45
}
46
46
47
+ static unsigned int ILLEGAL ;
48
+ static void check_illegal_helper_callback_fn (const char * str , void * data ) {
49
+ (void )data ;
50
+ (void )str ;
51
+ ILLEGAL ++ ;
52
+ CHECK (ILLEGAL != 0 );
53
+ }
54
+
55
+ /* For checking functions that use ARG_CHECK */
56
+ #define CHECK_ILLEGAL (ctx , expr ) do { \
57
+ ILLEGAL = 0; \
58
+ secp256k1_context_set_illegal_callback(ctx, check_illegal_helper_callback_fn, NULL); \
59
+ { CHECK((expr) == 0); } \
60
+ secp256k1_context_set_illegal_callback(ctx, NULL, NULL); \
61
+ CHECK(ILLEGAL == 1); \
62
+ } while(0);
63
+
64
+ /* For checking functions that use ARG_CHECK_VOID */
65
+ #define CHECK_ILLEGAL_VOID (ctx , expr ) do { \
66
+ ILLEGAL = 0; \
67
+ secp256k1_context_set_illegal_callback(ctx, check_illegal_helper_callback_fn, NULL); \
68
+ { (expr); } \
69
+ secp256k1_context_set_illegal_callback(ctx, NULL, NULL); \
70
+ CHECK(ILLEGAL == 1); \
71
+ } while(0);
72
+
73
+ /* TODO Use CHECK_ILLEGAL(_VOID) everywhere and get rid of these counting callbacks */
47
74
static void counting_illegal_callback_fn (const char * str , void * data ) {
48
75
/* Dummy callback function that just counts. */
49
76
int32_t * p ;
@@ -246,39 +273,28 @@ static void run_static_context_tests(int use_prealloc) {
246
273
CHECK (secp256k1_context_no_precomp == secp256k1_context_static );
247
274
248
275
{
249
- int ecount = 0 ;
250
276
unsigned char seed [32 ] = {0x17 };
251
- secp256k1_context_set_illegal_callback (STATIC_CTX , counting_illegal_callback_fn , & ecount );
252
277
253
278
/* Randomizing secp256k1_context_static is not supported. */
254
- CHECK (secp256k1_context_randomize (STATIC_CTX , seed ) == 0 );
255
- CHECK (ecount == 1 );
256
- CHECK (secp256k1_context_randomize (STATIC_CTX , NULL ) == 0 );
257
- CHECK (ecount == 2 );
258
- ecount = 0 ;
279
+ CHECK_ILLEGAL (STATIC_CTX , secp256k1_context_randomize (STATIC_CTX , seed ));
280
+ CHECK_ILLEGAL (STATIC_CTX , secp256k1_context_randomize (STATIC_CTX , NULL ));
259
281
260
282
/* Destroying or cloning secp256k1_context_static is not supported. */
261
283
if (use_prealloc ) {
262
- CHECK (secp256k1_context_preallocated_clone_size (STATIC_CTX ) == 0 );
263
- CHECK (ecount == 1 );
284
+ CHECK_ILLEGAL (STATIC_CTX , secp256k1_context_preallocated_clone_size (STATIC_CTX ));
264
285
{
265
286
secp256k1_context * my_static_ctx = malloc (sizeof (* STATIC_CTX ));
266
287
CHECK (my_static_ctx != NULL );
267
288
memset (my_static_ctx , 0x2a , sizeof (* my_static_ctx ));
268
- CHECK ( secp256k1_context_preallocated_clone (STATIC_CTX , my_static_ctx ) == NULL );
289
+ CHECK_ILLEGAL ( STATIC_CTX , secp256k1_context_preallocated_clone (STATIC_CTX , my_static_ctx ));
269
290
CHECK (all_bytes_equal (my_static_ctx , 0x2a , sizeof (* my_static_ctx )));
270
- CHECK (ecount == 2 );
271
291
free (my_static_ctx );
272
292
}
273
- secp256k1_context_preallocated_destroy (STATIC_CTX );
274
- CHECK (ecount == 3 );
293
+ CHECK_ILLEGAL_VOID (STATIC_CTX , secp256k1_context_preallocated_destroy (STATIC_CTX ));
275
294
} else {
276
- CHECK (secp256k1_context_clone (STATIC_CTX ) == NULL );
277
- CHECK (ecount == 1 );
278
- secp256k1_context_destroy (STATIC_CTX );
279
- CHECK (ecount == 2 );
295
+ CHECK_ILLEGAL (STATIC_CTX , secp256k1_context_clone (STATIC_CTX ));
296
+ CHECK_ILLEGAL_VOID (STATIC_CTX , secp256k1_context_destroy (STATIC_CTX ));
280
297
}
281
- secp256k1_context_set_illegal_callback (STATIC_CTX , NULL , NULL );
282
298
}
283
299
284
300
{
0 commit comments