OSDN Git Service

This is a quick patch to fix a crash in pgquery_dictresult() introduced
authorBruce Momjian <bruce@momjian.us>
Wed, 28 Aug 2002 20:18:58 +0000 (20:18 +0000)
committerBruce Momjian <bruce@momjian.us>
Wed, 28 Aug 2002 20:18:58 +0000 (20:18 +0000)
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

src/interfaces/python/pgmodule.c

index 355c3e4..fcda897 100644 (file)
@@ -1788,41 +1788,7 @@ pgquery_getresult(pgqueryobject * self, PyObject * args)
        n = PQnfields(self->last_result);
        reslist = PyList_New(m);
 
-       if ((typ = malloc(sizeof(int) * n)) == NULL)
-       {
-               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;
-               }
-       }
+       typ = get_type_array(self->last_result, n);
 
        for (i = 0; i < m; i++)
        {
@@ -1944,41 +1910,7 @@ pgquery_dictresult(pgqueryobject * self, PyObject * args)
        n = PQnfields(self->last_result);
        reslist = PyList_New(m);
 
-       if ((typ = malloc(sizeof(int) * n)) == NULL)
-       {
-               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;
-               }
-       }
+       typ = get_type_array(self->last_result, n);
 
        for (i = 0; i < m; i++)
        {
@@ -2034,9 +1966,13 @@ pgquery_dictresult(pgqueryobject * self, PyObject * args)
                                                                                                 * one */
                                                                s++;
 
-                                                       for (k = 0; *s; s++)
+                                                       for (k = 0; 
+                                                               *s && k < sizeof(cashbuf)/sizeof(cashbuf[0])-1; 
+                                                               s++)
+                                                       {
                                                                if (*s != ',')
                                                                        cashbuf[k++] = *s;
+                                                       }
 
                                                        cashbuf[k] = 0;
                                                        val = PyFloat_FromDouble(strtod(cashbuf, NULL) * mult);