Merge branch 'PHP-8.0' into PHP-8.1

* PHP-8.0:
  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)
This commit is contained in:
Kamil Tekiela 2022-10-27 18:30:45 +01:00
commit ec1f58c871
No known key found for this signature in database
GPG key ID: 0760BDAB1E89A1E3
4 changed files with 82 additions and 2 deletions

View file

@ -1000,6 +1000,7 @@ PHP_METHOD(mysqli_result, __construct)
} }
if (!result) { if (!result) {
MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);
RETURN_FALSE; RETURN_FALSE;
} }

View file

@ -744,8 +744,7 @@ PHP_FUNCTION(mysqli_query)
break; break;
} }
if (!result) { if (!result) {
php_mysqli_throw_sql_exception((char *)mysql_sqlstate(mysql->mysql), mysql_errno(mysql->mysql), MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);
"%s", mysql_error(mysql->mysql));
RETURN_FALSE; RETURN_FALSE;
} }

View file

@ -0,0 +1,79 @@
--TEST--
Bug GH-9841 (mysqli_query throws warning despite using silenced error mode)
--EXTENSIONS--
mysqli
--SKIPIF--
<?php
require_once 'skipifconnectfailure.inc';
?>
--FILE--
<?php
require_once 'connect.inc';
mysqli_report(MYSQLI_REPORT_OFF);
$mysqli = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
$mysqli->query("SELECT (
SELECT 1 AS val
UNION ALL
SELECT 2
) FROM dual");
$mysqli->query("SELECT (
SELECT 1 AS val
UNION ALL
SELECT 2
) FROM dual", MYSQLI_ASYNC);
$mysqli->reap_async_query();
$mysqli->real_query("SELECT (
SELECT 1 AS val
UNION ALL
SELECT 2
) FROM dual");
$result = new mysqli_result($mysqli);
// now make sure the errors are thrown when not using silent mode
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
try {
$mysqli->query("SELECT (
SELECT 1 AS val
UNION ALL
SELECT 2
) FROM dual");
} catch (mysqli_sql_exception $e) {
echo $e->getMessage()."\n";
}
$mysqli->query("SELECT (
SELECT 1 AS val
UNION ALL
SELECT 2
) FROM dual", MYSQLI_ASYNC);
try {
$mysqli->reap_async_query();
} catch (mysqli_sql_exception $e) {
echo $e->getMessage()."\n";
}
$mysqli->real_query("SELECT (
SELECT 1 AS val
UNION ALL
SELECT 2
) FROM dual");
try {
$result = new mysqli_result($mysqli);
} catch (mysqli_sql_exception $e) {
echo $e->getMessage()."\n";
}
print "done!";
?>
--EXPECTF--
Subquery returns more than 1 row
Subquery returns more than 1 row
Subquery returns more than 1 row
done!

View file

@ -301,6 +301,7 @@ mysqlnd_read_packet_header_and_body(MYSQLND_PACKET_HEADER * packet_header,
if (buf_size < packet_header->size) { if (buf_size < packet_header->size) {
DBG_ERR_FMT("Packet buffer %zu wasn't big enough %zu, %zu bytes will be unread", DBG_ERR_FMT("Packet buffer %zu wasn't big enough %zu, %zu bytes will be unread",
buf_size, packet_header->size, packet_header->size - buf_size); buf_size, packet_header->size, packet_header->size - buf_size);
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");
DBG_RETURN(FAIL); DBG_RETURN(FAIL);
} }
if (FAIL == pfc->data->m.receive(pfc, vio, buf, packet_header->size, stats, error_info)) { if (FAIL == pfc->data->m.receive(pfc, vio, buf, packet_header->size, stats, error_info)) {