QtLauncher::initApp: store argc to avoid crash
As QApplication only stores a reference to argc, it may crash if the argc passed to it goes out of scope. (One way to trigger this is to pass an invalid --fg-root, triggering an initApp call from Options::setupRoot.) Copy argc to prevent this.
This commit is contained in:
parent
660c38ce72
commit
9d0fe40a45
1 changed files with 5 additions and 1 deletions
|
@ -551,10 +551,14 @@ QtLauncher::~QtLauncher()
|
||||||
void QtLauncher::initApp(int& argc, char** argv)
|
void QtLauncher::initApp(int& argc, char** argv)
|
||||||
{
|
{
|
||||||
static bool qtInitDone = false;
|
static bool qtInitDone = false;
|
||||||
|
static int s_argc;
|
||||||
if (!qtInitDone) {
|
if (!qtInitDone) {
|
||||||
qtInitDone = true;
|
qtInitDone = true;
|
||||||
|
s_argc = argc; // QApplication only stores a reference to argc,
|
||||||
|
// and may crash if it is freed
|
||||||
|
// http://doc.qt.io/qt-5/qguiapplication.html#QGuiApplication
|
||||||
|
|
||||||
QApplication* app = new QApplication(argc, argv);
|
QApplication* app = new QApplication(s_argc, argv);
|
||||||
app->setOrganizationName("FlightGear");
|
app->setOrganizationName("FlightGear");
|
||||||
app->setApplicationName("FlightGear");
|
app->setApplicationName("FlightGear");
|
||||||
app->setOrganizationDomain("flightgear.org");
|
app->setOrganizationDomain("flightgear.org");
|
||||||
|
|
Loading…
Add table
Reference in a new issue