Skip to content

Latest laminas/laminas-escaper (2.7.0 -> 2.7.1) breaks product and catalog category view pages #33346

Closed
@msyhr

Description

@msyhr

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 (*)

Screenshot 2021-06-24 at 16-18-36 https 242test loc

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.

Metadata

Metadata

Assignees

Labels

Component: Framework/EscaperComponent: Framework/UrlIssue: ConfirmedGate 3 Passed. Manual verification of the issue completed. Issue is confirmedPriority: P0This generally occurs in cases when the entire functionality is blocked.Priority: P1Once P0 defects have been fixed, a defect having this priority is the next candidate for fixing.Progress: doneReported on 2.4.2-p1Indicates original Magento version for the Issue report.Reproduced on 2.4.2Reproduced on 2.4.xThe issue has been reproduced on latest 2.4-develop branchSeverity: S1Affects critical data or functionality and forces users to employ a workaround.

Type

No type

Projects

Status

Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions