Fix poorly thought-through code from commit 5c3c3cd0a3046339.
It's not entirely clear to me whether PyString_AsString can return null (looks like the answer might vary between Python 2 and 3). But in any case, this code's attempt to cope with the possibility was quite broken, because pstrdup() neither allows a null argument nor ever returns a null. Moreover, the code below this point assumes that "message" is a palloc'd string, which would not be the case for a dgettext result. Fix both problems by doing the pstrdup step separately.
This commit is contained in:
parent
074050f16a
commit
f73b2bbbdc
@ -424,11 +424,12 @@ PLy_output(volatile int level, PyObject *self, PyObject *args, PyObject *kw)
|
||||
else
|
||||
so = PyObject_Str(args);
|
||||
|
||||
if (so == NULL || ((message = pstrdup(PyString_AsString(so))) == NULL))
|
||||
if (so == NULL || ((message = PyString_AsString(so)) == NULL))
|
||||
{
|
||||
level = ERROR;
|
||||
message = dgettext(TEXTDOMAIN, "could not parse error message in plpy.elog");
|
||||
}
|
||||
message = pstrdup(message);
|
||||
|
||||
Py_XDECREF(so);
|
||||
|
||||
@ -444,6 +445,7 @@ PLy_output(volatile int level, PyObject *self, PyObject *args, PyObject *kw)
|
||||
if (PyTuple_Size(args) != 0)
|
||||
PLy_elog(ERROR, "the message is already specified");
|
||||
|
||||
if (message)
|
||||
pfree(message);
|
||||
message = object_to_string(value);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user