From 4126ab6b80bf201eb7cc67bf4cd242052869708b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20Martinovi=C4=87?= Date: Fri, 26 Dec 2014 14:14:14 +0100 Subject: [PATCH 1/2] Prevent special characters finding their way into layout handle due to SKU being used. This avoids page cache issue when Varnish tries to retrieve ESI with invalid URL on product page. --- app/code/Magento/Catalog/Helper/Product/View.php | 8 +++++--- app/code/Magento/Review/Controller/Product/ListAction.php | 4 +++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/app/code/Magento/Catalog/Helper/Product/View.php b/app/code/Magento/Catalog/Helper/Product/View.php index 1973e8fbf0951..8b38045df59d6 100644 --- a/app/code/Magento/Catalog/Helper/Product/View.php +++ b/app/code/Magento/Catalog/Helper/Product/View.php @@ -116,24 +116,26 @@ public function initProductLayout(ResultPage $resultPage, $product, $params = nu $pageConfig->setPageLayout($settings->getPageLayout()); } + $urlSafeSku = rawurlencode($product->getSku()); + // Load default page handles and page configurations if ($params && $params->getBeforeHandles()) { foreach ($params->getBeforeHandles() as $handle) { $resultPage->addPageLayoutHandles( - ['id' => $product->getId(), 'sku' => $product->getSku(), 'type' => $product->getTypeId()], + ['id' => $product->getId(), 'sku' => $urlSafeSku, 'type' => $product->getTypeId()], $handle ); } } $resultPage->addPageLayoutHandles( - ['id' => $product->getId(), 'sku' => $product->getSku(), 'type' => $product->getTypeId()] + ['id' => $product->getId(), 'sku' => $urlSafeSku, 'type' => $product->getTypeId()] ); if ($params && $params->getAfterHandles()) { foreach ($params->getAfterHandles() as $handle) { $resultPage->addPageLayoutHandles( - ['id' => $product->getId(), 'sku' => $product->getSku(), 'type' => $product->getTypeId()], + ['id' => $product->getId(), 'sku' => $urlSafeSku, 'type' => $product->getTypeId()], $handle ); } diff --git a/app/code/Magento/Review/Controller/Product/ListAction.php b/app/code/Magento/Review/Controller/Product/ListAction.php index 9669b04f91c7c..9774547e52779 100644 --- a/app/code/Magento/Review/Controller/Product/ListAction.php +++ b/app/code/Magento/Review/Controller/Product/ListAction.php @@ -25,8 +25,10 @@ protected function _initProductLayout($product) $pageConfig->setPageLayout($product->getPageLayout()); } $update = $this->_view->getLayout()->getUpdate(); + + $urlSafeSku = rawurlencode($product->getSku()); $this->_view->addPageLayoutHandles( - ['id' => $product->getId(), 'sku' => $product->getSku(), 'type' => $product->getTypeId()] + ['id' => $product->getId(), 'sku' => $urlSafeSku, 'type' => $product->getTypeId()] ); $this->_view->loadLayoutUpdates(); From f62fc68df4ef0e2357c07b8593112127b53f8043 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20Martinovi=C4=87?= Date: Mon, 29 Dec 2014 14:49:30 +0100 Subject: [PATCH 2/2] Revert current implementation for addressing Varnish/ESI special chars in layout handles issue. --- .../PageCache/Model/Observer/ProcessLayoutRenderElement.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/PageCache/Model/Observer/ProcessLayoutRenderElement.php b/app/code/Magento/PageCache/Model/Observer/ProcessLayoutRenderElement.php index fd266341f782b..159afc6e90ed4 100644 --- a/app/code/Magento/PageCache/Model/Observer/ProcessLayoutRenderElement.php +++ b/app/code/Magento/PageCache/Model/Observer/ProcessLayoutRenderElement.php @@ -37,7 +37,7 @@ protected function _wrapEsi( 'page_cache/block/esi', [ 'blocks' => json_encode([$block->getNameInLayout()]), - 'handles' => urlencode(json_encode($layout->getUpdate()->getHandles())) + 'handles' => json_encode($layout->getUpdate()->getHandles()) ] ); return sprintf('', $url);