Skip to content

Commit

Permalink
Merge branch 'PHP-8.2'
Browse files Browse the repository at this point in the history
* PHP-8.2:
  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)
  • Loading branch information
kamil-tekiela committed Oct 27, 2022
2 parents a123ce9 + 646b8f6 commit cd8beb8
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 2 deletions.
3 changes: 1 addition & 2 deletions ext/mysqli/mysqli_nonapi.c
Expand Up @@ -620,8 +620,7 @@ PHP_FUNCTION(mysqli_query)
break;
}
if (!result) {
php_mysqli_throw_sql_exception((char *)mysql_sqlstate(mysql->mysql), mysql_errno(mysql->mysql),
"%s", mysql_error(mysql->mysql));
MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);
RETURN_FALSE;
}

Expand Down
79 changes: 79 additions & 0 deletions ext/mysqli/tests/gh9841.phpt
@@ -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!
1 change: 1 addition & 0 deletions ext/mysqlnd/mysqlnd_wireprotocol.c
Expand Up @@ -301,6 +301,7 @@ mysqlnd_read_packet_header_and_body(MYSQLND_PACKET_HEADER * packet_header,
if (buf_size < packet_header->size) {
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);
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);
}
if (FAIL == pfc->data->m.receive(pfc, vio, buf, packet_header->size, stats, error_info)) {
Expand Down

0 comments on commit cd8beb8

Please sign in to comment.