Skip to content

Commit aa2e921

Browse files
committed
Merge branch 'PHP-8.3'
2 parents 3e237ec + a9c01b9 commit aa2e921

File tree

2 files changed

+83
-3
lines changed

2 files changed

+83
-3
lines changed

ext/pgsql/pgsql.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1290,7 +1290,7 @@ PHP_FUNCTION(pg_execute)
12901290
params = (char **)safe_emalloc(sizeof(char *), num_params, 0);
12911291

12921292
ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(pv_param_arr), tmp) {
1293-
1293+
ZVAL_DEREF(tmp);
12941294
if (Z_TYPE_P(tmp) == IS_NULL) {
12951295
params[i] = NULL;
12961296
} else {
@@ -3717,7 +3717,7 @@ PHP_FUNCTION(pg_send_query_params)
37173717
params = (char **)safe_emalloc(sizeof(char *), num_params, 0);
37183718

37193719
ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(pv_param_arr), tmp) {
3720-
3720+
ZVAL_DEREF(tmp);
37213721
if (Z_TYPE_P(tmp) == IS_NULL) {
37223722
params[i] = NULL;
37233723
} else {
@@ -3884,7 +3884,7 @@ PHP_FUNCTION(pg_send_execute)
38843884
params = (char **)safe_emalloc(sizeof(char *), num_params, 0);
38853885

38863886
ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(pv_param_arr), tmp) {
3887-
3887+
ZVAL_DEREF(tmp);
38883888
if (Z_TYPE_P(tmp) == IS_NULL) {
38893889
params[i] = NULL;
38903890
} else {

ext/pgsql/tests/gh13354.phpt

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
--TEST--
2+
GH-13354 (null-by-reference handling in pg_execute, pg_send_query_params, pg_send_execute)
3+
--EXTENSIONS--
4+
pgsql
5+
--SKIPIF--
6+
<?php include("skipif.inc"); ?>
7+
--FILE--
8+
<?php
9+
include 'config.inc';
10+
11+
$db = pg_connect($conn_str);
12+
$val = null;
13+
14+
$query = 'SELECT $1::text IS NULL;';
15+
$params_null = [null];
16+
$params_null_by_ref = [&$val];
17+
18+
pg_prepare($db, 'test', $query);
19+
20+
21+
// method 1, pg_execute
22+
$val = null;
23+
$res = pg_execute($db, 'test', $params_null);
24+
echo "pg_execute, null value: " . pg_fetch_result($res, 0, 0) . "\n";
25+
pg_free_result($res);
26+
27+
$res = pg_execute($db, 'test', $params_null_by_ref);
28+
echo "pg_execute, null value by reference: " . pg_fetch_result($res, 0, 0) . "\n";
29+
pg_free_result($res);
30+
31+
32+
// method 2, pg_query_params
33+
$res = pg_query_params($db, $query, $params_null);
34+
echo "pg_query_params, null value: " . pg_fetch_result($res, 0, 0) . "\n";
35+
pg_free_result($res);
36+
37+
$res = pg_query_params($db, $query, $params_null_by_ref);
38+
echo "pg_query_params, null value by reference: " . pg_fetch_result($res, 0, 0) . "\n";
39+
pg_free_result($res);
40+
41+
42+
// method 3, pg_send_query_params
43+
$res = pg_send_query_params($db, $query, $params_null);
44+
pg_consume_input($db);
45+
$res = pg_get_result($db);
46+
echo "pg_send_query_params, null value: " . pg_fetch_result($res, 0, 0) . "\n";
47+
pg_free_result($res);
48+
49+
$res = pg_send_query_params($db, $query, $params_null_by_ref);
50+
pg_consume_input($db);
51+
$res = pg_get_result($db);
52+
echo "pg_send_query_params, null value by reference: " . pg_fetch_result($res, 0, 0) . "\n";
53+
pg_free_result($res);
54+
55+
56+
// method 4, pg_send_prepare, pg_send_execute
57+
pg_send_execute($db, 'test', $params_null);
58+
pg_consume_input($db);
59+
$res = pg_get_result($db);
60+
echo "pg_send_execute, null value: " . pg_fetch_result($res, 0, 0) . "\n";
61+
pg_free_result($res);
62+
63+
pg_send_execute($db, 'test', $params_null_by_ref);
64+
pg_consume_input($db);
65+
$res = pg_get_result($db);
66+
echo "pg_send_execute, null value by reference: " . pg_fetch_result($res, 0, 0) . "\n";
67+
pg_free_result($res);
68+
69+
pg_close($db);
70+
71+
?>
72+
--EXPECT--
73+
pg_execute, null value: t
74+
pg_execute, null value by reference: t
75+
pg_query_params, null value: t
76+
pg_query_params, null value by reference: t
77+
pg_send_query_params, null value: t
78+
pg_send_query_params, null value by reference: t
79+
pg_send_execute, null value: t
80+
pg_send_execute, null value by reference: t

0 commit comments

Comments
 (0)