Finder::getCollectionFromResults doesn't check hydrateFromGrouped's return result is not null

Xon

Well-known member
Affected version
2.3.7
PHP:
while ($row = $results->fetchAliasGrouped())
{
    $entity = $this->em->hydrateFromGrouped($row, $map);
    $id = $keyedBy ? $keyedBy($entity) : $entity->getIdentifier();

Tracing from hydrateFromGrouped, instantiateEntity can return null which may cause hydrateFromGrouped to return null in a wonky edge case. That will make the call to Entity::getIdentifier() fail and really doesn't make any sense to pass to $keyedBy which probably expects the argument to be non-null too.

Adding if ($entity === null) { continue; } after the hydrateFromGrouped call and then updating hydrateFromGrouped return type hint to be nullable would fix this.

Source user bug report, my code is just calling NewPosts::render() and inserts some data into the return WidgetRenderer object
Code:
Sunucu hata günlüğü
Error: Error rendering widget: Call to a member function getIdentifier() on null src/XF/Mvc/Entity/Finder.php:1497
Tarafından: Bilinmeyen hesap 1 Ocak 2026 07:20'de
Yığın izleme
#0 src/XF/Mvc/Entity/Finder.php(1450): XF\Mvc\Entity\Finder->getCollectionFromResults(Object(XF\Db\Mysqli\Statement))
#1 src/XF/Widget/NewPosts.php(93): XF\Mvc\Entity\Finder->fetch()
#2 src/addons/SV/UserActivity/WidgetUserCountActivityInjector.php(59): XF\Widget\NewPosts->render()
#3 internal_data/code_cache/widgets/_52_x10.php(5): SV\UserActivity\XF\Widget\NewPosts->render()
#4 src/XF/Template/Templater.php(8197): XF\SubContainer\Widget->{closure}(Object(SV\StandardLib\XF\Template\Templater), Array, Array)
#5 src/XF/SubContainer/Widget.php(176): XF\Template\Templater->renderWidgetClosure(Object(Closure), Array)
#6 src/XF/Template/Templater.php(2144): XF\SubContainer\Widget->getCompiledWidget(Array, Array)
#7 internal_data/code_cache/templates/l2/s29/public/thread_view.php(1459): XF\Template\Templater->widgetPosition('thread_view_sid...', Array)
#8 src/XF/Template/Templater.php(1799): XF\Template\Templater->{closure}(Object(SV\StandardLib\XF\Template\Templater), Array, Object(XF\Template\ExtensionSet))
#9 src/addons/Apocalypse/SMSConfirmation/XF/Template/Templater.php(0): XF\Template\Templater->renderTemplate('thread_view', Array, true, NULL)
#10 src/XF/Template/Template.php(24): Apocalypse\SMSConfirmation\XF\Template\Templater->renderTemplate('public:thread_v...', Array)
#11 src/XF/Mvc/Renderer/Html.php(50): XF\Template\Template->render()
#12 src/XF/Mvc/Dispatcher.php(471): XF\Mvc\Renderer\Html->renderView('XF:Thread\\View', 'public:thread_v...', Array)
#13 src/XF/Mvc/Dispatcher.php(453): XF\Mvc\Dispatcher->renderView(Object(XF\Mvc\Renderer\Html), Object(XF\Mvc\Reply\View))
#14 src/XF/Mvc/Dispatcher.php(412): XF\Mvc\Dispatcher->renderReply(Object(XF\Mvc\Renderer\Html), Object(XF\Mvc\Reply\View))
#15 src/XF/Mvc/Dispatcher.php(66): XF\Mvc\Dispatcher->render(Object(XF\Mvc\Reply\View), 'html')
#16 src/XF/App.php(2824): XF\Mvc\Dispatcher->run()
#17 src/XF.php(806): XF\App->run()
#18 index.php(23): XF::runApp('XF\\Pub\\App')
#19 {main}
Durum isteği
array(4) {
  ["url"] => string(50) "/konu/poco-x7-pro-iron-man-versiyonu-kirmizi.1194/"
  ["referrer"] => bool(false)
  ["_GET"] => array(0) {
  }
  ["_POST"] => array(0) {
  }
}
 
Back
Top Bottom