@@ -482,52 +482,53 @@ py_blake2_validate_params(Blake2Object *self,
482482 goto error ;
483483 }
484484
485- #define CHECK_SIZE (NAME , VALUE , MAX , EXC_TYPE ) \
485+ #define CHECK_LENGTH (NAME , VALUE , MAX ) \
486486 do { \
487487 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", \
490490 (NAME), (size_t)(MAX), (Py_ssize_t)(VALUE)); \
491491 goto error; \
492492 } \
493493 } 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-
507494 /* Validate key parameter. */
508495 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 ));
510497 }
511498 /* Validate salt parameter. */
512499 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 ));
514501 }
515502 /* Validate personalization parameter. */
516503 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 ));
518505 }
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)
519516 /* Validate tree parameters. */
520517 CHECK_TREE ("fanout" , fanout , 0 , 255 );
521518 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- }
527519 CHECK_TREE ("node_depth" , node_depth , 0 , 255 );
528520 CHECK_TREE ("inner_size" , inner_size , 0 , MAX_OUT_BYTES (self ));
529521#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+ }
531532 return 0 ;
532533error :
533534 return -1 ;
0 commit comments