mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-12-27 08:39:28 +08:00
This is a quick patch to fix a crash in pgquery_dictresult() introduced
recently. I just ran into it while running a set of python test scripts, and I'm not sure who the normal maintainer is for interfaces/python. John Nield
This commit is contained in:
parent
b60acaf568
commit
f5fea0808f
@ -1788,41 +1788,7 @@ pgquery_getresult(pgqueryobject * self, PyObject * args)
|
|||||||
n = PQnfields(self->last_result);
|
n = PQnfields(self->last_result);
|
||||||
reslist = PyList_New(m);
|
reslist = PyList_New(m);
|
||||||
|
|
||||||
if ((typ = malloc(sizeof(int) * n)) == NULL)
|
typ = get_type_array(self->last_result, n);
|
||||||
{
|
|
||||||
PyErr_SetString(PyExc_SyntaxError, "memory error in getresult().");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (j = 0; j < n; j++)
|
|
||||||
{
|
|
||||||
switch (PQftype(self->last_result, j))
|
|
||||||
{
|
|
||||||
case INT2OID:
|
|
||||||
case INT4OID:
|
|
||||||
case OIDOID:
|
|
||||||
typ[j] = 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case INT8OID:
|
|
||||||
typ[j] = 2;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FLOAT4OID:
|
|
||||||
case FLOAT8OID:
|
|
||||||
case NUMERICOID:
|
|
||||||
typ[j] = 3;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case CASHOID:
|
|
||||||
typ[j] = 4;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
typ[j] = 5;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < m; i++)
|
for (i = 0; i < m; i++)
|
||||||
{
|
{
|
||||||
@ -1944,41 +1910,7 @@ pgquery_dictresult(pgqueryobject * self, PyObject * args)
|
|||||||
n = PQnfields(self->last_result);
|
n = PQnfields(self->last_result);
|
||||||
reslist = PyList_New(m);
|
reslist = PyList_New(m);
|
||||||
|
|
||||||
if ((typ = malloc(sizeof(int) * n)) == NULL)
|
typ = get_type_array(self->last_result, n);
|
||||||
{
|
|
||||||
PyErr_SetString(PyExc_SyntaxError, "memory error in dictresult().");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (j = 0; j < n; j++)
|
|
||||||
{
|
|
||||||
switch (PQftype(self->last_result, j))
|
|
||||||
{
|
|
||||||
case INT2OID:
|
|
||||||
case INT4OID:
|
|
||||||
case OIDOID:
|
|
||||||
typ[j] = 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case INT8OID:
|
|
||||||
typ[j] = 2;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FLOAT4OID:
|
|
||||||
case FLOAT8OID:
|
|
||||||
case NUMERICOID:
|
|
||||||
typ[j] = 2;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case CASHOID:
|
|
||||||
typ[j] = 3;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
typ[j] = 4;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < m; i++)
|
for (i = 0; i < m; i++)
|
||||||
{
|
{
|
||||||
@ -2034,9 +1966,13 @@ pgquery_dictresult(pgqueryobject * self, PyObject * args)
|
|||||||
* one */
|
* one */
|
||||||
s++;
|
s++;
|
||||||
|
|
||||||
for (k = 0; *s; s++)
|
for (k = 0;
|
||||||
|
*s && k < sizeof(cashbuf)/sizeof(cashbuf[0])-1;
|
||||||
|
s++)
|
||||||
|
{
|
||||||
if (*s != ',')
|
if (*s != ',')
|
||||||
cashbuf[k++] = *s;
|
cashbuf[k++] = *s;
|
||||||
|
}
|
||||||
|
|
||||||
cashbuf[k] = 0;
|
cashbuf[k] = 0;
|
||||||
val = PyFloat_FromDouble(strtod(cashbuf, NULL) * mult);
|
val = PyFloat_FromDouble(strtod(cashbuf, NULL) * mult);
|
||||||
|
Loading…
Reference in New Issue
Block a user