Monroe Linden avatar Monroe Linden committed 684de17

Fix for a crash on startup/shutdown introduced in the tip of viewer-2-0 very recently.

list.erase(list.find()) is not safe, because erasing list.end() is undefined. Check to make sure the find succeeded before doing the erase.

Reviewed by Richard at http://codereview.lindenlab.com/341001

Comments (0)

Files changed (1)

indra/newview/llpopupview.cpp

 {
 	if (popup)
 	{
-		mPopups.erase(std::find(mPopups.begin(), mPopups.end(), popup->getHandle()));
+		popup_list_t::iterator iter = std::find(mPopups.begin(), mPopups.end(), popup->getHandle());
+		if(iter != mPopups.end())
+		{
+			mPopups.erase(iter);
+		}
 		mPopups.push_front(popup->getHandle());
 	}
 }
 		{
 			gFocusMgr.setKeyboardFocus(NULL);
 		}
-		mPopups.erase(std::find(mPopups.begin(), mPopups.end(), popup->getHandle()));
+		popup_list_t::iterator iter = std::find(mPopups.begin(), mPopups.end(), popup->getHandle());
+		if(iter != mPopups.end())
+		{
+			mPopups.erase(iter);
+		}
 		popup->onTopLost();
 	}
 }
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.