Skip to content

Commit 646b8f6

Browse files
committed
Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1: Add NEWS entry for #9841 Add a temporary fix for insufficient buffer size in mysqlnd (#9835) mysqli_query throws warning despite using silenced error mode (#9842)
2 parents a27ae67 + ec1f58c commit 646b8f6

File tree

3 files changed

+81
-2
lines changed

3 files changed

+81
-2
lines changed

ext/mysqli/mysqli_nonapi.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -620,8 +620,7 @@ PHP_FUNCTION(mysqli_query)
620620
break;
621621
}
622622
if (!result) {
623-
php_mysqli_throw_sql_exception((char *)mysql_sqlstate(mysql->mysql), mysql_errno(mysql->mysql),
624-
"%s", mysql_error(mysql->mysql));
623+
MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);
625624
RETURN_FALSE;
626625
}
627626

ext/mysqli/tests/gh9841.phpt

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
--TEST--
2+
Bug GH-9841 (mysqli_query throws warning despite using silenced error mode)
3+
--EXTENSIONS--
4+
mysqli
5+
--SKIPIF--
6+
<?php
7+
require_once 'skipifconnectfailure.inc';
8+
?>
9+
--FILE--
10+
<?php
11+
12+
require_once 'connect.inc';
13+
14+
mysqli_report(MYSQLI_REPORT_OFF);
15+
16+
$mysqli = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
17+
18+
$mysqli->query("SELECT (
19+
SELECT 1 AS val
20+
UNION ALL
21+
SELECT 2
22+
) FROM dual");
23+
24+
$mysqli->query("SELECT (
25+
SELECT 1 AS val
26+
UNION ALL
27+
SELECT 2
28+
) FROM dual", MYSQLI_ASYNC);
29+
$mysqli->reap_async_query();
30+
31+
$mysqli->real_query("SELECT (
32+
SELECT 1 AS val
33+
UNION ALL
34+
SELECT 2
35+
) FROM dual");
36+
$result = new mysqli_result($mysqli);
37+
38+
// now make sure the errors are thrown when not using silent mode
39+
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
40+
41+
try {
42+
$mysqli->query("SELECT (
43+
SELECT 1 AS val
44+
UNION ALL
45+
SELECT 2
46+
) FROM dual");
47+
} catch (mysqli_sql_exception $e) {
48+
echo $e->getMessage()."\n";
49+
}
50+
51+
$mysqli->query("SELECT (
52+
SELECT 1 AS val
53+
UNION ALL
54+
SELECT 2
55+
) FROM dual", MYSQLI_ASYNC);
56+
try {
57+
$mysqli->reap_async_query();
58+
} catch (mysqli_sql_exception $e) {
59+
echo $e->getMessage()."\n";
60+
}
61+
62+
$mysqli->real_query("SELECT (
63+
SELECT 1 AS val
64+
UNION ALL
65+
SELECT 2
66+
) FROM dual");
67+
try {
68+
$result = new mysqli_result($mysqli);
69+
} catch (mysqli_sql_exception $e) {
70+
echo $e->getMessage()."\n";
71+
}
72+
73+
print "done!";
74+
?>
75+
--EXPECTF--
76+
Subquery returns more than 1 row
77+
Subquery returns more than 1 row
78+
Subquery returns more than 1 row
79+
done!

ext/mysqlnd/mysqlnd_wireprotocol.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,7 @@ mysqlnd_read_packet_header_and_body(MYSQLND_PACKET_HEADER * packet_header,
301301
if (buf_size < packet_header->size) {
302302
DBG_ERR_FMT("Packet buffer %zu wasn't big enough %zu, %zu bytes will be unread",
303303
buf_size, packet_header->size, packet_header->size - buf_size);
304+
SET_CLIENT_ERROR(error_info, CR_INVALID_BUFFER_USE, UNKNOWN_SQLSTATE, "Packet buffer wasn't big enough; as a workaround consider increasing value of net_cmd_buffer_size");
304305
DBG_RETURN(FAIL);
305306
}
306307
if (FAIL == pfc->data->m.receive(pfc, vio, buf, packet_header->size, stats, error_info)) {

0 commit comments

Comments
 (0)