summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@haypocalc.com>2011-03-21 12:26:24 (GMT)
committerVictor Stinner <victor.stinner@haypocalc.com>2011-03-21 12:26:24 (GMT)
commit499dfcf29da7b7d1ca11f697cece773936c2ba42 (patch)
tree5b295eac3254ac6d6f0253d037081d7456ff9d7c
parentbfc7bf06a63b5bf4cac0dae7c0d370fbc81563f9 (diff)
downloadcpython-499dfcf29da7b7d1ca11f697cece773936c2ba42.zip
cpython-499dfcf29da7b7d1ca11f697cece773936c2ba42.tar.gz
cpython-499dfcf29da7b7d1ca11f697cece773936c2ba42.tar.bz2
Issue #10833: Use PyUnicode_FromFormat() and PyErr_Format() instead of
PyOS_snprintf().
-rw-r--r--Modules/_elementtree.c12
-rw-r--r--Modules/_testcapimodule.c6
-rw-r--r--Modules/gcmodule.c4
-rw-r--r--Modules/pyexpat.c13
-rw-r--r--Modules/timemodule.c29
-rw-r--r--Objects/weakrefobject.c58
6 files changed, 54 insertions, 68 deletions
diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c
index 5983a3b..6373c48 100644
--- a/Modules/_elementtree.c
+++ b/Modules/_elementtree.c
@@ -2138,13 +2138,15 @@ makeuniversal(XMLParserObject* self, const char* string)
static void
expat_set_error(const char* message, int line, int column)
{
- PyObject *error;
- PyObject *position;
- char buffer[256];
+ PyObject *errmsg, *error, *position;
- sprintf(buffer, "%.100s: line %d, column %d", message, line, column);
+ errmsg = PyUnicode_FromFormat("%s: line %d, column %d",
+ message, line, column);
+ if (errmsg == NULL)
+ return;
- error = PyObject_CallFunction(elementtree_parseerror_obj, "s", buffer);
+ error = PyObject_CallFunction(elementtree_parseerror_obj, "O", errmsg);
+ Py_DECREF(errmsg);
if (!error)
return;
diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c
index f19d0df..75dbe57 100644
--- a/Modules/_testcapimodule.c
+++ b/Modules/_testcapimodule.c
@@ -43,11 +43,9 @@ static PyObject*
sizeof_error(const char* fatname, const char* typname,
int expected, int got)
{
- char buf[1024];
- PyOS_snprintf(buf, sizeof(buf),
- "%.200s #define == %d but sizeof(%.200s) == %d",
+ PyErr_Format(TestError,
+ "%s #define == %d but sizeof(%s) == %d",
fatname, expected, typname, got);
- PyErr_SetString(TestError, buf);
return (PyObject*)NULL;
}
diff --git a/Modules/gcmodule.c b/Modules/gcmodule.c
index 10a4ed7..b05675c 100644
--- a/Modules/gcmodule.c
+++ b/Modules/gcmodule.c
@@ -680,8 +680,8 @@ handle_weakrefs(PyGC_Head *unreachable, PyGC_Head *old)
static void
debug_cycle(char *msg, PyObject *op)
{
- PySys_WriteStderr("gc: %.100s <%.100s %p>\n",
- msg, Py_TYPE(op)->tp_name, op);
+ PySys_FormatStderr("gc: %s <%s %p>\n",
+ msg, Py_TYPE(op)->tp_name, op);
}
/* Handle uncollectable garbage (cycles with finalizers, and stuff reachable
diff --git a/Modules/pyexpat.c b/Modules/pyexpat.c
index ee59baf..9b78d7e 100644
--- a/Modules/pyexpat.c
+++ b/Modules/pyexpat.c
@@ -100,16 +100,17 @@ static PyObject *
set_error(xmlparseobject *self, enum XML_Error code)
{
PyObject *err;
- char buffer[256];
+ PyObject *buffer;
XML_Parser parser = self->itself;
int lineno = XML_GetErrorLineNumber(parser);
int column = XML_GetErrorColumnNumber(parser);
- /* There is no risk of overflowing this buffer, since
- even for 64-bit integers, there is sufficient space. */
- sprintf(buffer, "%.200s: line %i, column %i",
- XML_ErrorString(code), lineno, column);
- err = PyObject_CallFunction(ErrorObject, "s", buffer);
+ buffer = PyUnicode_FromFormat("%s: line %i, column %i",
+ XML_ErrorString(code), lineno, column);
+ if (buffer == NULL)
+ return NULL;
+ err = PyObject_CallFunction(ErrorObject, "O", buffer);
+ Py_DECREF(buffer);
if ( err != NULL
&& set_error_attr(err, "code", code)
&& set_error_attr(err, "offset", column)
diff --git a/Modules/timemodule.c b/Modules/timemodule.c
index c3b51ef..b24cc35 100644
--- a/Modules/timemodule.c
+++ b/Modules/timemodule.c
@@ -601,31 +601,20 @@ _asctime(struct tm *timeptr)
{
/* Inspired by Open Group reference implementation available at
* http://pubs.opengroup.org/onlinepubs/009695399/functions/asctime.html */
- static char wday_name[7][3] = {
+ static char wday_name[7][4] = {
"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
};
- static char mon_name[12][3] = {
+ static char mon_name[12][4] = {
"Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
};
- char buf[20]; /* 'Sun Sep 16 01:03:52\0' */
- int n;
-
- n = PyOS_snprintf(buf, sizeof(buf), "%.3s %.3s%3d %.2d:%.2d:%.2d",
- wday_name[timeptr->tm_wday],
- mon_name[timeptr->tm_mon],
- timeptr->tm_mday, timeptr->tm_hour,
- timeptr->tm_min, timeptr->tm_sec);
- /* XXX: since the fields used by snprintf above are validated in checktm,
- * the following condition should never trigger. We keep the check because
- * historically fixed size buffer used in asctime was the source of
- * crashes. */
- if (n + 1 != sizeof(buf)) {
- PyErr_SetString(PyExc_ValueError, "unconvertible time");
- return NULL;
- }
-
- return PyUnicode_FromFormat("%s %d", buf, 1900 + timeptr->tm_year);
+ return PyUnicode_FromFormat(
+ "%s %s%3d %.2d:%.2d:%.2d %d",
+ wday_name[timeptr->tm_wday],
+ mon_name[timeptr->tm_mon],
+ timeptr->tm_mday, timeptr->tm_hour,
+ timeptr->tm_min, timeptr->tm_sec,
+ 1900 + timeptr->tm_year);
}
static PyObject *
diff --git a/Objects/weakrefobject.c b/Objects/weakrefobject.c
index dfaa1b9..72ecdd0 100644
--- a/Objects/weakrefobject.c
+++ b/Objects/weakrefobject.c
@@ -157,34 +157,31 @@ static PyObject *
weakref_repr(PyWeakReference *self)
{
char buffer[256];
- if (PyWeakref_GET_OBJECT(self) == Py_None) {
- PyOS_snprintf(buffer, sizeof(buffer), "<weakref at %p; dead>", self);
+ PyObject *name, *repr;
+
+ if (PyWeakref_GET_OBJECT(self) == Py_None)
+ return PyUnicode_FromFormat("<weakref at %p; dead>", self);
+
+ name = PyObject_GetAttrString(PyWeakref_GET_OBJECT(self), "__name__");
+ if (name == NULL || !PyUnicode_Check(name)) {
+ if (name == NULL)
+ PyErr_Clear();
+ repr = PyUnicode_FromFormat(
+ "<weakref at %p; to '%s' at %p>",
+ self,
+ Py_TYPE(PyWeakref_GET_OBJECT(self))->tp_name,
+ PyWeakref_GET_OBJECT(self));
}
else {
- char *name = NULL;
- PyObject *nameobj = PyObject_GetAttrString(PyWeakref_GET_OBJECT(self),
- "__name__");
- if (nameobj == NULL)
- PyErr_Clear();
- else if (PyUnicode_Check(nameobj))
- name = _PyUnicode_AsString(nameobj);
- if (name)
- PyOS_snprintf(buffer, sizeof(buffer),
- "<weakref at %p; to '%.50s' at %p (%s)>",
- self,
- Py_TYPE(PyWeakref_GET_OBJECT(self))->tp_name,
- PyWeakref_GET_OBJECT(self),
- name);
- else
- PyOS_snprintf(buffer, sizeof(buffer),
- "<weakref at %p; to '%.50s' at %p>",
- self,
- Py_TYPE(PyWeakref_GET_OBJECT(self))->tp_name,
- PyWeakref_GET_OBJECT(self));
-
- Py_XDECREF(nameobj);
+ repr = PyUnicode_FromFormat(
+ "<weakref at %p; to '%s' at %p (%U)>",
+ self,
+ Py_TYPE(PyWeakref_GET_OBJECT(self))->tp_name,
+ PyWeakref_GET_OBJECT(self),
+ name);
}
- return PyUnicode_FromString(buffer);
+ Py_XDECREF(name);
+ return repr;
}
/* Weak references only support equality, not ordering. Two weak references
@@ -459,12 +456,11 @@ WRAP_TERNARY(proxy_call, PyEval_CallObjectWithKeywords)
static PyObject *
proxy_repr(PyWeakReference *proxy)
{
- char buf[160];
- PyOS_snprintf(buf, sizeof(buf),
- "<weakproxy at %p to %.100s at %p>", proxy,
- Py_TYPE(PyWeakref_GET_OBJECT(proxy))->tp_name,
- PyWeakref_GET_OBJECT(proxy));
- return PyUnicode_FromString(buf);
+ return PyUnicode_FromFormat(
+ "<weakproxy at %p to %s at %p>",
+ proxy,
+ Py_TYPE(PyWeakref_GET_OBJECT(proxy))->tp_name,
+ PyWeakref_GET_OBJECT(proxy));
}