replaceSmiliesHtml template compilation error

ivp

Active member
Affected version
2.3.5
After upgrade from 2.2.17 to 2.3.5 seeing couple of errors shown below.

I've attached example content causing the issue. Avoid using copy&paste, but import the file just like it is, just change post_id.

Code:
TypeError: Macro public:post_macros :: post_user_content() error: XF\Str\Formatter::replaceSmiliesHtml(): Argument #1 ($text) must be of type string, null given, called in /home/forum/src/XF/BbCode/Renderer/Html.php on line 448 src/XF/Str/Formatter.php:230

Stack trace
#0 src/XF/BbCode/Renderer/Html.php(448): XF\Str\Formatter->replaceSmiliesHtml(NULL, 'default')
#1 src/XF/BbCode/Renderer/Html.php(426): XF\BbCode\Renderer\Html->filterString(NULL, Array)
#2 src/XF/BbCode/Traverser.php(67): XF\BbCode\Renderer\Html->renderString([invalid], Array)
#3 src/XF/BbCode/Traverser.php(39): XF\BbCode\Traverser->renderSubTree(Array, Array)
#4 src/XF/BbCode/Traverser.php(22): XF\BbCode\Traverser->renderAst(Array, Object(SV\SignupAbuseBlocking\XF\BbCode\RuleSet), Array)
#5 src/XF/SubContainer/BbCode.php(236): XF\BbCode\Traverser->render('[IMG]https://lh...', Object(XF\BbCode\Parser), Object(SV\SignupAbuseBlocking\XF\BbCode\RuleSet), Array)
#6 src/XF/Template/Templater.php(2608): XF\SubContainer\BbCode->render('[IMG]https://lh...', 'html', 'profile_post', Object(XF\Entity\ProfilePost), Array)
#7 src/XF/Template/Templater.php(1220): XF\Template\Templater->fnBbCode(Object(SV\StandardLib\XF\Template\Templater), false, '[IMG]https://lh...', 'profile_post', Object(XF\Entity\ProfilePost))
#8 internal_data/code_cache/templates/l2/s2/public/profile_post_macros.php(131): XF\Template\Templater->func('bb_code', Array, false)
#9 src/XF/Template/Templater.php(922): XF\Template\Templater->{closure}(Object(SV\StandardLib\XF\Template\Templater), Array, NULL)
#10 internal_data/code_cache/templates/l2/s2/public/member_view.php(403): XF\Template\Templater->callMacro('profile_post_ma...', 'profile_post', Array, Array)
#11 src/XF/Template/Templater.php(1800): XF\Template\Templater->{closure}(Object(SV\StandardLib\XF\Template\Templater), Array, NULL)
#12 src/addons/MaZ/AUN/XF/Template/Templater.php(39): XF\Template\Templater->renderTemplate('member_view', Array, true, NULL)
#13 src/XF/Template/Template.php(24): MaZ\AUN\XF\Template\Templater->renderTemplate('public:member_v...', Array)
#14 src/XF/Mvc/Renderer/Html.php(50): XF\Template\Template->render()
#15 src/XF/Mvc/Dispatcher.php(471): XF\Mvc\Renderer\Html->renderView('XF:Member\\View', 'public:member_v...', Array)
#16 src/XF/Mvc/Dispatcher.php(453): XF\Mvc\Dispatcher->renderView(Object(XF\Mvc\Renderer\Html), Object(XF\Mvc\Reply\View))
#17 src/XF/Mvc/Dispatcher.php(412): XF\Mvc\Dispatcher->renderReply(Object(XF\Mvc\Renderer\Html), Object(XF\Mvc\Reply\View))
#18 src/XF/Mvc/Dispatcher.php(66): XF\Mvc\Dispatcher->render(Object(XF\Mvc\Reply\View), 'html')
#19 src/XF/App.php(2826): XF\Mvc\Dispatcher->run()
#20 src/XF.php(806): XF\App->run()
#21 index.php(23): XF::runApp('XF\\Pub\\App')
#22 {main}

Request state
array(4) {
  ["url"] => string(56) "/threads/abc.779796/page-2"
  ["referrer"] => bool(false)
  ["_GET"] => array(1) {
    ["/abc_779796/page-2"] => string(0) ""
  }
  ["_POST"] => array(0) {
  }
}

Code:
TypeError: Macro public:profile_post_macros :: profile_post() error: XF\Str\Formatter::replaceSmiliesHtml(): Argument #1 ($text) must be of type string, null given, called in /home/forum/src/XF/BbCode/Renderer/Html.php on line 448 src/XF/Str/Formatter.php:230

Stack trace
#0 src/XF/BbCode/Renderer/Html.php(448): XF\Str\Formatter->replaceSmiliesHtml(NULL, 'default')
#1 src/XF/BbCode/Renderer/Html.php(426): XF\BbCode\Renderer\Html->filterString(NULL, Array)
#2 src/XF/BbCode/Traverser.php(67): XF\BbCode\Renderer\Html->renderString([invalid], Array)
#3 src/XF/BbCode/Traverser.php(39): XF\BbCode\Traverser->renderSubTree(Array, Array)
#4 src/XF/BbCode/Traverser.php(22): XF\BbCode\Traverser->renderAst(Array, Object(SV\SignupAbuseBlocking\XF\BbCode\RuleSet), Array)
#5 src/XF/SubContainer/BbCode.php(236): XF\BbCode\Traverser->render('[IMG]https://lh...', Object(XF\BbCode\Parser), Object(SV\SignupAbuseBlocking\XF\BbCode\RuleSet), Array)
#6 src/XF/Template/Templater.php(2608): XF\SubContainer\BbCode->render('[IMG]https://lh...', 'html', 'profile_post', Object(XF\Entity\ProfilePost), Array)
#7 src/XF/Template/Templater.php(1220): XF\Template\Templater->fnBbCode(Object(SV\StandardLib\XF\Template\Templater), false, '[IMG]https://lh...', 'profile_post', Object(XF\Entity\ProfilePost))
#8 internal_data/code_cache/templates/l2/s2/public/profile_post_macros.php(131): XF\Template\Templater->func('bb_code', Array, false)
#9 src/XF/Template/Templater.php(922): XF\Template\Templater->{closure}(Object(SV\StandardLib\XF\Template\Templater), Array, NULL)
#10 internal_data/code_cache/templates/l2/s2/public/member_view.php(403): XF\Template\Templater->callMacro('profile_post_ma...', 'profile_post', Array, Array)
#11 src/XF/Template/Templater.php(1800): XF\Template\Templater->{closure}(Object(SV\StandardLib\XF\Template\Templater), Array, NULL)
#12 src/addons/MaZ/AUN/XF/Template/Templater.php(39): XF\Template\Templater->renderTemplate('member_view', Array, true, NULL)
#13 src/XF/Template/Template.php(24): MaZ\AUN\XF\Template\Templater->renderTemplate('public:member_v...', Array)
#14 src/XF/Mvc/Renderer/Html.php(50): XF\Template\Template->render()
#15 src/XF/Mvc/Dispatcher.php(471): XF\Mvc\Renderer\Html->renderView('XF:Member\\View', 'public:member_v...', Array)
#16 src/XF/Mvc/Dispatcher.php(453): XF\Mvc\Dispatcher->renderView(Object(XF\Mvc\Renderer\Html), Object(XF\Mvc\Reply\View))
#17 src/XF/Mvc/Dispatcher.php(412): XF\Mvc\Dispatcher->renderReply(Object(XF\Mvc\Renderer\Html), Object(XF\Mvc\Reply\View))
#18 src/XF/Mvc/Dispatcher.php(66): XF\Mvc\Dispatcher->render(Object(XF\Mvc\Reply\View), 'html')
#19 src/XF/App.php(2826): XF\Mvc\Dispatcher->run()
#20 src/XF.php(806): XF\App->run()
#21 index.php(23): XF::runApp('XF\\Pub\\App')
#22 {main}

Request state
array(4) {
  ["url"] => string(32) "/members/abc.387717/page-57"
  ["referrer"] => bool(false)
  ["_GET"] => array(1) {
    ["/members/abc_387717/page-57"] => string(0) ""
  }
  ["_POST"] => array(0) {
  }
}
 

Attachments

Here's a quick-and-dirty fix for cleaning up badly encoded messages.

Important: It forces conversion to Latin characters and strips everything else.

List such messages:
Code:
SELECT
    post_id,
    message    
FROM
    xf_post
WHERE
    message LIKE BINARY CONCAT('%', _binary 0xed, '%');
    
SELECT
    profile_post_id,
    message
FROM
    xf_profile_post
WHERE
    message LIKE BINARY CONCAT('%', _binary 0xed, '%');

SELECT
    profile_post_comment_id,
    message
FROM
    xf_profile_post_comment
WHERE
    message LIKE BINARY CONCAT('%', _binary 0xed, '%');

SELECT
    message_id,
    message
FROM
    xf_conversation_message
WHERE
    message LIKE BINARY CONCAT('%', _binary 0xed, '%');

Fix such messages:
Code:
UPDATE
    xf_post
SET
    message = CONVERT(
        CONVERT(message USING latin1) USING utf8mb4
    )
WHERE
    message LIKE BINARY CONCAT('%', _binary 0xed, '%');
    
UPDATE
    xf_profile_post
SET
    message = CONVERT(
        CONVERT(message USING latin1) USING utf8mb4
    )
WHERE
    message LIKE BINARY CONCAT('%', _binary 0xed, '%');

UPDATE
    xf_profile_post_comment
SET
    message = CONVERT(
        CONVERT(message USING latin1) USING utf8mb4
    )
WHERE
    message LIKE BINARY CONCAT('%', _binary 0xed, '%');

UPDATE
    xf_conversation_message
SET
    message = CONVERT(
        CONVERT(message USING latin1) USING utf8mb4
    )
WHERE
    message LIKE BINARY CONCAT('%', _binary 0xed, '%');
 
Back
Top Bottom