summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel/qcoreapplication.cpp
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@theqtcompany.com>2015-06-11 10:23:52 +0200
committerFriedemann Kleint <Friedemann.Kleint@theqtcompany.com>2015-06-11 10:32:48 +0000
commit05dcc0499bfae43b8ae4100ab71902a13dd40f74 (patch)
treeef32ac5108e804ebf2b1a9c1d5d254ff0fca9fe2 /src/corelib/kernel/qcoreapplication.cpp
parent0b8cb39d341eee30f806a8bf7bb2b77650086d8a (diff)
QCoreApplication::applicationFilePath(): Fix array bounds violation of argv.
Check for argc > 0 before accessing argv[0]. tst_qapplication constructs QApplication(0, 0) and has been observed to crash sporadically. Fix valgrind error: =9845== Conditional jump or move depends on uninitialised value(s) ==9845== at 0x4C2F1BC: strcmp (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==9845== by 0x5DEEFB3: qstrcmp(char const*, char const*) (qbytearray.cpp:262) ==9845== by 0x6011EAA: QCoreApplication::applicationFilePath() (qcoreapplication.cpp:2058) ==9845== by 0x6011D0B: QCoreApplication::applicationDirPath() (qcoreapplication.cpp:2029) ==9845== by 0x5DD285D: QLibraryInfoPrivate::findConfiguration() (qlibraryinfo.cpp:184) ==9845== by 0x5DD32AF: QLibraryInfo::platformPluginArguments(QString const&) (qlibraryinfo.cpp:596) ==9845== by 0x5746A95: init_platform(QString const&, QString const&, QString const&, int&, char**) (qguiapplication.cpp:1017) ==9845== by 0x5747C91: QGuiApplicationPrivate::createPlatformIntegration() (qguiapplication.cpp:1177) ==9845== by 0x5747DDE: QGuiApplicationPrivate::createEventDispatcher() (qguiapplication.cpp:1194) ==9845== by 0x4FAF81D: QApplicationPrivate::createEventDispatcher() (qapplication.cpp:196) ==9845== by 0x600F568: QCoreApplication::init() (qcoreapplication.cpp:768) ==9845== by 0x600F2C4: QCoreApplication::QCoreApplication(QCoreApplicationPrivate&) (qcoreapplication.cpp:689) ==9845== by 0x574594C: QGuiApplication::QGuiApplication(QGuiApplicationPrivate&) (qguiapplication.cpp:570) ==9845== by 0x4FB008A: QApplication::QApplication(int&, char**, int) (qapplication.cpp:569) ==9845== by 0x41148A: tst_QApplication::lastWindowClosed() (tst_qapplication.cpp:561) Change-Id: I2fb324ab63617f14f5f43835154aae339bfa9520 Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
Diffstat (limited to 'src/corelib/kernel/qcoreapplication.cpp')
-rw-r--r--src/corelib/kernel/qcoreapplication.cpp12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp
index b6f839d554..34dad73c80 100644
--- a/src/corelib/kernel/qcoreapplication.cpp
+++ b/src/corelib/kernel/qcoreapplication.cpp
@@ -2054,11 +2054,13 @@ QString QCoreApplication::applicationFilePath()
QCoreApplicationPrivate *d = self->d_func();
- static char *procName = d->argv[0];
- if (qstrcmp(procName, d->argv[0]) != 0) {
- // clear the cache if the procname changes, so we reprocess it.
- QCoreApplicationPrivate::clearApplicationFilePath();
- procName = d->argv[0];
+ if (d->argc) {
+ static const char *procName = d->argv[0];
+ if (qstrcmp(procName, d->argv[0]) != 0) {
+ // clear the cache if the procname changes, so we reprocess it.
+ QCoreApplicationPrivate::clearApplicationFilePath();
+ procName = d->argv[0];
+ }
}
if (QCoreApplicationPrivate::cachedApplicationFilePath)