summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Objects/stringlib/asciilib.h2
-rw-r--r--Objects/stringlib/stringdefs.h2
-rw-r--r--Objects/stringlib/ucs1lib.h2
-rw-r--r--Objects/stringlib/ucs2lib.h2
-rw-r--r--Objects/stringlib/ucs4lib.h2
-rw-r--r--Objects/stringlib/unicodedefs.h2
-rw-r--r--Python/_warnings.c9
-rw-r--r--Python/formatter_unicode.c27
8 files changed, 21 insertions, 27 deletions
diff --git a/Objects/stringlib/asciilib.h b/Objects/stringlib/asciilib.h
index f6f7333..ae68e3c 100644
--- a/Objects/stringlib/asciilib.h
+++ b/Objects/stringlib/asciilib.h
@@ -15,8 +15,6 @@
#define STRINGLIB_ISLINEBREAK BLOOM_LINEBREAK
#define STRINGLIB_ISDECIMAL Py_UNICODE_ISDECIMAL
#define STRINGLIB_TODECIMAL Py_UNICODE_TODECIMAL
-#define STRINGLIB_TOUPPER Py_UNICODE_TOUPPER
-#define STRINGLIB_TOLOWER Py_UNICODE_TOLOWER
#define STRINGLIB_STR PyUnicode_1BYTE_DATA
#define STRINGLIB_LEN PyUnicode_GET_LENGTH
#define STRINGLIB_NEW unicode_fromascii
diff --git a/Objects/stringlib/stringdefs.h b/Objects/stringlib/stringdefs.h
index 7d30059..fec9f18 100644
--- a/Objects/stringlib/stringdefs.h
+++ b/Objects/stringlib/stringdefs.h
@@ -18,8 +18,6 @@
#define STRINGLIB_ISLINEBREAK(x) ((x == '\n') || (x == '\r'))
#define STRINGLIB_ISDECIMAL(x) ((x >= '0') && (x <= '9'))
#define STRINGLIB_TODECIMAL(x) (STRINGLIB_ISDECIMAL(x) ? (x - '0') : -1)
-#define STRINGLIB_TOUPPER Py_TOUPPER
-#define STRINGLIB_TOLOWER Py_TOLOWER
#define STRINGLIB_STR PyBytes_AS_STRING
#define STRINGLIB_LEN PyBytes_GET_SIZE
#define STRINGLIB_NEW PyBytes_FromStringAndSize
diff --git a/Objects/stringlib/ucs1lib.h b/Objects/stringlib/ucs1lib.h
index 2c78bd2..42b9d91 100644
--- a/Objects/stringlib/ucs1lib.h
+++ b/Objects/stringlib/ucs1lib.h
@@ -15,8 +15,6 @@
#define STRINGLIB_ISLINEBREAK BLOOM_LINEBREAK
#define STRINGLIB_ISDECIMAL Py_UNICODE_ISDECIMAL
#define STRINGLIB_TODECIMAL Py_UNICODE_TODECIMAL
-#define STRINGLIB_TOUPPER Py_UNICODE_TOUPPER
-#define STRINGLIB_TOLOWER Py_UNICODE_TOLOWER
#define STRINGLIB_STR PyUnicode_1BYTE_DATA
#define STRINGLIB_LEN PyUnicode_GET_LENGTH
#define STRINGLIB_NEW _PyUnicode_FromUCS1
diff --git a/Objects/stringlib/ucs2lib.h b/Objects/stringlib/ucs2lib.h
index cb8bc64..611e741 100644
--- a/Objects/stringlib/ucs2lib.h
+++ b/Objects/stringlib/ucs2lib.h
@@ -15,8 +15,6 @@
#define STRINGLIB_ISLINEBREAK BLOOM_LINEBREAK
#define STRINGLIB_ISDECIMAL Py_UNICODE_ISDECIMAL
#define STRINGLIB_TODECIMAL Py_UNICODE_TODECIMAL
-#define STRINGLIB_TOUPPER Py_UNICODE_TOUPPER
-#define STRINGLIB_TOLOWER Py_UNICODE_TOLOWER
#define STRINGLIB_STR PyUnicode_2BYTE_DATA
#define STRINGLIB_LEN PyUnicode_GET_LENGTH
#define STRINGLIB_NEW _PyUnicode_FromUCS2
diff --git a/Objects/stringlib/ucs4lib.h b/Objects/stringlib/ucs4lib.h
index 7cd7b33..330b292 100644
--- a/Objects/stringlib/ucs4lib.h
+++ b/Objects/stringlib/ucs4lib.h
@@ -15,8 +15,6 @@
#define STRINGLIB_ISLINEBREAK BLOOM_LINEBREAK
#define STRINGLIB_ISDECIMAL Py_UNICODE_ISDECIMAL
#define STRINGLIB_TODECIMAL Py_UNICODE_TODECIMAL
-#define STRINGLIB_TOUPPER Py_UNICODE_TOUPPER
-#define STRINGLIB_TOLOWER Py_UNICODE_TOLOWER
#define STRINGLIB_STR PyUnicode_4BYTE_DATA
#define STRINGLIB_LEN PyUnicode_GET_LENGTH
#define STRINGLIB_NEW _PyUnicode_FromUCS4
diff --git a/Objects/stringlib/unicodedefs.h b/Objects/stringlib/unicodedefs.h
index a38162b..3ccc57e 100644
--- a/Objects/stringlib/unicodedefs.h
+++ b/Objects/stringlib/unicodedefs.h
@@ -18,8 +18,6 @@
#define STRINGLIB_ISLINEBREAK BLOOM_LINEBREAK
#define STRINGLIB_ISDECIMAL Py_UNICODE_ISDECIMAL
#define STRINGLIB_TODECIMAL Py_UNICODE_TODECIMAL
-#define STRINGLIB_TOUPPER Py_UNICODE_TOUPPER
-#define STRINGLIB_TOLOWER Py_UNICODE_TOLOWER
#define STRINGLIB_STR PyUnicode_AS_UNICODE
#define STRINGLIB_LEN PyUnicode_GET_SIZE
#define STRINGLIB_NEW PyUnicode_FromUnicode
diff --git a/Python/_warnings.c b/Python/_warnings.c
index 458e346..adebd51 100644
--- a/Python/_warnings.c
+++ b/Python/_warnings.c
@@ -510,13 +510,14 @@ setup_context(Py_ssize_t stack_level, PyObject **filename, int *lineno,
kind = PyUnicode_KIND(*filename);
data = PyUnicode_DATA(*filename);
+#define ascii_lower(c) ((c <= 127) ? Py_TOLOWER(c) : 0)
/* if filename.lower().endswith((".pyc", ".pyo")): */
if (len >= 4 &&
PyUnicode_READ(kind, data, len-4) == '.' &&
- Py_UNICODE_TOLOWER(PyUnicode_READ(kind, data, len-3)) == 'p' &&
- Py_UNICODE_TOLOWER(PyUnicode_READ(kind, data, len-2)) == 'y' &&
- (Py_UNICODE_TOLOWER(PyUnicode_READ(kind, data, len-1)) == 'c' ||
- Py_UNICODE_TOLOWER(PyUnicode_READ(kind, data, len-1)) == 'o'))
+ ascii_lower(PyUnicode_READ(kind, data, len-3)) == 'p' &&
+ ascii_lower(PyUnicode_READ(kind, data, len-2)) == 'y' &&
+ (ascii_lower(PyUnicode_READ(kind, data, len-1)) == 'c' ||
+ ascii_lower(PyUnicode_READ(kind, data, len-1)) == 'o'))
{
*filename = PyUnicode_Substring(*filename, 0,
PyUnicode_GET_LENGTH(*filename)-1);
diff --git a/Python/formatter_unicode.c b/Python/formatter_unicode.c
index ef01511..12b880d 100644
--- a/Python/formatter_unicode.c
+++ b/Python/formatter_unicode.c
@@ -561,13 +561,14 @@ fill_number(PyObject *out, Py_ssize_t pos, const NumberFieldWidths *spec,
return -1;
if (toupper) {
Py_ssize_t t;
- /* XXX if the upper-case prefix is wider than the target
- buffer, the caller should have allocated a wider string,
- but currently doesn't. */
- for (t = 0; t < spec->n_prefix; ++t)
- PyUnicode_WRITE(kind, data, pos + t,
- Py_UNICODE_TOUPPER(
- PyUnicode_READ(kind, data, pos + t)));
+ for (t = 0; t < spec->n_prefix; t++) {
+ Py_UCS4 c = PyUnicode_READ(kind, data, pos + t);
+ if (c > 127) {
+ PyErr_SetString(PyExc_SystemError, "prefix not ASCII");
+ return -1;
+ }
+ PyUnicode_WRITE(kind, data, pos + t, Py_TOUPPER(c));
+ }
}
pos += spec->n_prefix;
}
@@ -607,10 +608,14 @@ fill_number(PyObject *out, Py_ssize_t pos, const NumberFieldWidths *spec,
}
if (toupper) {
Py_ssize_t t;
- for (t = 0; t < spec->n_grouped_digits; ++t)
- PyUnicode_WRITE(kind, data, pos + t,
- Py_UNICODE_TOUPPER(
- PyUnicode_READ(kind, data, pos + t)));
+ for (t = 0; t < spec->n_grouped_digits; t++) {
+ Py_UCS4 c = PyUnicode_READ(kind, data, pos + t);
+ if (c > 127) {
+ PyErr_SetString(PyExc_SystemError, "non-ascii grouped digit");
+ return -1;
+ }
+ PyUnicode_WRITE(kind, data, pos + t, Py_TOUPPER(c));
+ }
}
pos += spec->n_grouped_digits;