magento2: Latest laminas/laminas-escaper (2.7.0 -> 2.7.1) breaks product and catalog category view pages
Preconditions (*)
Install 2.4.2-p1 or run composer-update on an existing install that hasn’t been run in hours since 2.7.1 was release.
Steps to reproduce (*)
View any page with callout for
<?= $block->getReviewsSummaryHtml($_product, $templateType) ?>
Might be more widespread than this, but this is how I noticed it.
Happened on a client’s instance, thought it might be related to one of their many 3rd party extensions. Quickly installed a blank 2.4.2-p1 instance w/sample data. Saw the result
Expected result (*)
Page loads
Actual result (*)

Partial page load with stack trace output
TypeError: rawurlencode() expects parameter 1 to be string, bool given in /shared/httpd/242test/htdocs/vendor/laminas/laminas-escaper/src/Escaper.php:246 Stack trace: #0 /shared/httpd/242test/htdocs/vendor/laminas/laminas-escaper/src/Escaper.php(246): rawurlencode(true) #1 /shared/httpd/242test/htdocs/vendor/magento/framework/Escaper.php(286): Laminas\Escaper\Escaper->escapeUrl(true) #2 /shared/httpd/242test/htdocs/vendor/magento/framework/Url/RouteParamsResolver.php(115): Magento\Framework\Escaper->encodeUrlParam(true) #3 /shared/httpd/242test/htdocs/vendor/magento/framework/Interception/Interceptor.php(58): Magento\Framework\Url\RouteParamsResolver->setRouteParams(Array, false) #4 /shared/httpd/242test/htdocs/vendor/magento/framework/Interception/Interceptor.php(138): Magento\Framework\Url\RouteParamsResolver\Interceptor->___callParent('setRouteParams', Array) #5 /shared/httpd/242test/htdocs/vendor/magento/framework/Interception/Interceptor.php(153): Magento\Framework\Url\RouteParamsResolver\Interceptor->Magento\Framework\Interception\{closure}(Array, false) #6 /shared/httpd/242test/htdocs/generated/code/Magento/Framework/Url/RouteParamsResolver/Interceptor.php(23): Magento\Framework\Url\RouteParamsResolver\Interceptor->___callPlugins('setRouteParams', Array, Array) #7 /shared/httpd/242test/htdocs/vendor/magento/framework/Url.php(716): Magento\Framework\Url\RouteParamsResolver\Interceptor->setRouteParams(Array, false) #8 /shared/httpd/242test/htdocs/vendor/magento/framework/Url.php(747): Magento\Framework\Url->_setRouteParams(Array, false) #9 /shared/httpd/242test/htdocs/vendor/magento/framework/Url.php(929): Magento\Framework\Url->getRouteUrl('', Array) #10 /shared/httpd/242test/htdocs/vendor/magento/framework/Url.php(873): Magento\Framework\Url->createUrl('', Array) #11 /shared/httpd/242test/htdocs/vendor/magento/module-catalog/Model/Product/Url.php(199): Magento\Framework\Url->getUrl('', Array) #12 /shared/httpd/242test/htdocs/vendor/magento/module-review/Block/Product/ReviewRenderer.php(149): Magento\Catalog\Model\Product\Url->getUrl(Object(Magento\Catalog\Model\Product\Interceptor), Array) #13 /shared/httpd/242test/htdocs/generated/code/Magento/Review/Block/Product/ReviewRenderer/Interceptor.php(59): Magento\Review\Block\Product\ReviewRenderer->getReviewsUrl(false) #14 /shared/httpd/242test/htdocs/vendor/magento/module-review/view/frontend/templates/helper/summary.phtml(12): Magento\Review\Block\Product\ReviewRenderer\Interceptor->getReviewsUrl() #15 /shared/httpd/242test/htdocs/vendor/magento/framework/View/TemplateEngine/Php.php(71): include('/shared/httpd/2...') #16 /shared/httpd/242test/htdocs/vendor/magento/framework/View/Element/Template.php(273): Magento\Framework\View\TemplateEngine\Php->render(Object(Magento\Review\Block\Product\ReviewRenderer\Interceptor), '/shared/httpd/2...', Array) #17 /shared/httpd/242test/htdocs/generated/code/Magento/Review/Block/Product/ReviewRenderer/Interceptor.php(122): Magento\Framework\View\Element\Template->fetchView('/shared/httpd/2...') #18 /shared/httpd/242test/htdocs/vendor/magento/framework/View/Element/Template.php(303): Magento\Review\Block\Product\ReviewRenderer\Interceptor->fetchView('/shared/httpd/2...') #19 /shared/httpd/242test/htdocs/vendor/magento/framework/View/Element/AbstractBlock.php(1111): Magento\Framework\View\Element\Template->_toHtml() #20 /shared/httpd/242test/htdocs/vendor/magento/framework/View/Element/AbstractBlock.php(1115): Magento\Framework\View\Element\AbstractBlock->Magento\Framework\View\Element\{closure}() #21 /shared/httpd/242test/htdocs/vendor/magento/framework/View/Element/AbstractBlock.php(675): Magento\Framework\View\Element\AbstractBlock->_loadCache() #22 /shared/httpd/242test/htdocs/generated/code/Magento/Review/Block/Product/ReviewRenderer/Interceptor.php(347): Magento\Framework\View\Element\AbstractBlock->toHtml() #23 /shared/httpd/242test/htdocs/vendor/magento/module-review/Block/Product/ReviewRenderer.php(111): Magento\Review\Block\Product\ReviewRenderer\Interceptor->toHtml() #24 /shared/httpd/242test/htdocs/vendor/magento/framework/Interception/Interceptor.php(58): Magento\Review\Block\Product\ReviewRenderer->getReviewsSummaryHtml(Object(Magento\Catalog\Model\Product\Interceptor), 'default', true) #25 /shared/httpd/242test/htdocs/vendor/magento/framework/Interception/Interceptor.php(138): Magento\Review\Block\Product\ReviewRenderer\Interceptor->___callParent('getReviewsSumma...', Array) #26 /shared/httpd/242test/htdocs/vendor/yotpo/magento2-module-yotpo-reviews/Plugin/Review/Block/Product/ReviewRenderer.php(32): Magento\Review\Block\Product\ReviewRenderer\Interceptor->Magento\Framework\Interception\{closure}(Object(Magento\Catalog\Model\Product\Interceptor), false, true) #27 /shared/httpd/242test/htdocs/vendor/magento/framework/Interception/Interceptor.php(135): Yotpo\Yotpo\Plugin\Review\Block\Product\ReviewRenderer->aroundGetReviewsSummaryHtml(Object(Magento\Review\Block\Product\ReviewRenderer\Interceptor), Object(Closure), Object(Magento\Catalog\Model\Product\Interceptor), false, true) #28 /shared/httpd/242test/htdocs/vendor/magento/framework/Interception/Interceptor.php(153): Magento\Review\Block\Product\ReviewRenderer\Interceptor->Magento\Framework\Interception\{closure}(Object(Magento\Catalog\Model\Product\Interceptor), false, true) #29 /shared/httpd/242test/htdocs/generated/code/Magento/Review/Block/Product/ReviewRenderer/Interceptor.php(32): Magento\Review\Block\Product\ReviewRenderer\Interceptor->___callPlugins('getReviewsSumma...', Array, NULL) #30 /shared/httpd/242test/htdocs/vendor/magento/module-catalog/Block/Product/AbstractProduct.php(221): Magento\Review\Block\Product\ReviewRenderer\Interceptor->getReviewsSummaryHtml(Object(Magento\Catalog\Model\Product\Interceptor), false, true) #31 /shared/httpd/242test/htdocs/generated/code/Magento/Catalog/Block/Product/View/Interceptor.php(176): Magento\Catalog\Block\Product\AbstractProduct->getReviewsSummaryHtml(Object(Magento\Catalog\Model\Product\Interceptor), false, true) #32 /shared/httpd/242test/htdocs/vendor/magento/module-catalog/view/frontend/templates/product/view/review.phtml(8): Magento\Catalog\Block\Product\View\Interceptor->getReviewsSummaryHtml(Object(Magento\Catalog\Model\Product\Interceptor), false, true) #33 /shared/httpd/242test/htdocs/vendor/magento/framework/View/TemplateEngine/Php.php(71): include('/shared/httpd/2...') #34 /shared/httpd/242test/htdocs/vendor/magento/framework/View/Element/Template.php(273): Magento\Framework\View\TemplateEngine\Php->render(Object(Magento\Catalog\Block\Product\View\Interceptor), '/shared/httpd/2...', Array) #35 /shared/httpd/242test/htdocs/generated/code/Magento/Catalog/Block/Product/View/Interceptor.php(383): Magento\Framework\View\Element\Template->fetchView('/shared/httpd/2...') #36 /shared/httpd/242test/htdocs/vendor/magento/framework/View/Element/Template.php(303): Magento\Catalog\Block\Product\View\Interceptor->fetchView('/shared/httpd/2...') #37 /shared/httpd/242test/htdocs/vendor/magento/framework/View/Element/AbstractBlock.php(1111): Magento\Framework\View\Element\Template->_toHtml() #38 /shared/httpd/242test/htdocs/vendor/magento/framework/View/Element/AbstractBlock.php(1115): Magento\Framework\View\Element\AbstractBlock->Magento\Framework\View\Element\{closure}() #39 /shared/httpd/242test/htdocs/vendor/magento/framework/View/Element/AbstractBlock.php(675): Magento\Framework\View\Element\AbstractBlock->_loadCache() #40 /shared/httpd/242test/htdocs/generated/code/Magento/Catalog/Block/Product/View/Interceptor.php(608): Magento\Framework\View\Element\AbstractBlock->toHtml() #41 /shared/httpd/242test/htdocs/vendor/magento/framework/View/Layout.php(578): Magento\Catalog\Block\Product\View\Interceptor->toHtml() #42 /shared/httpd/242test/htdocs/vendor/magento/framework/View/Layout.php(555): Magento\Framework\View\Layout->_renderBlock('product.info.re...') #43 /shared/httpd/242test/htdocs/generated/code/Magento/Framework/View/Layout/Interceptor.php(149): Magento\Framework\View\Layout->renderNonCachedElement('product.info.re...') #44 /shared/httpd/242test/htdocs/vendor/magento/framework/View/Layout.php(510): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement('product.info.re...') #45 /shared/httpd/242test/htdocs/generated/code/Magento/Framework/View/Layout/Interceptor.php(140): Magento\Framework\View\Layout->renderElement('product.info.re...', false) #46 /shared/httpd/242test/htdocs/vendor/magento/framework/View/Layout.php(606): Magento\Framework\View\Layout\Interceptor->renderElement('product.info.re...', false) #47 /shared/httpd/242test/htdocs/vendor/magento/framework/View/Layout.php(557): Magento\Framework\View\Layout->_renderContainer('product.info.ma...', false) #48 /shared/httpd/242test/htdocs/generated/code/Magento/Framework/View/Layout/Interceptor.php(149): Magento\Framework\View\Layout->renderNonCachedElement('product.info.ma...') #49 /shared/httpd/242test/htdocs/vendor/magento/framework/View/Layout.php(510): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement('product.info.ma...') #50 /shared/httpd/242test/htdocs/generated/code/Magento/Framework/View/Layout/Interceptor.php(140): Magento\Framework\View\Layout->renderElement('product.info.ma...', false) #51 /shared/httpd/242test/htdocs/vendor/magento/framework/View/Layout.php(606): Magento\Framework\View\Layout\Interceptor->renderElement('product.info.ma...', false) #52 /shared/httpd/242test/htdocs/vendor/magento/framework/View/Layout.php(557): Magento\Framework\View\Layout->_renderContainer('content', false) #53 /shared/httpd/242test/htdocs/generated/code/Magento/Framework/View/Layout/Interceptor.php(149): Magento\Framework\View\Layout->renderNonCachedElement('content') #54 /shared/httpd/242test/htdocs/vendor/magento/framework/View/Layout.php(510): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement('content') #55 /shared/httpd/242test/htdocs/generated/code/Magento/Framework/View/Layout/Interceptor.php(140): Magento\Framework\View\Layout->renderElement('content', false) #56 /shared/httpd/242test/htdocs/vendor/magento/framework/View/Layout.php(606): Magento\Framework\View\Layout\Interceptor->renderElement('content', false) #57 /shared/httpd/242test/htdocs/vendor/magento/framework/View/Layout.php(557): Magento\Framework\View\Layout->_renderContainer('main', false) #58 /shared/httpd/242test/htdocs/generated/code/Magento/Framework/View/Layout/Interceptor.php(149): Magento\Framework\View\Layout->renderNonCachedElement('main') #59 /shared/httpd/242test/htdocs/vendor/magento/framework/View/Layout.php(510): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement('main') #60 /shared/httpd/242test/htdocs/generated/code/Magento/Framework/View/Layout/Interceptor.php(140): Magento\Framework\View\Layout->renderElement('main', false) #61 /shared/httpd/242test/htdocs/vendor/magento/framework/View/Layout.php(606): Magento\Framework\View\Layout\Interceptor->renderElement('main', false) #62 /shared/httpd/242test/htdocs/vendor/magento/framework/View/Layout.php(557): Magento\Framework\View\Layout->_renderContainer('columns', false) #63 /shared/httpd/242test/htdocs/generated/code/Magento/Framework/View/Layout/Interceptor.php(149): Magento\Framework\View\Layout->renderNonCachedElement('columns') #64 /shared/httpd/242test/htdocs/vendor/magento/framework/View/Layout.php(510): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement('columns') #65 /shared/httpd/242test/htdocs/generated/code/Magento/Framework/View/Layout/Interceptor.php(140): Magento\Framework\View\Layout->renderElement('columns', false) #66 /shared/httpd/242test/htdocs/vendor/magento/framework/View/Layout.php(606): Magento\Framework\View\Layout\Interceptor->renderElement('columns', false) #67 /shared/httpd/242test/htdocs/vendor/magento/framework/View/Layout.php(557): Magento\Framework\View\Layout->_renderContainer('main.content', false) #68 /shared/httpd/242test/htdocs/generated/code/Magento/Framework/View/Layout/Interceptor.php(149): Magento\Framework\View\Layout->renderNonCachedElement('main.content') #69 /shared/httpd/242test/htdocs/vendor/magento/framework/View/Layout.php(510): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement('main.content') #70 /shared/httpd/242test/htdocs/generated/code/Magento/Framework/View/Layout/Interceptor.php(140): Magento\Framework\View\Layout->renderElement('main.content', false) #71 /shared/httpd/242test/htdocs/vendor/magento/framework/View/Layout.php(606): Magento\Framework\View\Layout\Interceptor->renderElement('main.content', false) #72 /shared/httpd/242test/htdocs/vendor/magento/framework/View/Layout.php(557): Magento\Framework\View\Layout->_renderContainer('page.wrapper', false) #73 /shared/httpd/242test/htdocs/generated/code/Magento/Framework/View/Layout/Interceptor.php(149): Magento\Framework\View\Layout->renderNonCachedElement('page.wrapper') #74 /shared/httpd/242test/htdocs/vendor/magento/framework/View/Layout.php(510): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement('page.wrapper') #75 /shared/httpd/242test/htdocs/generated/code/Magento/Framework/View/Layout/Interceptor.php(140): Magento\Framework\View\Layout->renderElement('page.wrapper', false) #76 /shared/httpd/242test/htdocs/vendor/magento/framework/View/Layout.php(606): Magento\Framework\View\Layout\Interceptor->renderElement('page.wrapper', false) #77 /shared/httpd/242test/htdocs/vendor/magento/framework/View/Layout.php(557): Magento\Framework\View\Layout->_renderContainer('root', false) #78 /shared/httpd/242test/htdocs/generated/code/Magento/Framework/View/Layout/Interceptor.php(149): Magento\Framework\View\Layout->renderNonCachedElement('root') #79 /shared/httpd/242test/htdocs/vendor/magento/framework/View/Layout.php(510): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement('root') #80 /shared/httpd/242test/htdocs/generated/code/Magento/Framework/View/Layout/Interceptor.php(140): Magento\Framework\View\Layout->renderElement('root', true) #81 /shared/httpd/242test/htdocs/vendor/magento/framework/View/Layout.php(975): Magento\Framework\View\Layout\Interceptor->renderElement('root') #82 /shared/httpd/242test/htdocs/vendor/magento/framework/Interception/Interceptor.php(58): Magento\Framework\View\Layout->getOutput() #83 /shared/httpd/242test/htdocs/vendor/magento/framework/Interception/Interceptor.php(138): Magento\Framework\View\Layout\Interceptor->___callParent('getOutput', Array) #84 /shared/httpd/242test/htdocs/vendor/magento/framework/Interception/Interceptor.php(153): Magento\Framework\View\Layout\Interceptor->Magento\Framework\Interception\{closure}() #85 /shared/httpd/242test/htdocs/generated/code/Magento/Framework/View/Layout/Interceptor.php(347): Magento\Framework\View\Layout\Interceptor->___callPlugins('getOutput', Array, Array) #86 /shared/httpd/242test/htdocs/vendor/magento/framework/View/Result/Page.php(258): Magento\Framework\View\Layout\Interceptor->getOutput() #87 /shared/httpd/242test/htdocs/vendor/magento/framework/View/Result/Layout.php(171): Magento\Framework\View\Result\Page->render(Object(Magento\Framework\App\Response\Http\Interceptor)) #88 /shared/httpd/242test/htdocs/vendor/magento/framework/Interception/Interceptor.php(58): Magento\Framework\View\Result\Layout->renderResult(Object(Magento\Framework\App\Response\Http\Interceptor)) #89 /shared/httpd/242test/htdocs/vendor/magento/framework/Interception/Interceptor.php(138): Magento\Framework\View\Result\Page\Interceptor->___callParent('renderResult', Array) #90 /shared/httpd/242test/htdocs/vendor/magento/framework/Interception/Interceptor.php(153): Magento\Framework\View\Result\Page\Interceptor->Magento\Framework\Interception\{closure}(Object(Magento\Framework\App\Response\Http\Interceptor)) #91 /shared/httpd/242test/htdocs/generated/code/Magento/Framework/View/Result/Page/Interceptor.php(95): Magento\Framework\View\Result\Page\Interceptor->___callPlugins('renderResult', Array, Array) #92 /shared/httpd/242test/htdocs/vendor/magento/framework/App/Http.php(120): Magento\Framework\View\Result\Page\Interceptor->renderResult(Object(Magento\Framework\App\Response\Http\Interceptor)) #93 /shared/httpd/242test/htdocs/generated/code/Magento/Framework/App/Http/Interceptor.php(23): Magento\Framework\App\Http->launch() #94 /shared/httpd/242test/htdocs/vendor/magento/framework/App/Bootstrap.php(263): Magento\Framework\App\Http\Interceptor->launch() #95 /shared/httpd/242test/htdocs/pub/index.php(29): Magento\Framework\App\Bootstrap->run(Object(Magento\Framework\App\Http\Interceptor)) #96 {main}
Resolution (*)
Force composer to use 2.7.0 and reload page, page loads with no issues.
- Severity: S1 - Affects critical data or functionality and forces users to employ a workaround.
About this issue
- Original URL
- State: closed
- Created 3 years ago
- Reactions: 4
- Comments: 26 (10 by maintainers)
I also spent a few hours yesterday troubleshooting after installing 2.4.2p1.
Sorry but you are making it a little too easy to blame laminas-escaper. There with 2.7.1. the Coding guidelines were inserted and thereby also the type check activated (declare(strict_types=1)😉; The input type of the function was also declared as string before.
The lib doesn’t even enforce this type, but by enabling type checking it now impacts the function rawurlencode used in this function.
Und URL-Encode ist PHP Standard.
rawurlencode ( string $string ) : stringActivating the type check is not a mistake and I don’t think they will take it back.
All values are passed from Magento to the function unchecked, regardless of whether they are a string or not. Now the implicit cast is missing. This must be done explicitly in Magento or the function must no longer be called for types other than string.
Currently there is an error in laminas-escaper. You can add the following to your composer.json and run composer update. This is only a temporary fix for this problem. “require”: { “magento/product-community-edition”: “2.4.2-p1”, “laminas/laminas-escaper”: “2.7.0” },
Ah, I just noticed that on
2.4-developthey also addeddeclare(strict_types=1);via: https://github.com/magento/magento2/commit/1a481b435c24369b0e741e58a16e1be9a4dfee90#That might explain it.
This line is not part of 2.4.2-p1, so it only crashes on the
2.4-developbranch at the moment.So that line should be released together with https://github.com/magento/magento2/pull/33353 when it is properly fixed. So somebody should make sure that
MC-23553is not included in Magento 2.4.3 yet until the PR above has been finished completely.(/cc @fascinosum )
I am facing the same bug at Magento 2.4.2-p1. Please fix immediately!
FYI if you’re using 2.4.2.-p1, hard locking the laminas-escaper lib to 2.7.0 is probably going to be your only option for now.
Just as an FYI for those affected by this issue. I’ve also had this happen on 2.3.7
I have a lot of this issue in system.log but not sure that is related. I can not how to reproduce it.
[2021-06-28 11:59:14] main.CRITICAL: TypeError: html_entity_decode() expects parameter 1 to be string, null given in /var/www/html/vendor/magento/framework/Escaper.php:366 Stack trace: #0 /var/www/html/vendor/magento/framework/Escaper.php(366): html_entity_decode() #1 /var/www/html/vendor/magento/framework/Escaper.php(282): Magento\Framework\Escaper->escapeXssInUrl() #2 /var/www/html/var/view_preprocessed/pub/static/vendor/magento/module-customer/view/frontend/templates/form/register.phtml(1): Magento\Framework\Escaper->escapeUrl() #3 /var/www/html/vendor/magento/framework/View/TemplateEngine/Php.php(71): include(‘/var/www/html/v…’) #4 /var/www/html/vendor/magento/framework/Interception/Interceptor.php(58): Magento\Framework\View\TemplateEngine\Php->render() #5 /var/www/html/vendor/magento/framework/Interception/Interceptor.php(138): Magento\Framework\View\TemplateEngine\Php\Interceptor->___callParent() #6 /var/www/html/vendor/amasty/module-fpc-warmer/Plugin/Holepunch/TemplateRenderer.php(58): Magento\Framework\View\TemplateEngine\Php\Interceptor->Magento\Framework\Interception{closure}() #7 /var/www/html/vendor/magento/framework/Interception/Interceptor.php(135): Amasty\Fpc\Plugin\Holepunch\TemplateRenderer->aroundRender() #8 /var/www/html/vendor/magento/framework/Interception/Interceptor.php(153): Magento\Framework\View\TemplateEngine\Php\Interceptor->Magento\Framework\Interception{closure}() #9 /var/www/html/generated/code/Magento/Framework/View/TemplateEngine/Php/Interceptor.php(23): Magento\Framework\View\TemplateEngine\Php\Interceptor->___callPlugins() #10 /var/www/html/vendor/magento/framework/View/Element/Template.php(273): Magento\Framework\View\TemplateEngine\Php\Interceptor->render() #11 /var/www/html/vendor/magento/framework/View/Element/Template.php(303): Magento\Framework\View\Element\Template->fetchView() #12 /var/www/html/vendor/magento/framework/View/Element/AbstractBlock.php(1111): Magento\Framework\View\Element\Template->_toHtml() #13 /var/www/html/vendor/magento/framework/View/Element/AbstractBlock.php(1115): Magento\Framework\View\Element\AbstractBlock->Magento\Framework\View\Element{closure}() #14 /var/www/html/vendor/magento/framework/View/Element/AbstractBlock.php(675): Magento\Framework\View\Element\AbstractBlock->_loadCache() #15 /var/www/html/vendor/magento/framework/View/Layout.php(578): Magento\Framework\View\Element\AbstractBlock->toHtml() #16 /var/www/html/vendor/magento/framework/View/Layout.php(555): Magento\Framework\View\Layout->_renderBlock() #17 /var/www/html/generated/code/Magento/Framework/View/Layout/Interceptor.php(149): Magento\Framework\View\Layout->renderNonCachedElement() #18 /var/www/html/vendor/magento/framework/View/Layout.php(510): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement() #19 /var/www/html/generated/code/Magento/Framework/View/Layout/Interceptor.php(140): Magento\Framework\View\Layout->renderElement() #20 /var/www/html/vendor/magento/framework/View/Layout.php(606): Magento\Framework\View\Layout\Interceptor->renderElement() #21 /var/www/html/vendor/magento/framework/View/Layout.php(557): Magento\Framework\View\Layout->_renderContainer() #22 /var/www/html/generated/code/Magento/Framework/View/Layout/Interceptor.php(149): Magento\Framework\View\Layout->renderNonCachedElement() #23 /var/www/html/vendor/magento/framework/View/Layout.php(510): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement() #24 /var/www/html/generated/code/Magento/Framework/View/Layout/Interceptor.php(140): Magento\Framework\View\Layout->renderElement() #25 /var/www/html/vendor/magento/framework/View/Layout.php(606): Magento\Framework\View\Layout\Interceptor->renderElement() #26 /var/www/html/vendor/magento/framework/View/Layout.php(557): Magento\Framework\View\Layout->_renderContainer() #27 /var/www/html/generated/code/Magento/Framework/View/Layout/Interceptor.php(149): Magento\Framework\View\Layout->renderNonCachedElement() #28 /var/www/html/vendor/magento/framework/View/Layout.php(510): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement() #29 /var/www/html/generated/code/Magento/Framework/View/Layout/Interceptor.php(140): Magento\Framework\View\Layout->renderElement() #30 /var/www/html/vendor/magento/framework/View/Layout.php(606): Magento\Framework\View\Layout\Interceptor->renderElement() #31 /var/www/html/vendor/magento/framework/View/Layout.php(557): Magento\Framework\View\Layout->_renderContainer() #32 /var/www/html/generated/code/Magento/Framework/View/Layout/Interceptor.php(149): Magento\Framework\View\Layout->renderNonCachedElement() #33 /var/www/html/vendor/magento/framework/View/Layout.php(510): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement() #34 /var/www/html/generated/code/Magento/Framework/View/Layout/Interceptor.php(140): Magento\Framework\View\Layout->renderElement() #35 /var/www/html/vendor/magento/framework/View/Layout.php(606): Magento\Framework\View\Layout\Interceptor->renderElement() #36 /var/www/html/vendor/magento/framework/View/Layout.php(557): Magento\Framework\View\Layout->_renderContainer() #37 /var/www/html/generated/code/Magento/Framework/View/Layout/Interceptor.php(149): Magento\Framework\View\Layout->renderNonCachedElement() #38 /var/www/html/vendor/magento/framework/View/Layout.php(510): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement() #39 /var/www/html/generated/code/Magento/Framework/View/Layout/Interceptor.php(140): Magento\Framework\View\Layout->renderElement() #40 /var/www/html/vendor/magento/framework/View/Layout.php(606): Magento\Framework\View\Layout\Interceptor->renderElement() #41 /var/www/html/vendor/magento/framework/View/Layout.php(557): Magento\Framework\View\Layout->_renderContainer() #42 /var/www/html/generated/code/Magento/Framework/View/Layout/Interceptor.php(149): Magento\Framework\View\Layout->renderNonCachedElement() #43 /var/www/html/vendor/magento/framework/View/Layout.php(510): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement() #44 /var/www/html/generated/code/Magento/Framework/View/Layout/Interceptor.php(140): Magento\Framework\View\Layout->renderElement() #45 /var/www/html/vendor/magento/framework/View/Layout.php(606): Magento\Framework\View\Layout\Interceptor->renderElement() #46 /var/www/html/vendor/magento/framework/View/Layout.php(557): Magento\Framework\View\Layout->_renderContainer() #47 /var/www/html/generated/code/Magento/Framework/View/Layout/Interceptor.php(149): Magento\Framework\View\Layout->renderNonCachedElement() #48 /var/www/html/vendor/magento/framework/View/Layout.php(510): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement() #49 /var/www/html/generated/code/Magento/Framework/View/Layout/Interceptor.php(140): Magento\Framework\View\Layout->renderElement() #50 /var/www/html/vendor/magento/framework/View/Layout.php(975): Magento\Framework\View\Layout\Interceptor->renderElement() #51 /var/www/html/vendor/magento/framework/Interception/Interceptor.php(58): Magento\Framework\View\Layout->getOutput() #52 /var/www/html/vendor/magento/framework/Interception/Interceptor.php(138): Magento\Framework\View\Layout\Interceptor->___callParent() #53 /var/www/html/vendor/magento/framework/Interception/Interceptor.php(153): Magento\Framework\View\Layout\Interceptor->Magento\Framework\Interception{closure}() #54 /var/www/html/generated/code/Magento/Framework/View/Layout/Interceptor.php(347): Magento\Framework\View\Layout\Interceptor->___callPlugins() #55 /var/www/html/vendor/magento/framework/View/Result/Page.php(258): Magento\Framework\View\Layout\Interceptor->getOutput() #56 /var/www/html/vendor/magento/framework/View/Result/Layout.php(171): Magento\Framework\View\Result\Page->render() #57 /var/www/html/vendor/magento/framework/Interception/Interceptor.php(58): Magento\Framework\View\Result\Layout->renderResult() #58 /var/www/html/vendor/magento/framework/Interception/Interceptor.php(138): Magento\Framework\View\Result\Page\Interceptor->___callParent() #59 /var/www/html/vendor/amasty/gdpr-cookie/Plugin/ProcessPageResult.php(65): Magento\Framework\View\Result\Page\Interceptor->Magento\Framework\Interception{closure}() #60 /var/www/html/vendor/magento/framework/Interception/Interceptor.php(135): Amasty\GdprCookie\Plugin\ProcessPageResult->aroundRenderResult() #61 /var/www/html/vendor/amasty/module-page-speed-tools/Plugin/ProcessPageResult.php(46): Magento\Framework\View\Result\Page\Interceptor->Magento\Framework\Interception{closure}() #62 /var/www/html/vendor/magento/framework/Interception/Interceptor.php(135): Amasty\PageSpeedTools\Plugin\ProcessPageResult->aroundRenderResult() #63 /var/www/html/vendor/magento/framework/Interception/Interceptor.php(153): Magento\Framework\View\Result\Page\Interceptor->Magento\Framework\Interception{closure}() #64 /var/www/html/generated/code/Magento/Framework/View/Result/Page/Interceptor.php(95): Magento\Framework\View\Result\Page\Interceptor->___callPlugins() #65 /var/www/html/vendor/magento/framework/App/Http.php(120): Magento\Framework\View\Result\Page\Interceptor->renderResult() #66 /var/www/html/vendor/magento/framework/Interception/Interceptor.php(58): Magento\Framework\App\Http->launch() #67 /var/www/html/vendor/magento/framework/Interception/Interceptor.php(138): Magento\Framework\App\Http\Interceptor->___callParent() #68 /var/www/html/vendor/magento/framework/Interception/Interceptor.php(153): Magento\Framework\App\Http\Interceptor->Magento\Framework\Interception{closure}() #69 /var/www/html/generated/code/Magento/Framework/App/Http/Interceptor.php(23): Magento\Framework\App\Http\Interceptor->___callPlugins() #70 /var/www/html/vendor/magento/framework/App/Bootstrap.php(263): Magento\Framework\App\Http\Interceptor->launch() #71 /var/www/html/pub/index.php(29): Magento\Framework\App\Bootstrap->run() #72 {main} [] []
i think upgrade laminas package is not enough. Magento also need patch from codebase too. Note: issue not only happen in frontend but also in admin able broken function too. Ex: Go to page create new entity (Catalog, Categories) laminas escaper 2.8.0 => TypeError: Argument 1 passed to Laminas\Escaper\Escaper::escapeUrl() must be of the type string, int given
✅ Confirmed by @sdzhepa Thank you for verifying the issue. Based on the provided information internal tickets
MC-42734were createdIssue Available: @sdzhepa, You will be automatically unassigned. Contributors/Maintainers can claim this issue to continue. To reclaim and continue work, reassign the ticket to yourself.
Hi @msyhr. Thank you for your report. To help us process this issue please make sure that you provided the following information:
Please make sure that the issue is reproducible on the vanilla Magento instance following Steps to reproduce. To deploy vanilla Magento instance on our environment, please, add a comment to the issue:
@magento give me 2.4-develop instance- upcoming 2.4.x releaseFor more details, please, review the Magento Contributor Assistant documentation.
Please, add a comment to assign the issue:
@magento I am working on this⚠️ According to the Magento Contribution requirements, all issues must go through the Community Contributions Triage process. Community Contributions Triage is a public meeting.
🕙 You can find the schedule on the Magento Community Calendar page.
📞 The triage of issues happens in the queue order. If you want to speed up the delivery of your contribution, please join the Community Contributions Triage session to discuss the appropriate ticket.
🎥 You can find the recording of the previous Community Contributions Triage on the Magento Youtube Channel
✏️ Feel free to post questions/proposals/feedback related to the Community Contributions Triage process to the corresponding Slack Channel