diff --git a/indra/llui/llemojihelper.cpp b/indra/llui/llemojihelper.cpp
index a8714ba7d0..677ee2979c 100644
--- a/indra/llui/llemojihelper.cpp
+++ b/indra/llui/llemojihelper.cpp
@@ -103,20 +103,39 @@ void LLEmojiHelper::showHelper(LLUICtrl* hostctrl_p, S32 local_x, S32 local_y, c
if (mHelperHandle.isDead())
{
LLFloater* pHelperFloater = LLFloaterReg::getInstance(DEFAULT_EMOJI_HELPER_FLOATER);
+ // Try to prevent failed build of emoji picker from killing the viewer.
+ if(pHelperFloater)
+ {
+ //
mHelperHandle = pHelperFloater->getHandle();
mHelperCommitConn = pHelperFloater->setCommitCallback(std::bind([&](const LLSD& sdValue) { onCommitEmoji(utf8str_to_wstring(sdValue.asStringRef())[0]); }, std::placeholders::_2));
+ // Try to prevent failed build of emoji picker from killing the viewer.
+ }
+ else
+ {
+ LL_WARNS() << "Cannot show emoji helper, reason unknown." << LL_ENDL;
+ return;
+ }
+ //
}
setHostCtrl(hostctrl_p);
mEmojiCommitCb = cb;
- S32 floater_x, floater_y;
- if (!hostctrl_p->localPointToOtherView(local_x, local_y, &floater_x, &floater_y, gFloaterView))
+ S32 floater_x=0, floater_y=0;// initialise to avoid warnings
+ if (hostctrl_p && !hostctrl_p->localPointToOtherView(local_x, local_y, &floater_x, &floater_y, gFloaterView))// another unchecked pointer access
{
- LL_ERRS() << "Cannot show emoji helper for non-floater controls." << LL_ENDL;
+ LL_WARNS() << "Cannot show emoji helper for non-floater controls." << LL_ENDL; // Is this really worth crashing over?
return;
}
LLFloater* pHelperFloater = mHelperHandle.get();
+ // Be a bit paranoid - the previous code should have ensured this or returned.
+ if (!pHelperFloater)
+ {
+ LL_WARNS() << "Helper floater unexpectedly null." << LL_ENDL;
+ return;
+ }
+ //
LLRect rect = pHelperFloater->getRect();
S32 left = floater_x - HELPER_FLOATER_OFFSET_X;
S32 top = floater_y - HELPER_FLOATER_OFFSET_Y + rect.getHeight();