mirror of
https://github.com/php/php-src.git
synced 2024-09-21 18:07:23 +00:00
Fixed OID overflow. If value is larger than MAX_LONG,
pg_last_oid() returns string to keep correct value.
This commit is contained in:
parent
04fb5ef2e3
commit
07125ea9f4
@ -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 @@ PHP_FUNCTION(pg_last_oid)
|
||||
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 @@ PHP_FUNCTION(pg_last_oid)
|
||||
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;
|
||||
}
|
||||
@ -3758,9 +3769,6 @@ PHP_FUNCTION(pg_convert)
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
#define PGSQL_MAX_LENGTH_OF_LONG 30
|
||||
#define PGSQL_MAX_LENGTH_OF_DOUBLE 60
|
||||
|
||||
/* {{{ php_pgsql_insert
|
||||
*/
|
||||
PHPAPI int php_pgsql_insert(PGconn *pg_link, const char *table, zval *var_array, zend_bool convert, zend_bool async TSRMLS_DC)
|
||||
|
Loading…
Reference in New Issue
Block a user