@@ -501,20 +501,22 @@ PyLong_FromDouble(double dval)
501501static inline unsigned long
502502unroll_digits_ulong (PyLongObject * v , Py_ssize_t * iptr )
503503{
504+ assert (ULONG_MAX >= ((1UL << PyLong_SHIFT ) - 1 ));
505+
504506 Py_ssize_t i = * iptr ;
505- digit * digits = v -> long_value .ob_digit ;
506507 assert (i >= 2 );
508+
507509 /* unroll 1 digit */
508510 -- i ;
509- assert ( ULONG_MAX >= (( 1UL << PyLong_SHIFT ) - 1 )) ;
511+ digit * digits = v -> long_value . ob_digit ;
510512 unsigned long x = digits [i ];
511513
512- #if (( ULONG_MAX >> PyLong_SHIFT ) ) >= ((1UL << PyLong_SHIFT ) - 1 )
514+ #if (ULONG_MAX >> PyLong_SHIFT ) >= ((1UL << PyLong_SHIFT ) - 1 )
513515 /* unroll another digit */
514516 x <<= PyLong_SHIFT ;
515517 -- i ;
516518 x |= digits [i ];
517- #endif
519+ #endif
518520
519521 * iptr = i ;
520522 return x ;
@@ -523,12 +525,14 @@ unroll_digits_ulong(PyLongObject *v, Py_ssize_t *iptr)
523525static inline size_t
524526unroll_digits_size_t (PyLongObject * v , Py_ssize_t * iptr )
525527{
528+ assert (SIZE_MAX >= ((1UL << PyLong_SHIFT ) - 1 ));
529+
526530 Py_ssize_t i = * iptr ;
527- digit * digits = v -> long_value .ob_digit ;
528531 assert (i >= 2 );
532+
529533 /* unroll 1 digit */
530534 -- i ;
531- assert ( SIZE_MAX >= (( 1UL << PyLong_SHIFT ) - 1 )) ;
535+ digit * digits = v -> long_value . ob_digit ;
532536 size_t x = digits [i ];
533537
534538 #if ( (SIZE_MAX >> PyLong_SHIFT ) >= ( ( 1 << PyLong_SHIFT ) - 1 ) )
@@ -690,7 +694,7 @@ PyLong_AsSsize_t(PyObject *vv) {
690694
691695 size_t x = unroll_digits_size_t (v , & i );
692696 while (-- i >= 0 ) {
693- if (x > SIZE_MAX >> PyLong_SHIFT ) {
697+ if (x > ( SIZE_MAX >> PyLong_SHIFT ) ) {
694698 goto overflow ;
695699 }
696700 x = (x << PyLong_SHIFT ) | v -> long_value .ob_digit [i ];
@@ -752,7 +756,7 @@ PyLong_AsUnsignedLong(PyObject *vv)
752756
753757 unsigned long x = unroll_digits_ulong (v , & i );
754758 while (-- i >= 0 ) {
755- if (x > ULONG_MAX >> PyLong_SHIFT ) {
759+ if (x > ( ULONG_MAX >> PyLong_SHIFT ) ) {
756760 goto overflow ;
757761 }
758762 x = (x << PyLong_SHIFT ) | v -> long_value .ob_digit [i ];
@@ -796,7 +800,7 @@ PyLong_AsSize_t(PyObject *vv)
796800
797801 size_t x = unroll_digits_size_t (v , & i );
798802 while (-- i >= 0 ) {
799- if (x > SIZE_MAX >> PyLong_SHIFT ) {
803+ if (x > ( SIZE_MAX >> PyLong_SHIFT ) ) {
800804 PyErr_SetString (PyExc_OverflowError ,
801805 "Python int too large to convert to C size_t" );
802806 return (size_t ) -1 ;
0 commit comments