From 7802a53e38399e8df647f0633f18658b7bb1be4a Mon Sep 17 00:00:00 2001 From: Jeremy Hylton Date: Thu, 6 Dec 2001 15:18:48 +0000 Subject: [PATCH] Little stuff. Add a missing DECREF in an obscure corner. If the str() or repr() of an object passed to a string interpolation -- e.g. "%s" % obj -- returns a non-string, the returned object was leaked. Repair an indentation glitch. Replace a bunch of PyString_AsString() calls (and their ilk) with macros. --- Objects/stringobject.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/Objects/stringobject.c b/Objects/stringobject.c index 86e0ea725eb..cb0e20b52ba 100644 --- a/Objects/stringobject.c +++ b/Objects/stringobject.c @@ -3146,15 +3146,15 @@ PyString_Format(PyObject *format, PyObject *args) return NULL; } orig_args = args; - fmt = PyString_AsString(format); - fmtcnt = PyString_Size(format); + fmt = PyString_AS_STRING(format); + fmtcnt = PyString_GET_SIZE(format); reslen = rescnt = fmtcnt + 100; result = PyString_FromStringAndSize((char *)NULL, reslen); if (result == NULL) return NULL; res = PyString_AsString(result); if (PyTuple_Check(args)) { - arglen = PyTuple_Size(args); + arglen = PyTuple_GET_SIZE(args); argidx = 0; } else { @@ -3170,7 +3170,7 @@ PyString_Format(PyObject *format, PyObject *args) reslen += rescnt; if (_PyString_Resize(&result, reslen) < 0) return NULL; - res = PyString_AsString(result) + res = PyString_AS_STRING(result) + reslen - rescnt; --rescnt; } @@ -3351,7 +3351,7 @@ PyString_Format(PyObject *format, PyObject *args) } #endif if (c == 's') - temp = PyObject_Str(v); + temp = PyObject_Str(v); else temp = PyObject_Repr(v); if (temp == NULL) @@ -3359,10 +3359,11 @@ PyString_Format(PyObject *format, PyObject *args) if (!PyString_Check(temp)) { PyErr_SetString(PyExc_TypeError, "%s argument has non-string str()"); + Py_DECREF(temp); goto error; } - pbuf = PyString_AsString(temp); - len = PyString_Size(temp); + pbuf = PyString_AS_STRING(temp); + len = PyString_GET_SIZE(temp); if (prec >= 0 && len > prec) len = prec; break; @@ -3441,7 +3442,7 @@ PyString_Format(PyObject *format, PyObject *args) reslen += rescnt; if (_PyString_Resize(&result, reslen) < 0) return NULL; - res = PyString_AsString(result) + res = PyString_AS_STRING(result) + reslen - rescnt; } if (sign) {