summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>2001-10-04 15:45:49 +0000
committerBruce Momjian <bruce@momjian.us>2001-10-04 15:45:49 +0000
commit96471bf1068ae757b988aa7678a70b1bb953ea66 (patch)
tree89a0c84da431bd98a3e495917cc4c0d3cad940a8
parenta6020b396b4bb6231510e99729278f534464d19f (diff)
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
-rw-r--r--src/pl/plpython/plpython.c15
1 files 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':
@@ -1465,6 +1470,12 @@ PLyInt_FromString(const char *src)
}
PyObject *
+PLyLong_FromString(const char *src)
+{
+ return PyLong_FromString((char *)src,NULL,0);
+}
+
+PyObject *
PLyString_FromString(const char *src)
{
return PyString_FromString(src);