Skip to content

Commit 29ed278

Browse files
committed
mysqli: raise ValueError for invalid option in mysqli_options() respecting report_mode
1 parent 2db6e98 commit 29ed278

4 files changed

Lines changed: 6 additions & 18 deletions

File tree

ext/mysqli/mysqli_api.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1198,6 +1198,10 @@ PHP_FUNCTION(mysqli_options)
11981198
MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_INITIALIZED);
11991199

12001200
expected_type = mysqli_options_get_option_zval_type(mysql_option);
1201+
if (expected_type == IS_NULL) {
1202+
zend_value_error("Argument #1 ($option) is not a valid mysqli option");
1203+
RETURN_THROWS();
1204+
}
12011205
if (expected_type != Z_TYPE_P(mysql_value)) {
12021206
switch (expected_type) {
12031207
case IS_STRING:
@@ -1209,10 +1213,6 @@ PHP_FUNCTION(mysqli_options)
12091213
convert_to_long(mysql_value);
12101214
break;
12111215
default:
1212-
if (MyG(report_mode) & MYSQLI_REPORT_ERROR) {
1213-
zend_value_error("mysqli_options(): Invalid option %d", (int)mysql_option);
1214-
}
1215-
ret = 1;
12161216
break;
12171217
}
12181218
}

ext/mysqli/tests/gh20968.phpt

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,24 +12,15 @@ require_once 'skipifconnectfailure.inc';
1212
<?php
1313
require_once 'connect.inc';
1414

15-
$driver = new mysqli_driver();
16-
1715
$mysqli = new mysqli($host, $user, $passwd, $db, $port, $socket);
1816

19-
$driver->report_mode = MYSQLI_REPORT_OFF;
2017
$value = $mysqli->options(10, 'invalid_option');
2118

2219
var_dump($value);
2320

24-
$driver->report_mode = MYSQLI_REPORT_ALL;
25-
$value = $mysqli->options(10, 'invalid_option');
26-
var_dump($value);
27-
2821
?>
2922
--EXPECTF--
30-
bool(false)
31-
32-
Fatal error: Uncaught ValueError: mysqli_options(): Invalid option %d in %s:%d
23+
Fatal error: Uncaught ValueError: Argument #1 ($option) is not a valid mysqli option in %s:%d
3324
Stack trace:
3425
#0 %s(%d): mysqli->options(%d, 'invalid_option')
3526
#1 {main}

ext/mysqli/tests/mysqli_options.phpt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ var_dump("MYSQLI_OPT_LOCAL_INFILE", mysqli_options($link, MYSQLI_OPT_LOCAL_INFIL
6060
var_dump("MYSQLI_INIT_COMMAND", mysqli_options($link, MYSQLI_INIT_COMMAND, 'SET AUTOCOMMIT=0'));
6161

6262
/* mysqli_real_connect() */
63-
var_dump("MYSQLI_CLIENT_SSL", mysqli_options($link, MYSQLI_CLIENT_SSL, 'not a mysqli_option'));
63+
var_dump("MYSQLI_CLIENT_SSL");
6464

6565
mysqli_close($link);
6666

@@ -108,7 +108,6 @@ bool(true)
108108
%s(19) "MYSQLI_INIT_COMMAND"
109109
bool(true)
110110
%s(17) "MYSQLI_CLIENT_SSL"
111-
bool(false)
112111
Link closed
113112
mysqli object is already closed
114113
Unknown character set

ext/mysqli/tests/mysqli_set_opt.phpt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ require_once 'skipifconnectfailure.inc';
2424
var_dump(mysqli_set_opt($link, MYSQLI_OPT_CONNECT_TIMEOUT, 10));
2525
var_dump(mysqli_set_opt($link, MYSQLI_OPT_LOCAL_INFILE, 1));
2626
var_dump(mysqli_set_opt($link, MYSQLI_INIT_COMMAND, 'SET AUTOCOMMIT=0'));
27-
var_dump(mysqli_set_opt($link, MYSQLI_CLIENT_SSL, 'not an mysqli_option'));
2827

2928
mysqli_close($link);
3029

@@ -48,6 +47,5 @@ bool(true)
4847
bool(true)
4948
bool(true)
5049
bool(true)
51-
bool(false)
5250
mysqli object is already closed
5351
done!

0 commit comments

Comments
 (0)