Steps to replicate the issue:
- Enable GlobalUserrights
- Run maintenance/wikiBirthday.php
- PHP got killed due to OOM.
- Re-run with memprof enabled and got a stack overflow error. (idk why PHP formerly gave only the OOM error)
The stack trace looks like this:
#34626 /opt/mediawiki/includes/HookContainer/HookContainer.php(155): GlobalUserrightsHooks::onUserEffectiveGroups(MediaWiki\User\User, array)
#34627 /opt/mediawiki/includes/HookContainer/HookRunner.php(4298): MediaWiki\HookContainer\HookContainer->run(string, array)
#34628 /opt/mediawiki/includes/user/UserGroupManager.php(343): MediaWiki\HookContainer\HookRunner->onUserEffectiveGroups(MediaWiki\User\User, array)
#34629 /opt/mediawiki/includes/Permissions/PermissionManager.php(1588): MediaWiki\User\UserGroupManager->getUserEffectiveGroups(MediaWiki\User\User)
#34630 /opt/mediawiki/includes/Permissions/PermissionManager.php(1539): MediaWiki\Permissions\PermissionManager->getUserPermissions(MediaWiki\User\User)
#34631 /opt/mediawiki/includes/Permissions/UserAuthority.php(285): MediaWiki\Permissions\PermissionManager->userHasRight(MediaWiki\User\User, string)
#34632 /opt/mediawiki/includes/Permissions/UserAuthority.php(144): MediaWiki\Permissions\UserAuthority->internalAllowed(string, null, bool, null)
#34633 /opt/mediawiki/includes/user/User.php(2218): MediaWiki\Permissions\UserAuthority->isAllowed(string, null)
#34634 /opt/mediawiki/includes/user/CentralId/LocalIdLookup.php(152): MediaWiki\User\User->isAllowed(string)
#34635 /opt/mediawiki/includes/user/CentralId/CentralIdLookup.php(226): MediaWiki\User\CentralId\LocalIdLookup->lookupUserNamesWithFilter(array, string, MediaWiki\User\User, int, bool)
#34636 /opt/mediawiki/includes/user/CentralId/CentralIdLookup.php(375): MediaWiki\User\CentralId\CentralIdLookup->lookupAttachedUserNames(array, int, int)
#34637 /opt/mediawiki/extensions/GlobalUserrights/includes/GlobalUserrightsHooks.php(33): MediaWiki\User\CentralId\CentralIdLookup->centralIdFromLocalUser(MediaWiki\User\User)
#34638 /opt/mediawiki/extensions/GlobalUserrights/includes/GlobalUserrightsHooks.php(15): GlobalUserrightsHooks::getGroupMemberships(MediaWiki\User\User)
#34639 /opt/mediawiki/extensions/GlobalUserrights/includes/GlobalUserrightsHooks.php(58): GlobalUserrightsHooks::getGroups(MediaWiki\User\User)
#34640 /opt/mediawiki/includes/HookContainer/HookContainer.php(155): GlobalUserrightsHooks::onUserEffectiveGroups(MediaWiki\User\User, array)
#34641 /opt/mediawiki/includes/HookContainer/HookRunner.php(4298): MediaWiki\HookContainer\HookContainer->run(string, array)
#34642 /opt/mediawiki/includes/user/UserGroupManager.php(343): MediaWiki\HookContainer\HookRunner->onUserEffectiveGroups(MediaWiki\User\User, array)
#34643 /opt/mediawiki/includes/user/Options/ConditionalDefaultsLookup.php(160): MediaWiki\User\UserGroupManager->getUserEffectiveGroups(MediaWiki\User\User)
#34644 /opt/mediawiki/includes/user/Options/ConditionalDefaultsLookup.php(110): MediaWiki\User\Options\ConditionalDefaultsLookup->checkConditionForUser(MediaWiki\User\User, array)
#34645 /opt/mediawiki/includes/user/Options/ConditionalDefaultsLookup.php(93): MediaWiki\User\Options\ConditionalDefaultsLookup->checkConditionsForUser(MediaWiki\User\User, array)
#34646 /opt/mediawiki/includes/user/Options/DefaultOptionsLookup.php(146): MediaWiki\User\Options\ConditionalDefaultsLookup->getOptionDefaultForUser(string, MediaWiki\User\User)
#34647 /opt/mediawiki/includes/user/Options/UserOptionsManager.php(550): MediaWiki\User\Options\DefaultOptionsLookup->getDefaultOptions(MediaWiki\User\User)
#34648 /opt/mediawiki/includes/user/Options/UserOptionsManager.php(452): MediaWiki\User\Options\UserOptionsManager->loadOriginalOptions(MediaWiki\User\User, int)
#34649 /opt/mediawiki/includes/user/Options/UserOptionsManager.php(177): MediaWiki\User\Options\UserOptionsManager->loadUserOptions(MediaWiki\User\User, int)
#34650 /opt/mediawiki/includes/utils/MWTimestamp.php(68): MediaWiki\User\Options\UserOptionsManager->getOption(MediaWiki\User\User, string)
#34651 /opt/mediawiki/includes/language/Language.php(2748): MediaWiki\Utils\MWTimestamp->offsetForUser(MediaWiki\User\User)
#34652 /opt/mediawiki/maintenance/wikiBirthday.php(87): MediaWiki\Language\Language->getHumanTimestamp(MediaWiki\Utils\MWTimestamp)
#34653 /opt/mediawiki/maintenance/includes/MaintenanceRunner.php(694): WikiBirthday->execute()
#34654 /opt/mediawiki/maintenance/doMaintenance.php(100): MediaWiki\Maintenance\MaintenanceRunner->run()
#34655 /opt/mediawiki/maintenance/wikiBirthday.php(100): require_once(string)
#34656 {main}The path is that, GlobalUserrights invokes central ID lookup for a user, LocalIdLookup checks if the anon user has right (hideuser) to see that user, then PermissionManager asks for effective groups of that user and calls GlobalUserrightsHooks again.
Software version: MW core a1726b7d5373e77df02b314f5c6f7a25b64204a6, GlobalUserrights d7f1a6a30fe368da2e700154262a8bef66514976 (from REL1_44)