mirror of
https://github.com/python/cpython.git
synced 2025-10-17 20:28:43 +00:00
Issue a warning when int('0...', 0) returns an int with the sign
folded; this will change in Python 2.4. On a 32-bit machine, this happens for 0x80000000 through 0xffffffff, and for octal constants in the same value range. No warning is issued if an explicit base is given, *or* if the string contains a sign (since in those cases no sign folding ever happens).
This commit is contained in:
parent
3288f592cb
commit
47710656e5
2 changed files with 20 additions and 3 deletions
|
@ -187,17 +187,22 @@ PyInt_FromString(char *s, char **pend, int base)
|
|||
char *end;
|
||||
long x;
|
||||
char buffer[256]; /* For errors */
|
||||
int warn = 0;
|
||||
|
||||
if ((base != 0 && base < 2) || base > 36) {
|
||||
PyErr_SetString(PyExc_ValueError, "int() base must be >= 2 and <= 36");
|
||||
PyErr_SetString(PyExc_ValueError,
|
||||
"int() base must be >= 2 and <= 36");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
while (*s && isspace(Py_CHARMASK(*s)))
|
||||
s++;
|
||||
errno = 0;
|
||||
if (base == 0 && s[0] == '0')
|
||||
if (base == 0 && s[0] == '0') {
|
||||
x = (long) PyOS_strtoul(s, &end, base);
|
||||
if (x < 0)
|
||||
warn = 1;
|
||||
}
|
||||
else
|
||||
x = PyOS_strtol(s, &end, base);
|
||||
if (end == s || !isalnum(Py_CHARMASK(end[-1])))
|
||||
|
@ -216,6 +221,11 @@ PyInt_FromString(char *s, char **pend, int base)
|
|||
return NULL;
|
||||
return PyLong_FromString(s, pend, base);
|
||||
}
|
||||
if (warn) {
|
||||
if (PyErr_Warn(PyExc_FutureWarning,
|
||||
"int('0...', 0): sign will change in Python 2.4") < 0)
|
||||
return NULL;
|
||||
}
|
||||
if (pend)
|
||||
*pend = end;
|
||||
return PyInt_FromLong(x);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue