Skip to content

Commit 0a3442f

Browse files
committed
ext/pgsql fixing further calls with flexible arguments number.
continuation of GH-17161 close GH-17165
1 parent 142f85e commit 0a3442f

File tree

3 files changed

+99
-8
lines changed

3 files changed

+99
-8
lines changed

NEWS

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ PHP NEWS
2424
- PgSql:
2525
. Fixed bug GH-17158 (pg_fetch_result Shows Incorrect ArgumentCountError
2626
Message when Called With 1 Argument). (nielsdos)
27+
. Fixed further ArgumentCountError for calls with flexible
28+
number of arguments. (David Carlier)
2729

2830
- Phar:
2931
. Fixed bug GH-17137 (Segmentation fault ext/phar/phar.c). (nielsdos)

ext/pgsql/pgsql.c

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -984,12 +984,15 @@ PHP_FUNCTION(pg_query)
984984
}
985985
link = FETCH_DEFAULT_LINK();
986986
CHECK_DEFAULT_LINK(link);
987-
} else {
987+
} else if (ZEND_NUM_ARGS() == 2) {
988988
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os", &pgsql_link, pgsql_link_ce, &query, &query_len) == FAILURE) {
989989
RETURN_THROWS();
990990
}
991991
link = Z_PGSQL_LINK_P(pgsql_link);
992992
CHECK_PGSQL_LINK(link);
993+
} else {
994+
zend_wrong_parameters_count_error(1, 2);
995+
RETURN_THROWS();
993996
}
994997

995998
pgsql = link->conn;
@@ -1078,12 +1081,15 @@ PHP_FUNCTION(pg_query_params)
10781081
}
10791082
link = FETCH_DEFAULT_LINK();
10801083
CHECK_DEFAULT_LINK(link);
1081-
} else {
1084+
} else if (ZEND_NUM_ARGS() == 3) {
10821085
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Osa", &pgsql_link, pgsql_link_ce, &query, &query_len, &pv_param_arr) == FAILURE) {
10831086
RETURN_THROWS();
10841087
}
10851088
link = Z_PGSQL_LINK_P(pgsql_link);
10861089
CHECK_PGSQL_LINK(link);
1090+
} else {
1091+
zend_wrong_parameters_count_error(2, 3);
1092+
RETURN_THROWS();
10871093
}
10881094

10891095
pgsql = link->conn;
@@ -1183,12 +1189,15 @@ PHP_FUNCTION(pg_prepare)
11831189
}
11841190
link = FETCH_DEFAULT_LINK();
11851191
CHECK_DEFAULT_LINK(link);
1186-
} else {
1192+
} else if (ZEND_NUM_ARGS() == 3) {
11871193
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Oss", &pgsql_link, pgsql_link_ce, &stmtname, &stmtname_len, &query, &query_len) == FAILURE) {
11881194
RETURN_THROWS();
11891195
}
11901196
link = Z_PGSQL_LINK_P(pgsql_link);
11911197
CHECK_PGSQL_LINK(link);
1198+
} else {
1199+
zend_wrong_parameters_count_error(2, 3);
1200+
RETURN_THROWS();
11921201
}
11931202

11941203
pgsql = link->conn;
@@ -1264,12 +1273,15 @@ PHP_FUNCTION(pg_execute)
12641273
}
12651274
link = FETCH_DEFAULT_LINK();
12661275
CHECK_DEFAULT_LINK(link);
1267-
} else {
1276+
} else if (ZEND_NUM_ARGS() == 3) {
12681277
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Osa", &pgsql_link, pgsql_link_ce, &stmtname, &stmtname_len, &pv_param_arr) == FAILURE) {
12691278
RETURN_THROWS();
12701279
}
12711280
link = Z_PGSQL_LINK_P(pgsql_link);
12721281
CHECK_PGSQL_LINK(link);
1282+
} else {
1283+
zend_wrong_parameters_count_error(2, 3);
1284+
RETURN_THROWS();
12731285
}
12741286

12751287
pgsql = link->conn;
@@ -2024,7 +2036,7 @@ static void php_pgsql_data_info(INTERNAL_FUNCTION_PARAMETERS, int entry_type, bo
20242036
Z_PARAM_OBJECT_OF_CLASS(result, pgsql_result_ce)
20252037
Z_PARAM_STR_OR_LONG(field_name, field_offset)
20262038
ZEND_PARSE_PARAMETERS_END();
2027-
} else {
2039+
} else if (ZEND_NUM_ARGS() == 3) {
20282040
ZEND_PARSE_PARAMETERS_START(3, 3)
20292041
Z_PARAM_OBJECT_OF_CLASS(result, pgsql_result_ce)
20302042
if (nullable_row) {
@@ -2034,6 +2046,9 @@ static void php_pgsql_data_info(INTERNAL_FUNCTION_PARAMETERS, int entry_type, bo
20342046
}
20352047
Z_PARAM_STR_OR_LONG(field_name, field_offset)
20362048
ZEND_PARSE_PARAMETERS_END();
2049+
} else {
2050+
zend_wrong_parameters_count_error(2, 3);
2051+
RETURN_THROWS();
20372052
}
20382053

20392054
pg_result = Z_PGSQL_RESULT_P(result);
@@ -2849,12 +2864,15 @@ PHP_FUNCTION(pg_set_error_verbosity)
28492864
}
28502865
link = FETCH_DEFAULT_LINK();
28512866
CHECK_DEFAULT_LINK(link);
2852-
} else {
2867+
} else if (ZEND_NUM_ARGS() == 2) {
28532868
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Ol", &pgsql_link, pgsql_link_ce, &verbosity) == FAILURE) {
28542869
RETURN_THROWS();
28552870
}
28562871
link = Z_PGSQL_LINK_P(pgsql_link);
28572872
CHECK_PGSQL_LINK(link);
2873+
} else {
2874+
zend_wrong_parameters_count_error(1, 2);
2875+
RETURN_THROWS();
28582876
}
28592877

28602878
pgsql = link->conn;
@@ -2907,12 +2925,15 @@ PHP_FUNCTION(pg_set_client_encoding)
29072925
}
29082926
link = FETCH_DEFAULT_LINK();
29092927
CHECK_DEFAULT_LINK(link);
2910-
} else {
2928+
} else if (ZEND_NUM_ARGS() == 2) {
29112929
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os", &pgsql_link, pgsql_link_ce, &encoding, &encoding_len) == FAILURE) {
29122930
RETURN_THROWS();
29132931
}
29142932
link = Z_PGSQL_LINK_P(pgsql_link);
29152933
CHECK_PGSQL_LINK(link);
2934+
} else {
2935+
zend_wrong_parameters_count_error(1, 2);
2936+
RETURN_THROWS();
29162937
}
29172938

29182939
pgsql = link->conn;
@@ -2996,12 +3017,15 @@ PHP_FUNCTION(pg_put_line)
29963017
}
29973018
link = FETCH_DEFAULT_LINK();
29983019
CHECK_DEFAULT_LINK(link);
2999-
} else {
3020+
} else if (ZEND_NUM_ARGS() == 2) {
30003021
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os", &pgsql_link, pgsql_link_ce, &query, &query_len) == FAILURE) {
30013022
RETURN_THROWS();
30023023
}
30033024
link = Z_PGSQL_LINK_P(pgsql_link);
30043025
CHECK_PGSQL_LINK(link);
3026+
} else {
3027+
zend_wrong_parameters_count_error(1, 2);
3028+
RETURN_THROWS();
30053029
}
30063030

30073031
pgsql = link->conn;

ext/pgsql/tests/gh17165.phpt

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
--TEST--
2+
Fix pg_query()/pg_query_params()/pg_prepare()/pg_execute()/pg_set_error_verbosity()/pg_set_client_encoding()/pg_put_line() pg field infos calls ArgumentCountError message.
3+
--EXTENSIONS--
4+
pgsql
5+
--SKIPIF--
6+
<?php
7+
include("skipif.inc");
8+
?>
9+
--FILE--
10+
<?php
11+
12+
13+
include "config.inc";
14+
15+
$db = pg_connect($conn_str);
16+
try {
17+
pg_query("a", "b", "c");
18+
} catch (ArgumentCountError $e) {
19+
echo $e->getMessage(), PHP_EOL;
20+
}
21+
22+
try {
23+
pg_query_params($db, "b", array(), "d");
24+
} catch (ArgumentCountError $e) {
25+
echo $e->getMessage(), PHP_EOL;
26+
}
27+
28+
try {
29+
pg_prepare($db, "a", "b", "c");
30+
} catch (ArgumentCountError $e) {
31+
echo $e->getMessage(), PHP_EOL;
32+
}
33+
34+
try {
35+
pg_set_error_verbosity($db, 0, PHP_INT_MAX);
36+
} catch (ArgumentCountError $e) {
37+
echo $e->getMessage(), PHP_EOL;
38+
}
39+
40+
try {
41+
pg_set_client_encoding($db, "foo", "bar");
42+
} catch (ArgumentCountError $e) {
43+
echo $e->getMessage(), PHP_EOL;
44+
}
45+
46+
try {
47+
pg_put_line($db, "my", "data");
48+
} catch (ArgumentCountError $e) {
49+
echo $e->getMessage(), PHP_EOL;
50+
}
51+
52+
try {
53+
pg_field_is_null($db, false, "myfield", new stdClass());
54+
} catch (ArgumentCountError $e) {
55+
echo $e->getMessage(), PHP_EOL;
56+
}
57+
?>
58+
--EXPECT--
59+
pg_query() expects at most 2 arguments, 3 given
60+
pg_query_params() expects at most 3 arguments, 4 given
61+
pg_prepare() expects at most 3 arguments, 4 given
62+
pg_set_error_verbosity() expects at most 2 arguments, 3 given
63+
pg_set_client_encoding() expects at most 2 arguments, 3 given
64+
pg_put_line() expects at most 2 arguments, 3 given
65+
pg_field_is_null() expects at most 3 arguments, 4 given

0 commit comments

Comments
 (0)