cvs: php4 /ext/pgsql pgsql.c
| From: | Yasuo Ohgaki | Date: | Sat, 20 Apr 2002 03:03:43 +0000 |
| Subject: | cvs: php4 /ext/pgsql pgsql.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-11253@lists.php.net to get a copy of this message | ||
yohgaki Fri Apr 19 23:03:43 2002 EDT
Modified files:
/php4/ext/pgsql pgsql.c
Log:
Fixed OID overflow. If value is larger than MAX_LONG,
pg_last_oid() returns string to keep correct value.
Index: php4/ext/pgsql/pgsql.c
diff -u php4/ext/pgsql/pgsql.c:1.181 php4/ext/pgsql/pgsql.c:1.182
--- php4/ext/pgsql/pgsql.c:1.181 Fri Apr 19 22:31:48 2002
+++ php4/ext/pgsql/pgsql.c Fri Apr 19 23:03:42 2002
@@ -19,7 +19,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: pgsql.c,v 1.181 2002/04/20 02:31:48 yohgaki Exp $ */
+/* $Id: pgsql.c,v 1.182 2002/04/20 03:03:42 yohgaki Exp $ */
#include <stdlib.h>
@@ -48,6 +48,10 @@
#define PGSQL_STATUS_LONG 1
#define PGSQL_STATUS_STRING 2
+#define PGSQL_MAX_LENGTH_OF_LONG 30
+#define PGSQL_MAX_LENGTH_OF_DOUBLE 60
+
+
#if HAVE_PQSETNONBLOCKING
#define PQ_SETNONBLOCKING(pg_link, flag) PQsetnonblocking(pg_link, flag)
#else
@@ -1476,6 +1480,8 @@
zval **result;
PGresult *pgsql_result;
pgsql_result_handle *pg_result;
+ uint oid;
+ char *oid_str;
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result)==FAILURE) {
WRONG_PARAM_COUNT;
@@ -1484,18 +1490,23 @@
ZEND_FETCH_RESOURCE(pg_result, pgsql_result_handle *, result, -1, "PostgreSQL result",
le_result);
pgsql_result = pg_result->result;
#ifdef HAVE_PQOIDVALUE
- Z_LVAL_P(return_value) = (int) PQoidValue(pgsql_result);
- if (Z_LVAL_P(return_value) == InvalidOid) {
+ oid = PQoidValue(pgsql_result);
+ if (oid == InvalidOid) {
RETURN_FALSE;
- } else {
- Z_TYPE_P(return_value) = IS_LONG;
+ } else if (oid > LONG_MAX) {
+ oid_str = (char *)emalloc(PGSQL_MAX_LENGTH_OF_LONG+1);
+ sprintf(oid_str, "%l", oid);
+ RETVAL_STRING(oid_str, 0);
+ }
+ else {
+ RETVAL_LONG((long)oid);
}
#else
Z_STRVAL_P(return_value) = (char *) PQoidStatus(pgsql_result);
+ Z_TYPE_P(return_value) = IS_STRING;
if (Z_STRVAL_P(return_value)) {
Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value));
Z_STRVAL_P(return_value) = estrndup(Z_STRVAL_P(return_value), Z_STRLEN_P(return_value));
- Z_TYPE_P(return_value) = IS_STRING;
} else {
Z_STRVAL_P(return_value) = empty_string;
}
@@ -3757,9 +3768,6 @@
}
}
/* }}} */
-
-#define PGSQL_MAX_LENGTH_OF_LONG 30
-#define PGSQL_MAX_LENGTH_OF_DOUBLE 60
/* {{{ php_pgsql_insert
*/