const char *p = *str;
const char *start = p;
char prev = 0;
- int digits = 0;
+ Py_ssize_t digits = 0;
int bits_per_char;
Py_ssize_t n;
PyLongObject *z;
digit beyond the first.
***/
twodigits c; /* current input character */
+ double fsize_z;
Py_ssize_t size_z;
- int digits = 0;
+ Py_ssize_t digits = 0;
int i;
int convwidth;
twodigits convmultmax, convmult;
* need to initialize z->ob_digit -- no slot is read up before
* being stored into.
*/
- size_z = (Py_ssize_t)(digits * log_base_BASE[base]) + 1;
+ fsize_z = digits * log_base_BASE[base] + 1;
+ if (fsize_z > MAX_LONG_DIGITS) {
+ /* The same exception as in _PyLong_New(). */
+ PyErr_SetString(PyExc_OverflowError,
+ "too many digits in integer");
+ return NULL;
+ }
+ size_z = (Py_ssize_t)fsize_z;
/* Uncomment next line to test exceedingly rare copy code */
/* size_z = 1; */
assert(size_z > 0);