Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Curl/Fsockopen: add some extra defensive coding
The `error_get_last()` function can return `null` if no error occurred, in which case, the `throw new Exception()` statement will run into two new errors:
* `Trying to access array offset on value of type null` for accessing `$error['message']`.
* ... which then leads to a `Exception::__construct(): Passing null to parameter #1 ($message) of type string is deprecated`.

This commit adds some defensive coding to handle the hypothetical situation that `error_get_last()` would return `null` when a file could not be opened.

Note: this is actually a bug in PHPUnit 10 which breaks `error_get_last()`.
We should be able to remove the extra defensive coding once the upstream bug has been fixed.

Upstream bug report: sebastianbergmann/phpunit#5428
  • Loading branch information
jrfnl committed Jun 26, 2023
commit 5bbef6dc6d3029722af738a4876b0daec7ac96db
5 changes: 5 additions & 0 deletions src/Transport/Curl.php
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,11 @@ public function request($url, $headers = [], $data = [], $options = []) {
$this->stream_handle = @fopen($options['filename'], 'wb');
if ($this->stream_handle === false) {
$error = error_get_last();
if (!is_array($error)) {
// Shouldn't be possible, but can happen in test situations.
$error = ['message' => 'Failed to open stream'];
}

throw new Exception($error['message'], 'fopen');
}
}
Expand Down
5 changes: 5 additions & 0 deletions src/Transport/Fsockopen.php
Original file line number Diff line number Diff line change
Expand Up @@ -282,6 +282,11 @@ public function request($url, $headers = [], $data = [], $options = []) {
$download = @fopen($options['filename'], 'wb');
if ($download === false) {
$error = error_get_last();
if (!is_array($error)) {
// Shouldn't be possible, but can happen in test situations.
$error = ['message' => 'Failed to open stream'];
}

throw new Exception($error['message'], 'fopen');
}
}
Expand Down