Use Py_CHARMASK for ctype macros. Fixes bug #232787.
diff --git a/Modules/timemodule.c b/Modules/timemodule.c
index c4a066f..90886f2 100644
--- a/Modules/timemodule.c
+++ b/Modules/timemodule.c
@@ -397,7 +397,7 @@
 		PyErr_SetString(PyExc_ValueError, "format mismatch");
 		return NULL;
 	}
-	while (*s && isspace(*s))
+	while (*s && isspace(Py_CHARMASK(*s)))
 		s++;
 	if (*s) {
 		PyErr_Format(PyExc_ValueError,
diff --git a/Objects/intobject.c b/Objects/intobject.c
index 72d5323..9a1f0e6 100644
--- a/Objects/intobject.c
+++ b/Objects/intobject.c
@@ -182,7 +182,7 @@
 		x = (long) PyOS_strtoul(s, &end, base);
 	else
 		x = PyOS_strtol(s, &end, base);
-	if (end == s || !isalnum(end[-1]))
+	if (end == s || !isalnum(Py_CHARMASK(end[-1])))
 		goto bad;
 	while (*end && isspace(Py_CHARMASK(*end)))
 		end++;
diff --git a/Python/errors.c b/Python/errors.c
index 7f30f7e..8d02b8e 100644
--- a/Python/errors.c
+++ b/Python/errors.c
@@ -402,7 +402,7 @@
 	for (f = format; *f; f++) {
 		if (*f == '%') {
 			const char* p = f;
-			while (*++f && *f != '%' && !isalpha(*f))
+			while (*++f && *f != '%' && !isalpha(Py_CHARMASK(*f)))
 				;
 			switch (*f) {
 			case 'c':
@@ -457,15 +457,15 @@
 			/* parse the width.precision part (we're only
 			   interested in the precision value, if any) */
 			n = 0;
-			while (isdigit(*f))
+			while (isdigit(Py_CHARMASK(*f)))
 				n = (n*10) + *f++ - '0';
 			if (*f == '.') {
 				f++;
 				n = 0;
-				while (isdigit(*f))
+				while (isdigit(Py_CHARMASK(*f)))
 					n = (n*10) + *f++ - '0';
 			}
-			while (*f && *f != '%' && !isalpha(*f))
+			while (*f && *f != '%' && !isalpha(Py_CHARMASK(*f)))
 				f++;
 			switch (*f) {
 			case 'c':