From edf8ef3b4d6eae065f0e4bcece2a15a7f5a25ecc Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Sun, 16 Jan 2022 20:07:42 +0200 Subject: [PATCH] open file exclusively for read/write in QSettingsPrivate::write() Signed-off-by: Ivailo Monev --- src/core/io/qsettings.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/core/io/qsettings.cpp b/src/core/io/qsettings.cpp index 69f210346..559bfe7ac 100644 --- a/src/core/io/qsettings.cpp +++ b/src/core/io/qsettings.cpp @@ -286,21 +286,23 @@ void QSettingsPrivate::write() } QMutexLocker locker(qSettingsMutex()); - QFile file(filename); - if (Q_UNLIKELY(!file.open(QFile::ReadWrite))) { + QFile writefile(filename); + if (Q_UNLIKELY(!writefile.open(QFile::WriteOnly))) { status = QSettings::AccessError; qWarning("QSettingsPrivate::write: failed to open %s", filename.toLocal8Bit().constData()); return; } QSettings::SettingsMap mergemap; - readFunc(file, mergemap); - file.seek(0); + QFile readfile(filename); + if (readfile.open(QFile::ReadOnly)) { + readFunc(readfile, mergemap); + } foreach(const QString &key, map.keys()) { mergemap.insert(key, map.value(key)); } - if (Q_UNLIKELY(!writeFunc(file, mergemap))) { + if (Q_UNLIKELY(!writeFunc(writefile, mergemap))) { status = QSettings::FormatError; qWarning("QSettingsPrivate::write: could not write %s", filename.toLocal8Bit().constData()); return;