- Affected version
- 2.3.10
When trying to approve AMS articles in the queue, I'm hitting this error. I understand that this is a core XF bug.
InvalidArgumentException: XF\Job\ApprovalQueueProcess: Invalid string IP: src/XF/Util/Ip.php:25
Generated by: Unknown account May 1, 2026 at 2:32 PM
Stack trace
#0 src/XF/ModeratorLog/AbstractHandler.php(137): XF\Util\Ip::stringToBinary('')
#1 src/XF/ModeratorLog/AbstractHandler.php(118): XF\ModeratorLog\AbstractHandler->setupLogEntityActor(Object(SV\ModeratorEssentials\XF\Entity\ModeratorLog), Object(SV\ElasticSearchEssentials\XF\Entity\User))
#2 src/XF/ModeratorLog/AbstractHandler.php(92): XF\ModeratorLog\AbstractHandler->log(Object(SV\ElasticSearchEssentials\XenAddons\AMS\Entity\ArticleItem), 'approve', Array, Object(SV\ElasticSearchEssentials\XF\Entity\User))
#3 src/XF/ModeratorLog/Logger.php(79): XF\ModeratorLog\AbstractHandler->logChange(Object(SV\ElasticSearchEssentials\XenAddons\AMS\Entity\ArticleItem), 'article_state', 'visible', 'moderated', Object(SV\ElasticSearchEssentials\XF\Entity\User))
#4 src/XF/Logger.php(49): XF\ModeratorLog\Logger->logChanges('ams_article', Object(SV\ElasticSearchEssentials\XenAddons\AMS\Entity\ArticleItem), true)
#5 src/addons/SV/UserEssentials/XF/Logger.php(157): XF\Logger->logModeratorChanges('ams_article', Object(SV\ElasticSearchEssentials\XenAddons\AMS\Entity\ArticleItem), true)
#6 src/addons/SV/UserEssentials/XF/Logger.php(128): SV\UserEssentials\XF\Logger->SV\UserEssentials\XF\{closure}()
#7 src/addons/SV/UserEssentials/XF/Logger.php(156): SV\UserEssentials\XF\Logger->shimLogAction(Object(Closure), 'ams_article', Object(SV\ElasticSearchEssentials\XenAddons\AMS\Entity\ArticleItem), false, true)
#8 src/addons/XenAddons/AMS/Entity/ArticleItem.php(2606): SV\UserEssentials\XF\Logger->logModeratorChanges('ams_article', Object(SV\ElasticSearchEssentials\XenAddons\AMS\Entity\ArticleItem))
#9 src/XF/Mvc/Entity/Entity.php(1330): XenAddons\AMS\Entity\ArticleItem->_postSave()
#10 src/addons/XenAddons/AMS/Service/ArticleItem/Approve.php(39): XF\Mvc\Entity\Entity->save()
#11 src/addons/XenAddons/AMS/ApprovalQueue/Article.php(28): XenAddons\AMS\Service\ArticleItem\Approve->approve()
#12 src/XF/ApprovalQueue/AbstractHandler.php(202): XenAddons\AMS\ApprovalQueue\Article->actionApprove(Object(SV\ElasticSearchEssentials\XenAddons\AMS\Entity\ArticleItem))
#13 src/XF/Job/ApprovalQueueProcess.php(71): XF\ApprovalQueue\AbstractHandler->performAction('approve', Object(SV\ElasticSearchEssentials\XenAddons\AMS\Entity\ArticleItem))
#14 src/XF.php(914): XF\Job\ApprovalQueueProcess->XF\Job\{closure}()
#15 src/XF/Job/ApprovalQueueProcess.php(57): XF::asVisitor(Object(SV\ElasticSearchEssentials\XF\Entity\User), Object(Closure))
#16 src/XF/Job/Manager.php(275): XF\Job\ApprovalQueueProcess->run(44.9935)
#17 src/XF/Job/Manager.php(205): XF\Job\Manager->runJobInternal(Array, 44.9935)
#18 src/XF/Job/Manager.php(89): XF\Job\Manager->runJobEntry(Array, 44.9935)
#19 src/XF/Cli/Command/RunJobs.php(58): XF\Job\Manager->runQueue(false, 45)
#20 src/vendor/symfony/console/Command/Command.php(298): XF\Cli\Command\RunJobs->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#21 src/vendor/symfony/console/Application.php(1040): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#22 src/vendor/symfony/console/Application.php(301): Symfony\Component\Console\Application->doRunCommand(Object(XF\Cli\Command\RunJobs), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#23 src/vendor/symfony/console/Application.php(171): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#24 src/XF/Cli/Runner.php(115): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#25 cmd.php(17): XF\Cli\Runner->run()
#26 {main}
Request state
array(1) {
["cli"] => string(62) "/cmd.php xf:run-jobs"
}
it seems related to this resolved bug:
And this report:
By default stringToBinary will throw if passed an invalid IP, but
InvalidArgumentException: XF\Job\ApprovalQueueProcess: Invalid string IP: src/XF/Util/Ip.php:25
Generated by: Unknown account May 1, 2026 at 2:32 PM
Stack trace
#0 src/XF/ModeratorLog/AbstractHandler.php(137): XF\Util\Ip::stringToBinary('')
#1 src/XF/ModeratorLog/AbstractHandler.php(118): XF\ModeratorLog\AbstractHandler->setupLogEntityActor(Object(SV\ModeratorEssentials\XF\Entity\ModeratorLog), Object(SV\ElasticSearchEssentials\XF\Entity\User))
#2 src/XF/ModeratorLog/AbstractHandler.php(92): XF\ModeratorLog\AbstractHandler->log(Object(SV\ElasticSearchEssentials\XenAddons\AMS\Entity\ArticleItem), 'approve', Array, Object(SV\ElasticSearchEssentials\XF\Entity\User))
#3 src/XF/ModeratorLog/Logger.php(79): XF\ModeratorLog\AbstractHandler->logChange(Object(SV\ElasticSearchEssentials\XenAddons\AMS\Entity\ArticleItem), 'article_state', 'visible', 'moderated', Object(SV\ElasticSearchEssentials\XF\Entity\User))
#4 src/XF/Logger.php(49): XF\ModeratorLog\Logger->logChanges('ams_article', Object(SV\ElasticSearchEssentials\XenAddons\AMS\Entity\ArticleItem), true)
#5 src/addons/SV/UserEssentials/XF/Logger.php(157): XF\Logger->logModeratorChanges('ams_article', Object(SV\ElasticSearchEssentials\XenAddons\AMS\Entity\ArticleItem), true)
#6 src/addons/SV/UserEssentials/XF/Logger.php(128): SV\UserEssentials\XF\Logger->SV\UserEssentials\XF\{closure}()
#7 src/addons/SV/UserEssentials/XF/Logger.php(156): SV\UserEssentials\XF\Logger->shimLogAction(Object(Closure), 'ams_article', Object(SV\ElasticSearchEssentials\XenAddons\AMS\Entity\ArticleItem), false, true)
#8 src/addons/XenAddons/AMS/Entity/ArticleItem.php(2606): SV\UserEssentials\XF\Logger->logModeratorChanges('ams_article', Object(SV\ElasticSearchEssentials\XenAddons\AMS\Entity\ArticleItem))
#9 src/XF/Mvc/Entity/Entity.php(1330): XenAddons\AMS\Entity\ArticleItem->_postSave()
#10 src/addons/XenAddons/AMS/Service/ArticleItem/Approve.php(39): XF\Mvc\Entity\Entity->save()
#11 src/addons/XenAddons/AMS/ApprovalQueue/Article.php(28): XenAddons\AMS\Service\ArticleItem\Approve->approve()
#12 src/XF/ApprovalQueue/AbstractHandler.php(202): XenAddons\AMS\ApprovalQueue\Article->actionApprove(Object(SV\ElasticSearchEssentials\XenAddons\AMS\Entity\ArticleItem))
#13 src/XF/Job/ApprovalQueueProcess.php(71): XF\ApprovalQueue\AbstractHandler->performAction('approve', Object(SV\ElasticSearchEssentials\XenAddons\AMS\Entity\ArticleItem))
#14 src/XF.php(914): XF\Job\ApprovalQueueProcess->XF\Job\{closure}()
#15 src/XF/Job/ApprovalQueueProcess.php(57): XF::asVisitor(Object(SV\ElasticSearchEssentials\XF\Entity\User), Object(Closure))
#16 src/XF/Job/Manager.php(275): XF\Job\ApprovalQueueProcess->run(44.9935)
#17 src/XF/Job/Manager.php(205): XF\Job\Manager->runJobInternal(Array, 44.9935)
#18 src/XF/Job/Manager.php(89): XF\Job\Manager->runJobEntry(Array, 44.9935)
#19 src/XF/Cli/Command/RunJobs.php(58): XF\Job\Manager->runQueue(false, 45)
#20 src/vendor/symfony/console/Command/Command.php(298): XF\Cli\Command\RunJobs->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#21 src/vendor/symfony/console/Application.php(1040): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#22 src/vendor/symfony/console/Application.php(301): Symfony\Component\Console\Application->doRunCommand(Object(XF\Cli\Command\RunJobs), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#23 src/vendor/symfony/console/Application.php(171): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#24 src/XF/Cli/Runner.php(115): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#25 cmd.php(17): XF\Cli\Runner->run()
#26 {main}
Request state
array(1) {
["cli"] => string(62) "/cmd.php xf:run-jobs"
}
it seems related to this resolved bug:
Server Info:
PHP 8.3.29
10.6.24-MariaDB
Tested on my test forum with no addons.
Steps to reproduce:

The screen will return the error:
The server error log will have:
PHP 8.3.29
10.6.24-MariaDB
Tested on my test forum with no addons.
Steps to reproduce:
- Enable Writing before registering.
- From a logged out account, write a reply and hit Post Reply.
- Click the Login button.

The screen will return the error:
A server error occurred. Please try again later.
The server error log will have:
Code:
ValueError: inet_pton(): Argument #1 ($ip) must not contain any null bytes src/XF/Util/Ip.php:14
Generated by: Unknown account Jan 16, 2026 at 9:58 PM
Stack trace
#0...
- M@rc
- Replies: 23
- Forum: Resolved bug reports
And this report:
PHP:
protected function setupLogEntityActor(ModeratorLog $log, User $actor)
{
$log->user_id = $actor->user_id ?? 0;
if ($actor->user_id == \XF::visitor()->user_id)
{
$log->ip_address = Ip::stringToBinary(\XF::app()->request()->getIp());
}
}
By default stringToBinary will throw if passed an invalid IP, but
ModeratorLog will accept an empty ip address for example if this code gets invoked from the CLI where no IP address for the request exists.- Xon
- Replies: 0
- Forum: Bug reports