magento2: 2.3.6-p1 breaks with PHP 7.2

Preconditions

  1. Magento 2.3.6;
  2. PHP 7.2;

Steps to reproduce

  1. Upgrade Magento to 2.3.6-p1;

Expected result

  1. Store working;

Actual result

  1. Any page in the store gives a 500 error and the exception log contains the following:
InvalidArgumentException: Failed to set ini option "session.cookie_samesite" to value "Lax". in /var/www/magento/vendor/magento/framework/Session/SessionManager.php:630
Stack trace:
#0 /var/www/magento/vendor/magento/framework/Session/SessionManager.php(197): Magento\Framework\Session\SessionManager->initIniOptions()
#1 /var/www/magento/vendor/magento/framework/Interception/Interceptor.php(58): Magento\Framework\Session\SessionManager->start()
#2 /var/www/magento/vendor/magento/framework/Interception/Interceptor.php(138): Magento\Framework\Session\Generic\Interceptor->___callParent('start', Array)
#3 /var/www/magento/vendor/magento/framework/Interception/Interceptor.php(153): Magento\Framework\Session\Generic\Interceptor->Magento\Framework\Interception\{closure}()
#4 /var/www/magento/generated/code/Magento/Framework/Session/Generic/Interceptor.php(52): Magento\Framework\Session\Generic\Interceptor->___callPlugins('start', Array, Array)
#5 /var/www/magento/vendor/magento/framework/Session/SessionManager.php(141): Magento\Framework\Session\Generic\Interceptor->start()
#6 /var/www/magento/generated/code/Magento/Framework/Session/Generic/Interceptor.php(14): Magento\Framework\Session\SessionManager->__construct(Object(Magento\Framework\App\Request\Http), Object(Magento\Framework\Session\SidResolver\Proxy), Object(Magento\Framework\Session\Config), Object(Magento\Framework\Session\SaveHandler), Object(Magento\Framework\Session\Validator), Object(Magento\Framework\Session\Storage), Object(Magento\Framework\Stdlib\Cookie\PhpCookieManager), Object(Magento\Framework\Stdlib\Cookie\CookieMetadataFactory), Object(Magento\Framework\App\State\Interceptor), NULL)
#7 /var/www/magento/vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php(121): Magento\Framework\Session\Generic\Interceptor->__construct(Object(Magento\Framework\App\Request\Http), Object(Magento\Framework\Session\SidResolver\Proxy), Object(Magento\Framework\Session\Config), Object(Magento\Framework\Session\SaveHandler), Object(Magento\Framework\Session\Validator), Object(Magento\Framework\Session\Storage), Object(Magento\Framework\Stdlib\Cookie\PhpCookieManager), Object(Magento\Framework\Stdlib\Cookie\CookieMetadataFactory), Object(Magento\Framework\App\State\Interceptor), NULL)
#8 /var/www/magento/vendor/magento/framework/ObjectManager/Factory/Dynamic/Developer.php(66): Magento\Framework\ObjectManager\Factory\AbstractFactory->createObject('Magento\\Framewo...', Array)
#9 /var/www/magento/vendor/magento/framework/ObjectManager/ObjectManager.php(70): Magento\Framework\ObjectManager\Factory\Dynamic\Developer->create('Magento\\Framewo...')
#10 /var/www/magento/vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php(167): Magento\Framework\ObjectManager\ObjectManager->get('Magento\\Framewo...')
#11 /var/www/magento/vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php(273): Magento\Framework\ObjectManager\Factory\AbstractFactory->resolveArgument(Array, 'Magento\\Framewo...', NULL, 'session', 'Magento\\Custome...')
#12 /var/www/magento/vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php(236): Magento\Framework\ObjectManager\Factory\AbstractFactory->getResolvedArgument('Magento\\Custome...', Array, Array)
#13 /var/www/magento/vendor/magento/framework/ObjectManager/Factory/Dynamic/Developer.php(34): Magento\Framework\ObjectManager\Factory\AbstractFactory->resolveArgumentsInRuntime('Magento\\Custome...', Array, Array)
#14 /var/www/magento/vendor/magento/framework/ObjectManager/Factory/Dynamic/Developer.php(59): Magento\Framework\ObjectManager\Factory\Dynamic\Developer->_resolveArguments('Magento\\Custome...', Array, Array)
#15 /var/www/magento/vendor/magento/framework/ObjectManager/ObjectManager.php(70): Magento\Framework\ObjectManager\Factory\Dynamic\Developer->create('Magento\\Custome...')
#16 /var/www/magento/vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php(167): Magento\Framework\ObjectManager\ObjectManager->get('Magento\\Custome...')
#17 /var/www/magento/vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php(273): Magento\Framework\ObjectManager\Factory\AbstractFactory->resolveArgument(Array, 'Magento\\Custome...', NULL, 'customerSession', 'Magento\\Checkou...')
#18 /var/www/magento/vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php(236): Magento\Framework\ObjectManager\Factory\AbstractFactory->getResolvedArgument('Magento\\Checkou...', Array, Array)
#19 /var/www/magento/vendor/magento/framework/ObjectManager/Factory/Dynamic/Developer.php(34): Magento\Framework\ObjectManager\Factory\AbstractFactory->resolveArgumentsInRuntime('Magento\\Checkou...', Array, Array)
#20 /var/www/magento/vendor/magento/framework/ObjectManager/Factory/Dynamic/Developer.php(59): Magento\Framework\ObjectManager\Factory\Dynamic\Developer->_resolveArguments('Magento\\Checkou...', Array, Array)
#21 /var/www/magento/vendor/magento/framework/ObjectManager/ObjectManager.php(70): Magento\Framework\ObjectManager\Factory\Dynamic\Developer->create('Magento\\Checkou...')
#22 /var/www/magento/vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php(167): Magento\Framework\ObjectManager\ObjectManager->get('Magento\\Checkou...')
#23 /var/www/magento/vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php(273): Magento\Framework\ObjectManager\Factory\AbstractFactory->resolveArgument(Array, 'Magento\\Checkou...', NULL, 'checkoutSession', 'Magento\\Persist...')
#24 /var/www/magento/vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php(236): Magento\Framework\ObjectManager\Factory\AbstractFactory->getResolvedArgument('Magento\\Persist...', Array, Array)
#25 /var/www/magento/vendor/magento/framework/ObjectManager/Factory/Dynamic/Developer.php(34): Magento\Framework\ObjectManager\Factory\AbstractFactory->resolveArgumentsInRuntime('Magento\\Persist...', Array, Array)
#26 /var/www/magento/vendor/magento/framework/ObjectManager/Factory/Dynamic/Developer.php(59): Magento\Framework\ObjectManager\Factory\Dynamic\Developer->_resolveArguments('Magento\\Persist...', Array, Array)
#27 /var/www/magento/vendor/magento/framework/ObjectManager/ObjectManager.php(70): Magento\Framework\ObjectManager\Factory\Dynamic\Developer->create('Magento\\Persist...')
#28 /var/www/magento/vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php(167): Magento\Framework\ObjectManager\ObjectManager->get('Magento\\Persist...')
#29 /var/www/magento/vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php(273): Magento\Framework\ObjectManager\Factory\AbstractFactory->resolveArgument(Array, 'Magento\\Persist...', NULL, 'persistentSessi...', 'Magento\\Persist...')
#30 /var/www/magento/vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php(236): Magento\Framework\ObjectManager\Factory\AbstractFactory->getResolvedArgument('Magento\\Persist...', Array, Array)
#31 /var/www/magento/vendor/magento/framework/ObjectManager/Factory/Dynamic/Developer.php(34): Magento\Framework\ObjectManager\Factory\AbstractFactory->resolveArgumentsInRuntime('Magento\\Persist...', Array, Array)
#32 /var/www/magento/vendor/magento/framework/ObjectManager/Factory/Dynamic/Developer.php(59): Magento\Framework\ObjectManager\Factory\Dynamic\Developer->_resolveArguments('Magento\\Persist...', Array, Array)
#33 /var/www/magento/vendor/magento/framework/ObjectManager/ObjectManager.php(70): Magento\Framework\ObjectManager\Factory\Dynamic\Developer->create('Magento\\Persist...')
#34 /var/www/magento/vendor/magento/framework/Interception/PluginList/PluginList.php(250): Magento\Framework\ObjectManager\ObjectManager->get('Magento\\Persist...')
#35 /var/www/magento/vendor/magento/framework/Interception/Interceptor.php(119): Magento\Framework\Interception\PluginList\PluginList->getPlugin('Magento\\Framewo...', 'persistent_page...')
#36 /var/www/magento/vendor/magento/framework/Interception/Interceptor.php(153): Magento\Framework\App\Http\Context\Interceptor->Magento\Framework\Interception\{closure}()
#37 /var/www/magento/generated/code/Magento/Framework/App/Http/Context/Interceptor.php(78): Magento\Framework\App\Http\Context\Interceptor->___callPlugins('getVaryString', Array, Array)
#38 /var/www/magento/vendor/magento/framework/App/Response/Http.php(108): Magento\Framework\App\Http\Context\Interceptor->getVaryString()
#39 /var/www/magento/generated/code/Magento/Framework/App/Response/Http/Interceptor.php(37): Magento\Framework\App\Response\Http->sendVary()
#40 /var/www/magento/vendor/magento/module-page-cache/Model/App/Response/HttpPlugin.php(25): Magento\Framework\App\Response\Http\Interceptor->sendVary()
#41 /var/www/magento/vendor/magento/framework/Interception/Interceptor.php(121): Magento\PageCache\Model\App\Response\HttpPlugin->beforeSendResponse(Object(Magento\Framework\App\Response\Http\Interceptor))
#42 /var/www/magento/vendor/magento/framework/Interception/Interceptor.php(153): Magento\Framework\App\Response\Http\Interceptor->Magento\Framework\Interception\{closure}()
#43 /var/www/magento/generated/code/Magento/Framework/App/Response/Http/Interceptor.php(117): Magento\Framework\App\Response\Http\Interceptor->___callPlugins('sendResponse', Array, Array)
#44 /var/www/magento/vendor/magento/framework/App/ExceptionHandler.php(103): Magento\Framework\App\Response\Http\Interceptor->sendResponse()
#45 /var/www/magento/vendor/magento/framework/App/ExceptionHandler.php(70): Magento\Framework\App\ExceptionHandler->handleDeveloperMode(Object(Magento\Framework\App\Bootstrap), Object(InvalidArgumentException), Object(Magento\Framework\App\Response\Http\Interceptor))
#46 /var/www/magento/vendor/magento/framework/App/Http.php(156): Magento\Framework\App\ExceptionHandler->handle(Object(Magento\Framework\App\Bootstrap), Object(InvalidArgumentException), Object(Magento\Framework\App\Response\Http\Interceptor), Object(Magento\Framework\App\Request\Http))
#47 /var/www/magento/vendor/magento/framework/Interception/Interceptor.php(58): Magento\Framework\App\Http->catchException(Object(Magento\Framework\App\Bootstrap), Object(InvalidArgumentException))
#48 /var/www/magento/vendor/magento/framework/Interception/Interceptor.php(138): Magento\Framework\App\Http\Interceptor->___callParent('catchException', Array)
#49 /var/www/magento/vendor/magento/framework/Interception/Interceptor.php(153): Magento\Framework\App\Http\Interceptor->Magento\Framework\Interception\{closure}(Object(Magento\Framework\App\Bootstrap), Object(InvalidArgumentException))
#50 /var/www/magento/generated/code/Magento/Framework/App/Http/Interceptor.php(39): Magento\Framework\App\Http\Interceptor->___callPlugins('catchException', Array, Array)
#51 /var/www/magento/vendor/magento/framework/App/Bootstrap.php(267): Magento\Framework\App\Http\Interceptor->catchException(Object(Magento\Framework\App\Bootstrap), Object(InvalidArgumentException))
#52 /var/www/magento/pub/index.php(40): Magento\Framework\App\Bootstrap->run(Object(Magento\Framework\App\Http\Interceptor))
#53 {main}

Please provide Severity assessment for the Issue as Reporter. This information will help during Confirmation and Issue triage processes.

  • Severity: S0 - Affects critical data or functionality and leaves users without workaround.
  • Severity: S1 - Affects critical data or functionality and forces users to employ a workaround.
  • Severity: S2 - Affects non-critical data or functionality and forces users to employ a workaround.
  • Severity: S3 - Affects non-critical data or functionality and does not force users to employ a workaround.
  • Severity: S4 - Affects aesthetics, professional look and feel, “quality” or “usability”.

About this issue

  • Original URL
  • State: closed
  • Created 3 years ago
  • Reactions: 1
  • Comments: 22 (10 by maintainers)

Most upvoted comments

Usually the GitHub issues stay open until a fix is made public 🙄

Heck, the 2.3 branch here on GitHub doesn’t even have the 2.3.6-p1 patch in it 😐

I explicitly said we do Not support 7.2 because it is not PCI compliant

@nathanjosiah that’s not true. PHP 7.2 is PCI compliant if you are ~using~ installing Ubuntu LTS’s php packages. Just because the PHP Group isn’t supporting PHP 7.2 does not mean no one else is providing that support.

but Magento 2.3 users on Ubuntu (and possibly deriviates as Mint?) are screwed; they cannot upgrade PHP to 7.4 because you only start supporting it under 2.3.7, and that is not released yet, so you “need” to stay at 2.3.6 knowing that there are security fixes in 2.3.6p1… great…

I understand but PHP 7.3 is still available and still supported.

You are clearly not standing into the reality of Linux distributions here: they don’t carry every PHP version. In Ubuntu (current LTS versions) 7.2 and 7.4 are available. The only way installing 7.3 in it is through 3rd party repositories or by hand - both are not what you want in a professional environment: it can haunt you for quite some time.

But the real problem here is that Magento in the 2.3 branch (if you want to stay up to date ofcourse, but who wants a webstore with known security issues) now only supports 1 single PHP version. Support for 7.4 (released in November 2019) will only come in the next release, nearing the 2 year mark after the release of PHP 7.4… Saying to customers who are running 7.2 things like “it’s not supported anymore, you should have known that and be prepared” goes the same or even more for you as a developer: 7.4 is there for quite some time now, why isn’t support for it available yet?! By the time 7.4 becomes available for M2.3, half to 2 of the 3 years support for it has gone!

Support for 7.2 dropped 30 November 2020; M2.3.6 was released on 15th of October 2020. If PCI compliance was so important, you could already have dropped 7.2 support then. That at least was not a minor patchrelease. In normal software terms: a patchrelease as 2.3.6-p1 should only patch and definitely not break functionality or change requirements. This 2.3.6-p1 does.

But I understand your message: customer, you’re screwed, deal with it yourself.

Anyway, that’s not the issue. The issue is that the composer.json does not reflect the project dependencies.