]> granicus.if.org Git - postgresql/commitdiff
Using strtol() on int8 values (input parameters or result sets) in
authorBruce Momjian <bruce@momjian.us>
Thu, 4 Oct 2001 15:45:49 +0000 (15:45 +0000)
committerBruce Momjian <bruce@momjian.us>
Thu, 4 Oct 2001 15:45:49 +0000 (15:45 +0000)
plpython would result in numeric overflows causing the backend to
terminate abruptly.

This patch fixes it.

Bradley McLean

src/pl/plpython/plpython.c

index 2cfdeade62206d051af9a772ab0697821450b946..cd3486fa6d6c6c9f8863b4ef1da3705765cf9825 100644 (file)
@@ -29,7 +29,7 @@
  * MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
  *
  * IDENTIFICATION
- *     $Header: /cvsroot/pgsql/src/pl/plpython/plpython.c,v 1.6 2001/10/01 17:53:12 tgl Exp $
+ *     $Header: /cvsroot/pgsql/src/pl/plpython/plpython.c,v 1.7 2001/10/04 15:45:49 momjian Exp $
  *
  *********************************************************************
  */
@@ -229,6 +229,7 @@ static PyObject *PLyDict_FromTuple(PLyTypeInfo *, HeapTuple, TupleDesc);
 static PyObject *PLyBool_FromString(const char *);
 static PyObject *PLyFloat_FromString(const char *);
 static PyObject *PLyInt_FromString(const char *);
+static PyObject *PLyLong_FromString(const char *);
 static PyObject *PLyString_FromString(const char *);
 
 
@@ -1378,12 +1379,16 @@ PLy_input_datum_func2(PLyDatumToOb *arg, Form_pg_type typeStruct)
     case 'i':
       {
        if ((strncasecmp("int", type, 3) == 0) && 
-           ((type[3] == '4') || (type[3] == '2') || (type[3] == '8')) &&
+           ((type[3] == '4') || (type[3] == '2')) &&
            (type[4] == '\0'))
          {
            arg->func = PLyInt_FromString;
            return;
          }
+       else if ( strcasecmp("int8", type) == 0 )
+         {
+           arg->func = PLyLong_FromString;
+         }
        break;
       }
     case 'n':
@@ -1464,6 +1469,12 @@ PLyInt_FromString(const char *src)
   return PyInt_FromLong(v);
 }
 
+PyObject *
+PLyLong_FromString(const char *src)
+{
+  return PyLong_FromString((char *)src,NULL,0);
+}
+
 PyObject *
 PLyString_FromString(const char *src)
 {