MDL-73588 curl: Fix expected CURLOPT_FILE behavior

After cbf9dfb the CURLOPT_FILE no longer behaves as expected. All
redirect responses are appended to the same stream resource.  This fix
reverts back to the old behavior by setting the stream pointer back to
the beginning for each subsequent redirect.
This commit is contained in:
Frode Petterson
2022-01-27 12:18:26 +01:00
committed by Eloy Lafuente (stronk7)
parent 996bea908e
commit 1a03e46f96
2 changed files with 41 additions and 0 deletions
+31
View File
@@ -145,6 +145,9 @@ class core_filelib_testcase extends advanced_testcase {
$contents = download_file_content("$testurl?redir=2");
$this->assertSame('done', $contents);
$contents = download_file_content("$testurl?redir=2&verbose=1");
$this->assertSame('done', $contents);
$response = download_file_content("$testurl?redir=2", null, null, true);
$this->assertInstanceOf('stdClass', $response);
$this->assertSame('200', $response->status);
@@ -153,6 +156,14 @@ class core_filelib_testcase extends advanced_testcase {
$this->assertSame('done', $response->results);
$this->assertSame('', $response->error);
$response = download_file_content("$testurl?redir=2&verbose=1", null, null, true);
$this->assertInstanceOf('stdClass', $response);
$this->assertSame('200', $response->status);
$this->assertTrue(is_array($response->headers));
$this->assertMatchesRegularExpression('|^HTTP/1\.[01] 200 OK$|', rtrim($response->response_code));
$this->assertSame('done', $response->results);
$this->assertSame('', $response->error);
// Commented out this block if there are performance problems.
/*
$contents = download_file_content("$testurl?redir=6");
@@ -327,6 +338,17 @@ class core_filelib_testcase extends advanced_testcase {
$this->assertSame('done', file_get_contents($tofile));
@unlink($tofile);
$curl = new curl();
$tofile = "$CFG->tempdir/test.html";
@unlink($tofile);
$fp = fopen($tofile, 'w');
$result = $curl->get("$testurl?redir=1&verbose=1", array(), array('CURLOPT_FILE' => $fp));
$this->assertTrue($result);
fclose($fp);
$this->assertFileExists($tofile);
$this->assertSame('done', file_get_contents($tofile));
@unlink($tofile);
$curl = new curl();
$tofile = "$CFG->tempdir/test.html";
@unlink($tofile);
@@ -335,6 +357,15 @@ class core_filelib_testcase extends advanced_testcase {
$this->assertFileExists($tofile);
$this->assertSame('done', file_get_contents($tofile));
@unlink($tofile);
$curl = new curl();
$tofile = "$CFG->tempdir/test.html";
@unlink($tofile);
$result = $curl->download_one("$testurl?redir=1&verbose=1", array(), array('filepath' => $tofile));
$this->assertTrue($result);
$this->assertFileExists($tofile);
$this->assertSame('done', file_get_contents($tofile));
@unlink($tofile);
}
/**