diff options
-rw-r--r-- | Objects/floatobject.c | 6 | ||||
-rw-r--r-- | Objects/longobject.c | 4 | ||||
-rw-r--r-- | Objects/stringobject.c | 10 |
3 files changed, 8 insertions, 12 deletions
diff --git a/Objects/floatobject.c b/Objects/floatobject.c index c7bdbed..60dcca9 100644 --- a/Objects/floatobject.c +++ b/Objects/floatobject.c @@ -136,7 +136,7 @@ float_buf_repr(buf, v) for (; *cp != '\0'; cp++) { /* Any non-digit means it's not an integer; this takes care of NAN and INF as well. */ - if (!isdigit(*cp)) + if (!isdigit(Py_CHARMASK(*cp))) break; } if (*cp == '\0') { @@ -330,10 +330,6 @@ float_pow(v, w, z) } return newfloatobject(0.0); } - if (iv < 0.0) { - err_setstr(ValueError, "negative float to float power"); - return NULL; - } errno = 0; ix = pow(iv, iw); CHECK(ix); diff --git a/Objects/longobject.c b/Objects/longobject.c index b9935b0..9c2dcf8 100644 --- a/Objects/longobject.c +++ b/Objects/longobject.c @@ -377,7 +377,7 @@ long_escan(str, pend, base) err_setstr(ValueError, "invalid base for long literal"); return NULL; } - while (*str != '\0' && isspace(*str)) + while (*str != '\0' && isspace(Py_CHARMASK(*str))) str++; if (*str == '+') ++str; @@ -385,7 +385,7 @@ long_escan(str, pend, base) ++str; sign = -1; } - while (*str != '\0' && isspace(*str)) + while (*str != '\0' && isspace(Py_CHARMASK(*str))) str++; if (base == 0) { if (str[0] != '0') diff --git a/Objects/stringobject.c b/Objects/stringobject.c index d9366ae..7df894e 100644 --- a/Objects/stringobject.c +++ b/Objects/stringobject.c @@ -749,10 +749,10 @@ formatstring(format, args) if (--fmtcnt >= 0) c = *fmt++; } - else if (isdigit(c)) { + else if (c >= 0 && isdigit(c)) { width = c - '0'; while (--fmtcnt >= 0) { - c = *fmt++; + c = Py_CHARMASK(*fmt++); if (!isdigit(c)) break; if ((width*10) / 10 != width) { @@ -782,10 +782,10 @@ formatstring(format, args) if (--fmtcnt >= 0) c = *fmt++; } - else if (isdigit(c)) { + else if (c >= 0 && isdigit(c)) { prec = c - '0'; while (--fmtcnt >= 0) { - c = *fmt++; + c = Py_CHARMASK(*fmt++); if (!isdigit(c)) break; if ((prec*10) / 10 != prec) { @@ -913,7 +913,7 @@ formatstring(format, args) --rescnt; *res++ = ' '; } - if (dict && (argidx < arglen)) { + if (dict && (argidx < arglen) && c != '%') { err_setstr(TypeError, "not all arguments converted"); goto error; |