summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Objects/floatobject.c6
-rw-r--r--Objects/longobject.c4
-rw-r--r--Objects/stringobject.c10
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;