Commit a846204d45a for php.net
commit a846204d45ae69d5e8ee2ed9f1e7fd3e103f5cb8
Author: Weilin Du <weilindu@php.net>
Date: Tue Aug 18 01:27:34 2026 +0800
CI: fix flacky ext/mysqli/tests/protocol_stmt_row_fetch_data.phpt (#23330)
The package got mixed together some time.
diff --git a/ext/mysqli/tests/fake_server.inc b/ext/mysqli/tests/fake_server.inc
index d6afbb04977..dad8bc52ddd 100644
--- a/ext/mysqli/tests/fake_server.inc
+++ b/ext/mysqli/tests/fake_server.inc
@@ -560,6 +560,32 @@ class my_mysqli_fake_server_conn
}
}
+ private function read_bytes(int $length): string
+ {
+ $data = '';
+ while (strlen($data) < $length) {
+ $chunk = fread($this->conn, $length - strlen($data));
+ if ($chunk === false || $chunk === '') {
+ throw new RuntimeException("Failed to read $length bytes from the client");
+ }
+ $data .= $chunk;
+ }
+ return $data;
+ }
+
+ public function read_packets(int $packet_count): void
+ {
+ $data = '';
+ for ($i = 0; $i < $packet_count; $i++) {
+ $header = $this->read_bytes(4);
+ $packet_length = ord($header[0])
+ | (ord($header[1]) << 8)
+ | (ord($header[2]) << 16);
+ $data .= $header . $this->read_bytes($packet_length);
+ }
+ fprintf(STDERR, "[*] Received: %s\n", bin2hex($data));
+ }
+
public function close()
{
fclose($this->conn);
@@ -732,7 +758,7 @@ function my_mysqli_test_stmt_response_row_over_read_two_fields(
$conn->packets_to_bytes($rh),
"Malicious Stmt Response for data $field_name [Extract heap through buffer over-read]"
);
- $conn->read(65536);
+ $conn->read_packets(2);
}
function my_mysqli_test_stmt_response_row_over_read_int(my_mysqli_fake_server_conn $conn): void
@@ -778,15 +804,15 @@ function my_mysqli_test_stmt_response_row_over_read_bit(my_mysqli_fake_server_co
function my_mysqli_test_stmt_response_row_read_two_fields(my_mysqli_fake_server_conn $conn): void
{
$conn->send_server_greetings();
- $conn->read();
+ $conn->read_packets(1);
$conn->send_server_ok();
- $conn->read();
+ $conn->read_packets(1);
$field_names = array_keys(my_mysqli_data_fields());
foreach ($field_names as $field_name) {
$conn->send_server_stmt_prepare_data_response($field_name);
- $conn->read(65536);
+ $conn->read_packets(1);
$conn->send_server_stmt_execute_data_response($field_name);
- $conn->read(65536);
+ $conn->read_packets(2);
}
}