diff options
-rw-r--r-- | Python/exceptions.c | 78 |
1 files changed, 36 insertions, 42 deletions
diff --git a/Python/exceptions.c b/Python/exceptions.c index 58e7c94..c9e516f 100644 --- a/Python/exceptions.c +++ b/Python/exceptions.c @@ -1238,7 +1238,6 @@ UnicodeEncodeError__str__(PyObject *self, PyObject *arg) Py_ssize_t start; Py_ssize_t end; PyObject *reasonObj = NULL; - char buffer[1000]; PyObject *result = NULL; self = arg; @@ -1260,32 +1259,30 @@ UnicodeEncodeError__str__(PyObject *self, PyObject *arg) if (end==start+1) { int badchar = (int)PyUnicode_AS_UNICODE(objectObj)[start]; - char *format; + char badchar_str[20]; if (badchar <= 0xff) - format = "'%.400s' codec can't encode character u'\\x%02x' in position %d: %.400s"; + PyOS_snprintf(badchar_str, sizeof(badchar_str), "x%02x", badchar); else if (badchar <= 0xffff) - format = "'%.400s' codec can't encode character u'\\u%04x' in position %d: %.400s"; + PyOS_snprintf(badchar_str, sizeof(badchar_str), "u%04x", badchar); else - format = "'%.400s' codec can't encode character u'\\U%08x' in position %d: %.400s"; - PyOS_snprintf(buffer, sizeof(buffer), - format, + PyOS_snprintf(badchar_str, sizeof(badchar_str), "U%08x", badchar); + result = PyString_FromFormat( + "'%.400s' codec can't encode character u'\\%s' in position %zd: %.400s", PyString_AS_STRING(encodingObj), - badchar, + badchar_str, start, PyString_AS_STRING(reasonObj) ); } else { - /* XXX %zd? */ - PyOS_snprintf(buffer, sizeof(buffer), - "'%.400s' codec can't encode characters in position %d-%d: %.400s", + result = PyString_FromFormat( + "'%.400s' codec can't encode characters in position %zd-%zd: %.400s", PyString_AS_STRING(encodingObj), - (int)start, - (int)(end-1), + start, + (end-1), PyString_AS_STRING(reasonObj) ); } - result = PyString_FromString(buffer); error: Py_XDECREF(reasonObj); @@ -1324,7 +1321,6 @@ UnicodeDecodeError__str__(PyObject *self, PyObject *arg) Py_ssize_t start; Py_ssize_t end; PyObject *reasonObj = NULL; - char buffer[1000]; PyObject *result = NULL; self = arg; @@ -1345,26 +1341,28 @@ UnicodeDecodeError__str__(PyObject *self, PyObject *arg) goto error; if (end==start+1) { - /* XXX %zd? */ - PyOS_snprintf(buffer, sizeof(buffer), - "'%.400s' codec can't decode byte 0x%02x in position %d: %.400s", + /* FromFormat does not support %02x, so format that separately */ + char byte[4]; + PyOS_snprintf(byte, sizeof(byte), "%02x", + ((int)PyString_AS_STRING(objectObj)[start])&0xff); + result = PyString_FromFormat( + "'%.400s' codec can't decode byte 0x%s in position %zd: %.400s", PyString_AS_STRING(encodingObj), - ((int)PyString_AS_STRING(objectObj)[start])&0xff, - (int)start, + byte, + start, PyString_AS_STRING(reasonObj) ); } else { - /* XXX %zd? */ - PyOS_snprintf(buffer, sizeof(buffer), - "'%.400s' codec can't decode bytes in position %d-%d: %.400s", + result = PyString_FromFormat( + "'%.400s' codec can't decode bytes in position %zd-%zd: %.400s", PyString_AS_STRING(encodingObj), - (int)start, - (int)(end-1), + start, + (end-1), PyString_AS_STRING(reasonObj) ); } - result = PyString_FromString(buffer); + error: Py_XDECREF(reasonObj); @@ -1442,7 +1440,6 @@ UnicodeTranslateError__str__(PyObject *self, PyObject *arg) Py_ssize_t start; Py_ssize_t end; PyObject *reasonObj = NULL; - char buffer[1000]; PyObject *result = NULL; self = arg; @@ -1461,31 +1458,28 @@ UnicodeTranslateError__str__(PyObject *self, PyObject *arg) if (end==start+1) { int badchar = (int)PyUnicode_AS_UNICODE(objectObj)[start]; - char *format; - /* XXX %zd? */ + char badchar_str[20]; if (badchar <= 0xff) - format = "can't translate character u'\\x%02x' in position %d: %.400s"; + PyOS_snprintf(badchar_str, sizeof(badchar_str), "x%02x", badchar); else if (badchar <= 0xffff) - format = "can't translate character u'\\u%04x' in position %d: %.400s"; + PyOS_snprintf(badchar_str, sizeof(badchar_str), "u%04x", badchar); else - format = "can't translate character u'\\U%08x' in position %d: %.400s"; - PyOS_snprintf(buffer, sizeof(buffer), - format, - badchar, - (int)start, + PyOS_snprintf(badchar_str, sizeof(badchar_str), "U%08x", badchar); + result = PyString_FromFormat( + "can't translate character u'\\%s' in position %zd: %.400s", + badchar_str, + start, PyString_AS_STRING(reasonObj) ); } else { - /* XXX %zd? */ - PyOS_snprintf(buffer, sizeof(buffer), - "can't translate characters in position %d-%d: %.400s", - (int)start, - (int)(end-1), + result = PyString_FromFormat( + "can't translate characters in position %zd-%zd: %.400s", + start, + (end-1), PyString_AS_STRING(reasonObj) ); } - result = PyString_FromString(buffer); error: Py_XDECREF(reasonObj); |