From 96471bf1068ae757b988aa7678a70b1bb953ea66 Mon Sep 17 00:00:00 2001
From: Bruce Momjian <bruce@momjian.us>
Date: Thu, 4 Oct 2001 15:45:49 +0000
Subject: [PATCH] Using strtol() on int8 values (input parameters or result
 sets) in plpython would result in numeric overflows causing the backend to
 terminate abruptly.

This patch fixes it.

Bradley McLean
---
 src/pl/plpython/plpython.c | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/src/pl/plpython/plpython.c b/src/pl/plpython/plpython.c
index 2cfdeade622..cd3486fa6d6 100644
--- a/src/pl/plpython/plpython.c
+++ b/src/pl/plpython/plpython.c
@@ -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)
 {
-- 
GitLab