- Fixed problem preventing startup errors from being displayed. (Marcus)
- Fixed start-up problem if both SPL and SimpleXML were enabled. The double
initialization of apache 1.3 was causing problems here. (Marcus, Derick)
+- Fixed bug #27597 (pg_fetch_array not returning false). (Marcus)
- Fixed bug #27586 (ArrayObject::getIterator crashes with [] assignment).
(Marcus)
- Fixed bug #27537 (Objects pointing to each other segfaults). (Dmitry)
/* {{{ void php_pgsql_fetch_hash */
static void php_pgsql_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, long result_type, int into_object)
{
- zval *result;
+ zval *result, *zrow;
PGresult *pgsql_result;
pgsql_result_handle *pg_result;
int i, num_fields, pgsql_row, use_row;
result_type = PGSQL_ASSOC;
use_row = 0;
} else {
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|ll", &result, &row, &result_type) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|zl", &result, &zrow, &result_type) == FAILURE) {
return;
}
- use_row = ZEND_NUM_ARGS() > 1;
+ use_row = ZEND_NUM_ARGS() > 1 && Z_TYPE_P(zrow) != IS_NULL;
+ if (use_row) {
+ convert_to_long_ex(&zrow);
+ row = Z_LVAL_P(zrow);
+ }
}
if (!(result_type & PGSQL_BOTH)) {
--- /dev/null
+--TEST--
+Bug #27597 pg_fetch_array not returning false
+--SKIPIF--
+<?php
+require_once('skipif.inc');
+?>
+--FILE--
+<?php
+
+require_once('config.inc');
+
+$dbh = @pg_connect($conn_str);
+if (!$dbh) {
+ die ("Could not connect to the server");
+}
+
+@pg_query("DROP TABLE id");
+pg_query("CREATE TABLE id (id INT)");
+
+for ($i=0; $i<4; $i++) {
+ pg_query("INSERT INTO id (id) VALUES ($i)");
+}
+
+function xi_fetch_array($res, $type = PGSQL_ASSOC) {
+ $a = pg_fetch_array($res, NULL, $type) ;
+ return $a ;
+}
+
+$res = pg_query("SELECT * FROM id");
+$i = 0; // endless-loop protection
+while($row = xi_fetch_array($res)) {
+ print_r($row);
+ if ($i++ > 4) {
+ echo "ENDLESS-LOOP";
+ exit(1);
+ }
+}
+
+pg_close($dbh);
+
+?>
+===DONE===
+--EXPECTF--
+Array
+(
+ [id] => 0
+)
+Array
+(
+ [id] => 1
+)
+Array
+(
+ [id] => 2
+)
+Array
+(
+ [id] => 3
+)
+===DONE===