]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Issue #10833: Use PyUnicode_FromFormat() and PyErr_Format() instead of
authorVictor Stinner <victor.stinner@haypocalc.com>
Mon, 21 Mar 2011 12:26:24 +0000 (13:26 +0100)
committerVictor Stinner <victor.stinner@haypocalc.com>
Mon, 21 Mar 2011 12:26:24 +0000 (13:26 +0100)
PyOS_snprintf().

Modules/_elementtree.c
Modules/_testcapimodule.c
Modules/gcmodule.c
Modules/pyexpat.c
Modules/timemodule.c
Objects/weakrefobject.c

index 5983a3b87bd03c0db0faecd275d591b7f00c56e7..6373c4848f29d6ff64574543cd8bdccdeb3aca85 100644 (file)
@@ -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;
 
index f19d0df5944bc853b3da24d953a7a7646f1a3719..75dbe572128736fc594700f40dd99ba54dd1904f 100644 (file)
@@ -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;
 }
 
index 10a4ed7f6a7abece945933ae62948ba79fbf724b..b05675c84a76d1b3cfb6a6934c27ed690fc5a456 100644 (file)
@@ -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
index ee59baf83f9eb9393360e68fa3d69a98f23040b1..9b78d7e3a61cb8e55b34760ceda01b8488b75da4 100644 (file)
@@ -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)
index c3b51efc5be59a2072990356ffae389a1f68d118..b24cc3590946d80db024bb942954efd12bbb8173 100644 (file)
@@ -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 *
index dfaa1b9f8ec27f53e727037cc8aa37e98fa29295..72ecdd07a88cade2dac0b1351ecdc5d0ec55e8a6 100644 (file)
@@ -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));
 }