@@ -482,52 +482,53 @@ py_blake2_validate_params(Blake2Object *self,
482
482
goto error ;
483
483
}
484
484
485
- #define CHECK_SIZE (NAME , VALUE , MAX , EXC_TYPE ) \
485
+ #define CHECK_LENGTH (NAME , VALUE , MAX ) \
486
486
do { \
487
487
if ((size_t)(VALUE) > (size_t)(MAX)) { \
488
- PyErr_Format(EXC_TYPE, \
489
- "maximum %s is %zu bytes, got %zd", \
488
+ PyErr_Format(PyExc_ValueError, \
489
+ "maximum %s length is %zu bytes, got %zd", \
490
490
(NAME), (size_t)(MAX), (Py_ssize_t)(VALUE)); \
491
491
goto error; \
492
492
} \
493
493
} while (0)
494
- #define CHECK_SIZE_VE (N , V , M ) CHECK_SIZE(N, V, M, PyExc_ValueError)
495
- #define CHECK_SIZE_OE (N , V , M ) CHECK_SIZE(N, V, M, PyExc_OverflowError)
496
-
497
- #define CHECK_TREE (NAME , VALUE , MIN , MAX ) \
498
- do { \
499
- if ((VALUE) < (MIN) || (size_t)(VALUE) > (size_t)(MAX)) { \
500
- PyErr_Format(PyExc_ValueError, \
501
- "'%s' must be between %zu and %zu", \
502
- (NAME), (size_t)(MIN), (size_t)(MAX)); \
503
- goto error; \
504
- } \
505
- } while (0)
506
-
507
494
/* Validate key parameter. */
508
495
if (key -> obj && key -> len ) {
509
- CHECK_SIZE_VE ("key length " , key -> len , MAX_KEY_BYTES (self ));
496
+ CHECK_LENGTH ("key" , key -> len , MAX_KEY_BYTES (self ));
510
497
}
511
498
/* Validate salt parameter. */
512
499
if (salt -> obj && salt -> len ) {
513
- CHECK_SIZE_VE ("salt length " , salt -> len , MAX_SALT_LENGTH (self ));
500
+ CHECK_LENGTH ("salt" , salt -> len , MAX_SALT_LENGTH (self ));
514
501
}
515
502
/* Validate personalization parameter. */
516
503
if (person -> obj && person -> len ) {
517
- CHECK_SIZE_VE ("person length " , person -> len , MAX_PERSONAL_BYTES (self ));
504
+ CHECK_LENGTH ("person" , person -> len , MAX_PERSONAL_BYTES (self ));
518
505
}
506
+ #undef CHECK_LENGTH
507
+ #define CHECK_TREE (NAME , VALUE , MIN , MAX ) \
508
+ do { \
509
+ if ((VALUE) < (MIN) || (size_t)(VALUE) > (size_t)(MAX)) { \
510
+ PyErr_Format(PyExc_ValueError, \
511
+ "'%s' must be between %zu and %zu", \
512
+ (NAME), (size_t)(MIN), (size_t)(MAX)); \
513
+ goto error; \
514
+ } \
515
+ } while (0)
519
516
/* Validate tree parameters. */
520
517
CHECK_TREE ("fanout" , fanout , 0 , 255 );
521
518
CHECK_TREE ("depth" , depth , 1 , 255 );
522
- CHECK_SIZE_OE ("leaf_size" , leaf_size , 0xFFFFFFFFU );
523
- if (is_blake2s (self -> impl )) {
524
- /* maximum: 2**48 - 1 */
525
- CHECK_SIZE_OE ("node_offset" , node_offset , 0xFFFFFFFFFFFFULL );
526
- }
527
519
CHECK_TREE ("node_depth" , node_depth , 0 , 255 );
528
520
CHECK_TREE ("inner_size" , inner_size , 0 , MAX_OUT_BYTES (self ));
529
521
#undef CHECK_TREE
530
- #undef CHECK_SIZE
522
+ if (leaf_size > 0xFFFFFFFFU ) {
523
+ /* maximum: 2**32 - 1 */
524
+ PyErr_SetString (PyExc_OverflowError , "'leaf_size' is too large" );
525
+ goto error ;
526
+ }
527
+ if (is_blake2s (self -> impl ) && node_offset > 0xFFFFFFFFFFFFULL ) {
528
+ /* maximum: 2**48 - 1 */
529
+ PyErr_SetString (PyExc_OverflowError , "'node_offset' is too large" );
530
+ goto error ;
531
+ }
531
532
return 0 ;
532
533
error :
533
534
return -1 ;
0 commit comments