TypeError: uasort(): Argument #1 ($array) must be of type array, null given in uasort() (line 285 of modules\metatag\src\MetatagManager.php).

Created on 30 January 2025, about 1 month ago

Problem/Motivation

The module throws error after migrating drupal 8 site to drupal 10. see the error.

TypeError: uasort(): Argument #1 ($array) must be of type array, null given in uasort() (line 285 of modules\metatag\src\MetatagManager.php).

Steps to reproduce

Proposed resolution

In MetatagManager.php, the code is soring tags, but when empty array passed to the uasort function then its throws the error. here is the updated code:

$sorted_tags = [];
foreach ($this->sortedGroups() as $group_name => $group) {
  $tag_weight = $group['weight'] * 100;

  // Check if $tags[$group_name] is set and is an array.
  if (isset($tags[$group_name]) && is_array($tags[$group_name])) {
    // First, sort the tags within the group according to the original sort
    // order provided by the tag's definition.
    uasort($tags[$group_name], [
      'Drupal\Component\Utility\SortArray',
      'sortByWeightElement',
    ]);
    foreach ($tags[$group_name] as $tag_name => $tag_info) {
      $tag_info['weight'] = $tag_weight++;
      $sorted_tags[$tag_name] = $tag_info;
    }
  } else {
    // Log an error message if $tags[$group_name] is not set or not an array.
    \Drupal::logger('metatag')->error('Expected an array but got null or other type for group: @group_name', ['@group_name' => $group_name]);
  }
}

see the attached screenshot of the full error.

πŸ› Bug report
Status

Active

Version

2.1

Component

Code

Created by

πŸ‡΅πŸ‡°Pakistan Qaiser iqbal

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

Merge Requests

Comments & Activities

  • Issue created by @Qaiser iqbal
  • First commit to issue fork.
  • πŸ‡ΊπŸ‡ΈUnited States joegraduate Arizona, USA

    Created a MR based on proposed resolution in IS. Attaching as a patch usable for composer as well.

  • Pipeline finished with Success
    12 days ago
    Total: 391s
    #426708
  • Pipeline finished with Canceled
    12 days ago
    Total: 325s
    #426842
  • Pipeline finished with Success
    11 days ago
    Total: 4207s
    #426845
  • πŸ‡¨πŸ‡³China air xiang

    Create a patch for use with version 8.x-1.26.

  • πŸ‡¨πŸ‡³China air xiang

    Create a patch for use with version 8.x-1.26.

  • πŸ‡ΊπŸ‡ΈUnited States DamienMcKenna NH, USA

    Thank you for the merge request.

    Do any of you have any idea what resulted in a group being empty, of not having any active meta tags in it? Were you using another patch that let you hide individual meta tags, or did you have a custom meta tag group plugin that didn't have any meta tags associated with it?

  • πŸ‡ΊπŸ‡ΈUnited States joegraduate Arizona, USA

    Hi @damienmckenna. We had a site that was repeatedly throwing this error (on every web request) until we applied this patch and cleared cache, but unfortunately we still don't understand exactly why and haven't identified steps to reproduce the error. We're suspicious that some bad/incomplete render data was cached on the site and that was causing the error but we're not totally sure about that.

    We aren't using any other patches on the site but the Schema Metatag module and several of its submodules had recently been installed on the site before we saw this error.

    Here is the full stack trace from one of the instances of this error on our site:

    Backtrace
    #0 /code/web/modules/contrib/metatag/src/MetatagManager.php(284): uasort(NULL, Array)
    #1 /code/web/modules/contrib/metatag/src/MetatagManager.php(609): Drupal\metatag\MetatagManager->sortedTags()
    #2 /code/web/modules/contrib/metatag/src/MetatagManager.php(565): Drupal\metatag\MetatagManager->generateRawElements(Array, Object(Drupal\node\Entity\Node))
    #3 /code/web/modules/contrib/metatag/metatag.module(508): Drupal\metatag\MetatagManager->generateElements(Array, Object(Drupal\node\Entity\Node))
    #4 /code/web/modules/contrib/metatag/metatag.module(262): metatag_get_tags_from_route()
    #5 /code/web/modules/contrib/metatag/metatag.module(222): _metatag_remove_duplicate_entity_tags(Array)
    #6 /code/web/core/lib/Drupal/Core/Extension/ModuleHandler.php(552): metatag_entity_view_alter(Array, Object(Drupal\node\Entity\Node), Object(Drupal\Core\Entity\Entity\EntityViewDisplay))
    #7 /code/web/core/lib/Drupal/Core/Entity/EntityViewBuilder.php(305): Drupal\Core\Extension\ModuleHandler->alter('node_view', Array, Object(Drupal\node\Entity\Node), Object(Drupal\Core\Entity\Entity\EntityViewDisplay))
    #8 /code/web/core/lib/Drupal/Core/Entity/EntityViewBuilder.php(239): Drupal\Core\Entity\EntityViewBuilder->buildMultiple(Array)
    #9 [internal function]: Drupal\Core\Entity\EntityViewBuilder->build(Array)
    #10 /code/web/core/lib/Drupal/Core/Security/DoTrustedCallbackTrait.php(113): call_user_func_array(Array, Array)
    #11 /code/web/core/lib/Drupal/Core/Render/Renderer.php(870): Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_ren...', 'exception', 'Drupal\\Core\\Ren...')
    #12 /code/web/core/lib/Drupal/Core/Render/Renderer.php(432): Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array)
    #13 /code/web/core/lib/Drupal/Core/Render/Renderer.php(248): Drupal\Core\Render\Renderer->doRender(Array, false)
    #14 /code/web/core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php(238): Drupal\Core\Render\Renderer->render(Array, false)
    #15 /code/web/core/lib/Drupal/Core/Render/Renderer.php(638): Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}()
    #16 /code/web/core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php(231): Drupal\Core\Render\Renderer->executeInRenderContext(Object(Drupal\Core\Render\RenderContext), Object(Closure))
    #17 /code/web/core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php(128): Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object(Symfony\Component\HttpFoundation\Request), Object(Drupal\Core\Routing\CurrentRouteMatch))
    #18 /code/web/core/lib/Drupal/Core/EventSubscriber/MainContentViewSubscriber.php(90): Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object(Symfony\Component\HttpFoundation\Request), Object(Drupal\Core\Routing\CurrentRouteMatch))
    #19 [internal function]: Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object(Symfony\Component\HttpKernel\Event\ViewEvent), 'kernel.view', Object(Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher))
    #20 /code/web/core/lib/Drupal/Component/EventDispatcher/ContainerAwareEventDispatcher.php(111): call_user_func(Array, Object(Symfony\Component\HttpKernel\Event\ViewEvent), 'kernel.view', Object(Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher))
    #21 /code/vendor/symfony/http-kernel/HttpKernel.php(186): Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object(Symfony\Component\HttpKernel\Event\ViewEvent), 'kernel.view')
    #22 /code/vendor/symfony/http-kernel/HttpKernel.php(76): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1)
    #23 /code/web/core/lib/Drupal/Core/StackMiddleware/Session.php(53): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
    #24 /code/web/core/lib/Drupal/Core/StackMiddleware/KernelPreHandle.php(48): Drupal\Core\StackMiddleware\Session->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
    #25 /code/web/core/lib/Drupal/Core/StackMiddleware/ContentLength.php(28): Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
    #26 /code/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(191): Drupal\Core\StackMiddleware\ContentLength->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
    #27 /code/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(128): Drupal\page_cache\StackMiddleware\PageCache->fetch(Object(Symfony\Component\HttpFoundation\Request), 1, true)
    #28 /code/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(82): Drupal\page_cache\StackMiddleware\PageCache->lookup(Object(Symfony\Component\HttpFoundation\Request), 1, true)
    #29 /code/web/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php(48): Drupal\page_cache\StackMiddleware\PageCache->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
    #30 /code/web/core/lib/Drupal/Core/StackMiddleware/NegotiationMiddleware.php(51): Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
    #31 /code/web/core/lib/Drupal/Core/StackMiddleware/AjaxPageState.php(36): Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
    #32 /code/web/core/lib/Drupal/Core/StackMiddleware/StackedHttpKernel.php(51): Drupal\Core\StackMiddleware\AjaxPageState->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
    #33 /code/web/core/lib/Drupal/Core/DrupalKernel.php(741): Drupal\Core\StackMiddleware\StackedHttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
    #34 /code/web/index.php(19): Drupal\Core\DrupalKernel->handle(Object(Symfony\Component\HttpFoundation\Request))
    #35 {main}
    
Production build 0.71.5 2024