summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin v. Löwis <martin@v.loewis.de>2008-04-07 03:22:07 (GMT)
committerMartin v. Löwis <martin@v.loewis.de>2008-04-07 03:22:07 (GMT)
commit5a6f4585fdc52959bcc0dfdb9d25f2d34f983300 (patch)
tree889d39a1f6556e8aab23628d036b60e53cb1ab51
parentd218dc15e6b75d07450e4388c32e39c5741718bf (diff)
downloadcpython-5a6f4585fdc52959bcc0dfdb9d25f2d34f983300.zip
cpython-5a6f4585fdc52959bcc0dfdb9d25f2d34f983300.tar.gz
cpython-5a6f4585fdc52959bcc0dfdb9d25f2d34f983300.tar.bz2
Merged revisions 62199 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r62199 | martin.v.loewis | 2008-04-07 05:08:28 +0200 (Mo, 07 Apr 2008) | 2 lines Bug #2388: Fix gcc warnings when compiling with --enable-unicode=ucs4. ........
-rw-r--r--Objects/stringlib/formatter.h15
-rw-r--r--Objects/stringlib/string_format.h14
-rw-r--r--Objects/unicodeobject.c2
3 files changed, 25 insertions, 6 deletions
diff --git a/Objects/stringlib/formatter.h b/Objects/stringlib/formatter.h
index 3ca14fa..531bc22 100644
--- a/Objects/stringlib/formatter.h
+++ b/Objects/stringlib/formatter.h
@@ -785,8 +785,19 @@ FORMAT_STRING(PyObject* value, PyObject* args)
break;
default:
/* unknown */
- PyErr_Format(PyExc_ValueError, "Unknown conversion type %c",
- format.type);
+ #if STRINGLIB_IS_UNICODE
+ /* If STRINGLIB_CHAR is Py_UNICODE, %c might be out-of-range,
+ hence the two cases. If it is char, gcc complains that the
+ condition below is always true, hence the ifdef. */
+ if (format.type > 32 && format.type <128)
+ #endif
+ PyErr_Format(PyExc_ValueError, "Unknown conversion type %c",
+ (char)format.type);
+ #if STRINGLIB_IS_UNICODE
+ else
+ PyErr_Format(PyExc_ValueError, "Unknown conversion type '\\x%x'",
+ (unsigned int)format.type);
+ #endif
goto done;
}
diff --git a/Objects/stringlib/string_format.h b/Objects/stringlib/string_format.h
index 214b7b3..be8e8080 100644
--- a/Objects/stringlib/string_format.h
+++ b/Objects/stringlib/string_format.h
@@ -740,9 +740,17 @@ do_conversion(PyObject *obj, STRINGLIB_CHAR conversion)
case 's':
return STRINGLIB_TOSTR(obj);
default:
- PyErr_Format(PyExc_ValueError,
- "Unknown converion specifier %c",
- conversion);
+ if (conversion > 32 && conversion < 127) {
+ /* It's the ASCII subrange; casting to char is safe
+ (assuming the execution character set is an ASCII
+ superset). */
+ PyErr_Format(PyExc_ValueError,
+ "Unknown conversion specifier %c",
+ (char)conversion);
+ } else
+ PyErr_Format(PyExc_ValueError,
+ "Unknown conversion specifier \\x%x",
+ (unsigned int)conversion);
return NULL;
}
}
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 29ca08c..fe49ec8 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -8895,7 +8895,7 @@ PyObject *PyUnicode_Format(PyObject *format,
if (!isnumok) {
PyErr_Format(PyExc_TypeError,
"%%%c format: a number is required, "
- "not %.200s", c, Py_TYPE(v)->tp_name);
+ "not %.200s", (char)c, Py_TYPE(v)->tp_name);
goto onError;
}
if (flags & F_ZERO)