Commit f73b2bbb authored by Tom Lane's avatar Tom Lane

Fix poorly thought-through code from commit 5c3c3cd0.

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.
parent 074050f1
......@@ -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,7 +445,8 @@ PLy_output(volatile int level, PyObject *self, PyObject *args, PyObject *kw)
if (PyTuple_Size(args) != 0)
PLy_elog(ERROR, "the message is already specified");
pfree(message);
if (message)
pfree(message);
message = object_to_string(value);
}
else if (strcmp(keyword, "detail") == 0)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment