SplObjectStorage::contains(): Argument #1 ($object) must be of type object, null given

Created on 10 July 2025, 1 day ago

\Drupal\commerce\CurrentCountry assumes a request always exists, but it does not, causing a fatal error on drush operations.

Same issue that's come up before
https://www.drupal.org/project/commerce/issues/3395298 🐛 SplObjectStorage::contains(): Argument #1 ($object) must be of type object, null given Fixed
https://www.drupal.org/project/price/issues/3334893 🐛 SplObjectStorage::contains(): Argument #1 ($object) must be of type object, null given Needs review

🐛 Bug report
Status

Active

Version

3.0

Component

Commerce

Created by

🇺🇸United States AaronBauman Philadelphia

Live updates comments and jobs are added and updated live.
Sign in to follow issues

Merge Requests

Comments & Activities

  • Issue created by @AaronBauman
  • 🇺🇸United States AaronBauman Philadelphia

    Here's a stack dump.

    In my case, the invocation of CurrentCountry originates from a route rebuild of a views data export display that includes a price field.

    TypeError: SplObjectStorage::contains(): Argument #1 ($object) must be of type object, null given in ~/web/modules/contrib/commerce/src/CurrentCountry.php on line 45 #0 ~/web/modules/contrib/commerce/src/CurrentCountry.php(45): SplObjectStorage->contains(NULL)
    #1 ~/web/modules/contrib/commerce/src/Resolver/DefaultLocaleResolver.php(37): Drupal\commerce\CurrentCountry->getCountry()
    #2 ~/web/modules/contrib/commerce/src/Resolver/ChainLocaleResolver.php(46): Drupal\commerce\Resolver\DefaultLocaleResolver->resolve()
    #3 ~/web/modules/contrib/commerce/src/CurrentLocale.php(46): Drupal\commerce\Resolver\ChainLocaleResolver->resolve()
    #4 ~/web/modules/contrib/commerce/modules/price/src/CurrencyFormatter.php(29): Drupal\commerce\CurrentLocale->getLocale()
    #5 [internal function]: Drupal\commerce_price\CurrencyFormatter->__construct(Object(Drupal\commerce_price\Repository\NumberFormatRepository), Object(Drupal\commerce_price\Repository\CurrencyRepository), Object(Drupal\commerce\CurrentLocale))
    #6 ~/vendor/symfony/dependency-injection/ContainerBuilder.php(1142): ReflectionClass->newInstanceArgs(Array)
    #7 ~/vendor/symfony/dependency-injection/ContainerBuilder.php(586): Symfony\Component\DependencyInjection\ContainerBuilder->createService(Object(Symfony\Component\DependencyInjection\Definition), Array, true, 'commerce_price....')
    #8 ~/vendor/symfony/dependency-injection/ContainerBuilder.php(1260): Symfony\Component\DependencyInjection\ContainerBuilder->doGet('commerce_price....', 1, Array, true)
    #9 ~/vendor/symfony/dependency-injection/ContainerBuilder.php(1212): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Object(Symfony\Component\DependencyInjection\Reference), Array, true)
    #10 ~/vendor/symfony/dependency-injection/ContainerBuilder.php(1112): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Array, Array, true)
    #11 ~/vendor/symfony/dependency-injection/ContainerBuilder.php(1262): Symfony\Component\DependencyInjection\ContainerBuilder->createService(Object(Symfony\Component\DependencyInjection\Definition), Array, true)
    #12 ~/vendor/symfony/dependency-injection/ContainerBuilder.php(1212): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Object(Symfony\Component\DependencyInjection\Definition), Array, true)
    #13 ~/vendor/symfony/dependency-injection/ContainerBuilder.php(1212): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Array, Array, true)
    #14 ~/vendor/symfony/dependency-injection/ContainerBuilder.php(1112): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Array, Array, true)
    #15 ~/vendor/symfony/dependency-injection/ContainerBuilder.php(586): Symfony\Component\DependencyInjection\ContainerBuilder->createService(Object(Symfony\Component\DependencyInjection\Definition), Array, true, 'serializer')
    #16 ~/vendor/symfony/dependency-injection/ContainerBuilder.php(531): Symfony\Component\DependencyInjection\ContainerBuilder->doGet('serializer', 1)
    #17 ~/web/modules/contrib/views_data_export/src/Plugin/views/style/DataExport.php(52): Symfony\Component\DependencyInjection\ContainerBuilder->get('serializer')
    #18 ~/web/core/lib/Drupal/Core/Plugin/Factory/ContainerFactory.php(21): Drupal\views_data_export\Plugin\views\style\DataExport::create(Object(Drupal\Core\DependencyInjection\ContainerBuilder), Array, 'data_export', Array)
    #19 ~/web/core/lib/Drupal/Component/Plugin/PluginManagerBase.php(83): Drupal\Core\Plugin\Factory\ContainerFactory->createInstance('data_export', Array)
    #20 ~/web/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php(824): Drupal\Component\Plugin\PluginManagerBase->createInstance('data_export')
    #21 ~/web/core/modules/rest/src/Plugin/views/display/RestExport.php(351): Drupal\views\Plugin\views\display\DisplayPluginBase->getPlugin('style')
    #22 ~/web/core/modules/views/src/EventSubscriber/RouteSubscriber.php(120): Drupal\rest\Plugin\views\display\RestExport->collectRoutes(Object(Symfony\Component\Routing\RouteCollection))
    #23 [internal function]: Drupal\views\EventSubscriber\RouteSubscriber->routes()
    #24 ~/web/core/lib/Drupal/Core/Routing/RouteBuilder.php(146): call_user_func(Array)
    #25 ~/web/core/lib/Drupal/Core/ProxyClass/Routing/RouteBuilder.php(83): Drupal\Core\Routing\RouteBuilder->rebuild()
    #26 ~/web/core/includes/common.inc(485): Drupal\Core\ProxyClass\Routing\RouteBuilder->rebuild()
    #27 ~/vendor/drush/drush/src/Commands/core/UpdateDBCommands.php(87): drupal_flush_all_caches()
    #28 [internal function]: Drush\Commands\core\UpdateDBCommands->updatedb(Array)
    #29 ~/vendor/consolidation/annotated-command/src/CommandProcessor.php(276): call_user_func_array(Array, Array)
    #30 ~/vendor/consolidation/annotated-command/src/CommandProcessor.php(212): Consolidation\AnnotatedCommand\CommandProcessor->runCommandCallback(Array, Object(Consolidation\AnnotatedCommand\CommandData))
    #31 ~/vendor/consolidation/annotated-command/src/CommandProcessor.php(175): Consolidation\AnnotatedCommand\CommandProcessor->validateRunAndAlter(Array, Array, Object(Consolidation\AnnotatedCommand\CommandData))
    #32 ~/vendor/consolidation/annotated-command/src/AnnotatedCommand.php(387): Consolidation\AnnotatedCommand\CommandProcessor->process(Object(Symfony\Component\Console\Output\ConsoleOutput), Array, Array, Object(Consolidation\AnnotatedCommand\CommandData))
    #33 ~/vendor/symfony/console/Command/Command.php(326): Consolidation\AnnotatedCommand\AnnotatedCommand->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
    #34 ~/vendor/symfony/console/Application.php(1096): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
    #35 ~/vendor/symfony/console/Application.php(324): Symfony\Component\Console\Application->doRunCommand(Object(Consolidation\AnnotatedCommand\AnnotatedCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
    #36 ~/vendor/symfony/console/Application.php(175): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
    #37 ~/vendor/drush/drush/src/Runtime/Runtime.php(110): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
    #38 ~/vendor/drush/drush/src/Runtime/Runtime.php(40): Drush\Runtime\Runtime->doRun(Array, Object(Symfony\Component\Console\Output\ConsoleOutput))
    #39 ~/vendor/drush/drush/drush.php(139): Drush\Runtime\Runtime->run(Array)
    #40 ~/vendor/drush/drush/drush(4): require('/Users/bauman/S...')
    #41 ~/vendor/bin/drush(120): include('/Users/bauman/S...')
    #42 {main}
    TypeError: SplObjectStorage::contains(): Argument #1 ($object) must be of type object, null given in SplObjectStorage->contains() (line 45 of ~/web/modules/contrib/commerce/src/CurrentCountry.php).
    
  • 🇺🇸United States AaronBauman Philadelphia

    Here's a patch.
    Uses exact same approach as patch from 🐛 SplObjectStorage::contains(): Argument #1 ($object) must be of type object, null given Fixed

  • 🇺🇸United States AaronBauman Philadelphia

    Opened MR 467 with same patch from #3

  • Pipeline finished with Success
    1 day ago
    Total: 1336s
    #544309
  • First commit to issue fork.
  • Pipeline finished with Skipped
    about 19 hours ago
    #544853
  • 🇮🇱Israel jsacksick

    Merged, thanks!

Production build 0.71.5 2024