From a4016991c4edd50ee8243f165f69d1d64beb5d50 Mon Sep 17 00:00:00 2001 From: arshidkv12 Date: Mon, 19 Jan 2026 08:35:44 +0530 Subject: [PATCH 01/10] Fix bug gh20968 --- ext/mysqli/mysqli_api.c | 6 +++++ ext/mysqli/tests/gh20968.phpt | 41 +++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 ext/mysqli/tests/gh20968.phpt diff --git a/ext/mysqli/mysqli_api.c b/ext/mysqli/mysqli_api.c index 1bf74dd77eeab..5c472b3b3608b 100644 --- a/ext/mysqli/mysqli_api.c +++ b/ext/mysqli/mysqli_api.c @@ -1209,6 +1209,9 @@ PHP_FUNCTION(mysqli_options) convert_to_long(mysql_value); break; default: + if (MyG(report_mode) & MYSQLI_REPORT_INDEX){ + zend_value_error("mysqli_options(): Invalid option %d", (int)mysql_option); + } break; } } @@ -1226,6 +1229,9 @@ PHP_FUNCTION(mysqli_options) break; default: ret = 1; + if (MyG(report_mode) & MYSQLI_REPORT_INDEX){ + zend_value_error("mysqli_options(): Invalid option %d", (int)mysql_option); + } break; } diff --git a/ext/mysqli/tests/gh20968.phpt b/ext/mysqli/tests/gh20968.phpt new file mode 100644 index 0000000000000..f8f689952c48d --- /dev/null +++ b/ext/mysqli/tests/gh20968.phpt @@ -0,0 +1,41 @@ +--TEST-- +Bug #20968 mysqli_options() with invalid option triggers ValueError +--EXTENSIONS-- +mysqli +--CONFLICTS-- +mysqli +--SKIPIF-- + +--FILE-- +report_mode = MYSQLI_REPORT_OFF; +$value = $mysqli->options(-1, 'invalid_option'); + +var_dump($value); + +$driver->report_mode = MYSQLI_REPORT_ALL; +$value = $mysqli->options(-1, 'invalid_option'); +var_dump($value); + +?> +--EXPECTF-- +bool(false) + +Fatal error: Uncaught ValueError: mysqli_options(): Invalid option %i in %s:%d +Stack trace: +#0 %s(%d): mysqli->options(%i, 'invalid_option') +#1 {main} + +Next ValueError: mysqli_options(): Invalid option %i in %s:%d +Stack trace: +#0 %s(%d): mysqli->options(%i, 'invalid_option') +#1 {main} + thrown in %s on line %d From 217b19b58c6c926b20e91050e94c5990f94abfff Mon Sep 17 00:00:00 2001 From: arshidkv12 Date: Mon, 19 Jan 2026 08:42:51 +0530 Subject: [PATCH 02/10] mysqli: raise ValueError for invalid option in mysqli_options() respecting report_mode --- ext/mysqli/mysqli_api.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ext/mysqli/mysqli_api.c b/ext/mysqli/mysqli_api.c index 5c472b3b3608b..ebda3cc457844 100644 --- a/ext/mysqli/mysqli_api.c +++ b/ext/mysqli/mysqli_api.c @@ -1209,7 +1209,7 @@ PHP_FUNCTION(mysqli_options) convert_to_long(mysql_value); break; default: - if (MyG(report_mode) & MYSQLI_REPORT_INDEX){ + if (MyG(report_mode) & MYSQLI_REPORT_ERROR){ zend_value_error("mysqli_options(): Invalid option %d", (int)mysql_option); } break; @@ -1229,7 +1229,7 @@ PHP_FUNCTION(mysqli_options) break; default: ret = 1; - if (MyG(report_mode) & MYSQLI_REPORT_INDEX){ + if (MyG(report_mode) & MYSQLI_REPORT_ERROR) { zend_value_error("mysqli_options(): Invalid option %d", (int)mysql_option); } break; From 66fbc0a9c66c2e2aeeae085566597e271c2c1311 Mon Sep 17 00:00:00 2001 From: arshidkv12 Date: Mon, 19 Jan 2026 08:52:21 +0530 Subject: [PATCH 03/10] mysqli: raise ValueError for invalid option in mysqli_options() respecting report_mode --- ext/mysqli/mysqli_api.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/mysqli/mysqli_api.c b/ext/mysqli/mysqli_api.c index ebda3cc457844..f6ea0c188c9a5 100644 --- a/ext/mysqli/mysqli_api.c +++ b/ext/mysqli/mysqli_api.c @@ -1229,7 +1229,7 @@ PHP_FUNCTION(mysqli_options) break; default: ret = 1; - if (MyG(report_mode) & MYSQLI_REPORT_ERROR) { + if (MyG(report_mode) & MYSQLI_REPORT_ERROR){ zend_value_error("mysqli_options(): Invalid option %d", (int)mysql_option); } break; From 54a8e06a44c413803a82fbdd21bf2f6e9e36c346 Mon Sep 17 00:00:00 2001 From: arshidkv12 Date: Mon, 19 Jan 2026 09:27:53 +0530 Subject: [PATCH 04/10] mysqli: raise ValueError for invalid option in mysqli_options() respecting report_mode --- ext/mysqli/tests/gh20968.phpt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ext/mysqli/tests/gh20968.phpt b/ext/mysqli/tests/gh20968.phpt index f8f689952c48d..89b63a097f69d 100644 --- a/ext/mysqli/tests/gh20968.phpt +++ b/ext/mysqli/tests/gh20968.phpt @@ -17,12 +17,12 @@ $driver = new mysqli_driver(); $mysqli = new mysqli($host, $user, $passwd, $db, $port, $socket); $driver->report_mode = MYSQLI_REPORT_OFF; -$value = $mysqli->options(-1, 'invalid_option'); +$value = $mysqli->options(10, 'invalid_option'); var_dump($value); $driver->report_mode = MYSQLI_REPORT_ALL; -$value = $mysqli->options(-1, 'invalid_option'); +$value = $mysqli->options(10, 'invalid_option'); var_dump($value); ?> From 0716f97a4fa0f77d28e8b3ec4da244127273ae95 Mon Sep 17 00:00:00 2001 From: arshidkv12 Date: Mon, 19 Jan 2026 09:35:46 +0530 Subject: [PATCH 05/10] mysqli: raise ValueError for invalid option in mysqli_options() respecting report_mode --- ext/mysqli/mysqli_api.c | 5 +---- ext/mysqli/tests/gh20968.phpt | 11 +++-------- 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/ext/mysqli/mysqli_api.c b/ext/mysqli/mysqli_api.c index f6ea0c188c9a5..e7615f4340de2 100644 --- a/ext/mysqli/mysqli_api.c +++ b/ext/mysqli/mysqli_api.c @@ -1228,10 +1228,7 @@ PHP_FUNCTION(mysqli_options) } break; default: - ret = 1; - if (MyG(report_mode) & MYSQLI_REPORT_ERROR){ - zend_value_error("mysqli_options(): Invalid option %d", (int)mysql_option); - } + ret = 1; break; } diff --git a/ext/mysqli/tests/gh20968.phpt b/ext/mysqli/tests/gh20968.phpt index 89b63a097f69d..755376a9c70c0 100644 --- a/ext/mysqli/tests/gh20968.phpt +++ b/ext/mysqli/tests/gh20968.phpt @@ -29,13 +29,8 @@ var_dump($value); --EXPECTF-- bool(false) -Fatal error: Uncaught ValueError: mysqli_options(): Invalid option %i in %s:%d +Fatal error: Uncaught ValueError: mysqli_options(): Invalid option %d in %s:%d Stack trace: -#0 %s(%d): mysqli->options(%i, 'invalid_option') +#0 %s(%d): mysqli->options(%d, 'invalid_option') #1 {main} - -Next ValueError: mysqli_options(): Invalid option %i in %s:%d -Stack trace: -#0 %s(%d): mysqli->options(%i, 'invalid_option') -#1 {main} - thrown in %s on line %d + thrown in %s on line %d \ No newline at end of file From d7dd9388117e34d315cfe6d77c35e28b8c8968f6 Mon Sep 17 00:00:00 2001 From: arshidkv12 Date: Mon, 19 Jan 2026 09:36:48 +0530 Subject: [PATCH 06/10] mysqli: raise ValueError for invalid option in mysqli_options() respecting report_mode --- ext/mysqli/mysqli_api.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/mysqli/mysqli_api.c b/ext/mysqli/mysqli_api.c index e7615f4340de2..d3c7cd527027e 100644 --- a/ext/mysqli/mysqli_api.c +++ b/ext/mysqli/mysqli_api.c @@ -1228,7 +1228,7 @@ PHP_FUNCTION(mysqli_options) } break; default: - ret = 1; + ret = 1; break; } From 1aa360ab8257c06b52b2b35a70a0fb8562c834d5 Mon Sep 17 00:00:00 2001 From: arshidkv12 Date: Mon, 19 Jan 2026 09:58:41 +0530 Subject: [PATCH 07/10] mysqli: raise ValueError for invalid option in mysqli_options() respecting report_mode --- ext/mysqli/tests/mysqli_options.phpt | 2 -- 1 file changed, 2 deletions(-) diff --git a/ext/mysqli/tests/mysqli_options.phpt b/ext/mysqli/tests/mysqli_options.phpt index 64e42dc752b1a..bc449cd877294 100644 --- a/ext/mysqli/tests/mysqli_options.phpt +++ b/ext/mysqli/tests/mysqli_options.phpt @@ -81,8 +81,6 @@ try { echo $e->getMessage() . "\n"; } -// invalid options do not generate errors -mysqli_options($link, -1, "Invalid option"); print "done!"; ?> From 04f8006a6a9e6156042ff94cc4f4434064d592b1 Mon Sep 17 00:00:00 2001 From: Arshid Date: Mon, 19 Jan 2026 21:33:06 +0530 Subject: [PATCH 08/10] Update ext/mysqli/mysqli_api.c Co-authored-by: Ilija Tovilo --- ext/mysqli/mysqli_api.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/mysqli/mysqli_api.c b/ext/mysqli/mysqli_api.c index d3c7cd527027e..f495197ed5c79 100644 --- a/ext/mysqli/mysqli_api.c +++ b/ext/mysqli/mysqli_api.c @@ -1209,7 +1209,7 @@ PHP_FUNCTION(mysqli_options) convert_to_long(mysql_value); break; default: - if (MyG(report_mode) & MYSQLI_REPORT_ERROR){ + if (MyG(report_mode) & MYSQLI_REPORT_ERROR) { zend_value_error("mysqli_options(): Invalid option %d", (int)mysql_option); } break; From 9ba4bf2959fb0254a1704262ea6463e7b7d78f56 Mon Sep 17 00:00:00 2001 From: Arshid Date: Mon, 19 Jan 2026 21:37:22 +0530 Subject: [PATCH 09/10] Update ext/mysqli/tests/gh20968.phpt Co-authored-by: Ilija Tovilo --- ext/mysqli/tests/gh20968.phpt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/mysqli/tests/gh20968.phpt b/ext/mysqli/tests/gh20968.phpt index 755376a9c70c0..60ab72872d73b 100644 --- a/ext/mysqli/tests/gh20968.phpt +++ b/ext/mysqli/tests/gh20968.phpt @@ -33,4 +33,4 @@ Fatal error: Uncaught ValueError: mysqli_options(): Invalid option %d in %s:%d Stack trace: #0 %s(%d): mysqli->options(%d, 'invalid_option') #1 {main} - thrown in %s on line %d \ No newline at end of file + thrown in %s on line %d From 2db6e98f8125b2cfecbccde29cff374b1195aff9 Mon Sep 17 00:00:00 2001 From: arshidkv12 Date: Mon, 19 Jan 2026 21:40:19 +0530 Subject: [PATCH 10/10] mysqli: raise ValueError for invalid option in mysqli_options() respecting report_mode --- ext/mysqli/mysqli_api.c | 1 + 1 file changed, 1 insertion(+) diff --git a/ext/mysqli/mysqli_api.c b/ext/mysqli/mysqli_api.c index f495197ed5c79..177dd9b176e64 100644 --- a/ext/mysqli/mysqli_api.c +++ b/ext/mysqli/mysqli_api.c @@ -1212,6 +1212,7 @@ PHP_FUNCTION(mysqli_options) if (MyG(report_mode) & MYSQLI_REPORT_ERROR) { zend_value_error("mysqli_options(): Invalid option %d", (int)mysql_option); } + ret = 1; break; } }