aboutsummaryrefslogtreecommitdiff
path: root/src
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 /src
parenta6020b396b4bb6231510e99729278f534464d19f (diff)
downloadpostgresql-96471bf1068ae757b988aa7678a70b1bb953ea66.tar.gz
postgresql-96471bf1068ae757b988aa7678a70b1bb953ea66.zip
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
Diffstat (limited to 'src')
-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);