bug #22079 [HttpKernel] Fixed bug with purging of HTTPS URLs (ausi)
This PR was squashed before being merged into the 2.7 branch (closes #22079).
Discussion
----------
[HttpKernel] Fixed bug with purging of HTTPS URLs
| Q | A
| ------------- | ---
| Branch? | 2.7
| Bug fix? | yes
| New feature? | no
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets |
| License | MIT
| Doc PR |
I found two bugs in `HttpCache\Store::purge()` with HTTPS URLs:
1. `->purge('https://example.com/')` only purges the `http` version not the `https` one.
2. If a cache entry exists for both `http` and `https`, only the `http` version gets purged, the `https` version stays in the cache.
I think this issues were introduced with #21582.
This pull request fixes both issues and adds tests for them.
Commits
-------
f50915066f
[HttpKernel] Fixed bug with purging of HTTPS URLs
This commit is contained in:
commit
35e66ae0a9
@ -325,10 +325,13 @@ class Store implements StoreInterface
|
|||||||
*/
|
*/
|
||||||
public function purge($url)
|
public function purge($url)
|
||||||
{
|
{
|
||||||
$http = preg_replace('#^https#', 'http', $url);
|
$http = preg_replace('#^https:#', 'http:', $url);
|
||||||
$https = preg_replace('#^http#', 'https', $url);
|
$https = preg_replace('#^http:#', 'https:', $url);
|
||||||
|
|
||||||
return $this->doPurge($http) || $this->doPurge($https);
|
$purgedHttp = $this->doPurge($http);
|
||||||
|
$purgedHttps = $this->doPurge($https);
|
||||||
|
|
||||||
|
return $purgedHttp || $purgedHttps;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -236,6 +236,33 @@ class StoreTest extends TestCase
|
|||||||
$this->assertFalse($this->store->isLocked($req));
|
$this->assertFalse($this->store->isLocked($req));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testPurgeHttps()
|
||||||
|
{
|
||||||
|
$request = Request::create('https://example.com/foo');
|
||||||
|
$this->store->write($request, new Response('foo'));
|
||||||
|
|
||||||
|
$this->assertNotEmpty($this->getStoreMetadata($request));
|
||||||
|
|
||||||
|
$this->assertTrue($this->store->purge('https://example.com/foo'));
|
||||||
|
$this->assertEmpty($this->getStoreMetadata($request));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testPurgeHttpAndHttps()
|
||||||
|
{
|
||||||
|
$requestHttp = Request::create('https://example.com/foo');
|
||||||
|
$this->store->write($requestHttp, new Response('foo'));
|
||||||
|
|
||||||
|
$requestHttps = Request::create('http://example.com/foo');
|
||||||
|
$this->store->write($requestHttps, new Response('foo'));
|
||||||
|
|
||||||
|
$this->assertNotEmpty($this->getStoreMetadata($requestHttp));
|
||||||
|
$this->assertNotEmpty($this->getStoreMetadata($requestHttps));
|
||||||
|
|
||||||
|
$this->assertTrue($this->store->purge('http://example.com/foo'));
|
||||||
|
$this->assertEmpty($this->getStoreMetadata($requestHttp));
|
||||||
|
$this->assertEmpty($this->getStoreMetadata($requestHttps));
|
||||||
|
}
|
||||||
|
|
||||||
protected function storeSimpleEntry($path = null, $headers = array())
|
protected function storeSimpleEntry($path = null, $headers = array())
|
||||||
{
|
{
|
||||||
if (null === $path) {
|
if (null === $path) {
|
||||||
|
Reference in New Issue
Block a user