diff options
| -rw-r--r-- | ext/pgsql/pgsql.c | 4 | ||||
| -rwxr-xr-x | ext/pgsql/tests/80_bug32223b.phpt | 57 |
2 files changed, 59 insertions, 2 deletions
diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c index 96f551f4f7..d279db5dc0 100644 --- a/ext/pgsql/pgsql.c +++ b/ext/pgsql/pgsql.c @@ -345,7 +345,7 @@ static void _php_pgsql_notice_handler(void *resource_id, const char *message) if (PGG(log_notices)) { php_error_docref(NULL TSRMLS_CC, E_NOTICE, "%s", notice->message); } - zend_hash_index_update(&PGG(notices), *(int *)resource_id, (void **)¬ice, sizeof(php_pgsql_notice *), NULL); + zend_hash_index_update(&PGG(notices), (int)resource_id, (void **)¬ice, sizeof(php_pgsql_notice *), NULL); } } /* }}} */ @@ -783,7 +783,7 @@ static void php_pgsql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent) } /* set notice processer */ if (! PGG(ignore_notices) && Z_TYPE_P(return_value) == IS_RESOURCE) { - PQsetNoticeProcessor(pgsql, _php_pgsql_notice_handler, (void *)&Z_RESVAL_P(return_value)); + PQsetNoticeProcessor(pgsql, _php_pgsql_notice_handler, (void*)Z_RESVAL_P(return_value)); } php_pgsql_set_default_link(Z_LVAL_P(return_value) TSRMLS_CC); diff --git a/ext/pgsql/tests/80_bug32223b.phpt b/ext/pgsql/tests/80_bug32223b.phpt new file mode 100755 index 0000000000..010915e82c --- /dev/null +++ b/ext/pgsql/tests/80_bug32223b.phpt @@ -0,0 +1,57 @@ +--TEST-- +Bug #32223 (weird behaviour of pg_last_notice using notice) +--SKIPIF-- +<?php +require_once('skipif.inc'); + +@pg_query($conn, "CREATE LANGUAGE 'plpgsql' HANDLER plpgsql_call_handler LANCOMPILER 'PL/pgSQL'"); +$res = @pg_query($conn, "CREATE OR REPLACE FUNCTION test_notice() RETURNS boolean AS ' +begin + RAISE NOTICE ''11111''; + return ''f''; +end; +' LANGUAGE plpgsql;"); +if (!$res) die('skip PLPGSQL not available'); +?> +--FILE-- +<?php + +require('config.inc'); + +define ('dbh', pg_connect($conn_str)); +//$dbh = @pg_connect($conn_str); +if (!dbh) { + die ("Could not connect to the server"); +} + +//@pg_query(dbh, "CREATE LANGUAGE 'plpgsql' HANDLER plpgsql_call_handler LANCOMPILER 'PL/pgSQL'"); +$res = pg_query(dbh, "CREATE OR REPLACE FUNCTION test_notice() RETURNS boolean AS ' +begin + RAISE NOTICE ''11111''; + return ''f''; +end; +' LANGUAGE plpgsql;"); + +function tester() { + $res = pg_query(dbh, 'SELECT test_notice()'); + $row = pg_fetch_row($res, 0); + var_dump($row); + pg_free_result($res); + if ($row[0] == 'f') + { + var_dump(pg_last_notice(dbh)); + } +} +tester(); + +pg_close(dbh); + +?> +===DONE=== +--EXPECTF-- +array(1) { + [0]=> + string(1) "f" +} +string(14) "NOTICE: 11111" +===DONE=== |
