Don't store QLibraryPrivate with empty file names in the global store
They shouldn't exist in the first place. They exist in two cases only: 1) mistake by the user in the QLibrary or QPluginLoader constructors or setFileName 2) as a kludge for setLoadHints before a file name is set (we need to store the user's requested hints somewhere) This is important for the second case, as otherwise all QLibrary and QPluginLoader objects without a file name would share the setting. Task-number: QTBUG-39642 Change-Id: Iebff0252fd4d95a1d54caf338d4e2fff4de3b189 Reviewed-by: David Faure <david.faure@kdab.com>
This commit is contained in:
parent
cfaf851e26
commit
f07c27eec1
@ -455,7 +455,7 @@ inline QLibraryPrivate *QLibraryStore::findOrCreate(const QString &fileName, con
|
|||||||
lib = new QLibraryPrivate(fileName, version, loadHints);
|
lib = new QLibraryPrivate(fileName, version, loadHints);
|
||||||
|
|
||||||
// track this library
|
// track this library
|
||||||
if (Q_LIKELY(data))
|
if (Q_LIKELY(data) && !fileName.isEmpty())
|
||||||
data->libraryMap.insert(fileName, lib);
|
data->libraryMap.insert(fileName, lib);
|
||||||
|
|
||||||
lib->libraryRefCount.ref();
|
lib->libraryRefCount.ref();
|
||||||
@ -475,7 +475,7 @@ inline void QLibraryStore::releaseLibrary(QLibraryPrivate *lib)
|
|||||||
// no one else is using
|
// no one else is using
|
||||||
Q_ASSERT(lib->libraryUnloadCount.load() == 0);
|
Q_ASSERT(lib->libraryUnloadCount.load() == 0);
|
||||||
|
|
||||||
if (Q_LIKELY(data)) {
|
if (Q_LIKELY(data) && !lib->fileName.isEmpty()) {
|
||||||
QLibraryPrivate *that = data->libraryMap.take(lib->fileName);
|
QLibraryPrivate *that = data->libraryMap.take(lib->fileName);
|
||||||
Q_ASSERT(lib == that);
|
Q_ASSERT(lib == that);
|
||||||
Q_UNUSED(that);
|
Q_UNUSED(that);
|
||||||
|
@ -456,6 +456,9 @@ void tst_QLibrary::loadHints()
|
|||||||
if (int(loadHints) != 0) {
|
if (int(loadHints) != 0) {
|
||||||
lh |= library.loadHints();
|
lh |= library.loadHints();
|
||||||
library.setLoadHints(lh);
|
library.setLoadHints(lh);
|
||||||
|
|
||||||
|
// confirm that another QLibrary doesn't get affected - QTBUG-39642
|
||||||
|
QCOMPARE(QLibrary().loadHints(), QLibrary::LoadHints());
|
||||||
}
|
}
|
||||||
library.setFileName(lib);
|
library.setFileName(lib);
|
||||||
QCOMPARE(library.loadHints(), lh);
|
QCOMPARE(library.loadHints(), lh);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user