diff options
author | Thiago Macieira <thiago.macieira@intel.com> | 2017-11-07 14:08:54 -0800 |
---|---|---|
committer | Jani Heikkinen <jani.heikkinen@qt.io> | 2017-11-23 05:27:23 +0000 |
commit | 4be50ecafd3cc63469504aaae8ac28ff0736989d (patch) | |
tree | 4eded8d8605f47653d540dc095be2c6ccbc49065 /src/corelib/io/qfile.cpp | |
parent | 42005951defded6cd1a9a60582b29f58c78fea9e (diff) |
QTemporaryFile: fix issues with removing a file twice
The assertion in isUnnamedFile() we had was incorrect after the file was
removed, since we cleared the name and possibly reset back to the
template. Since ~QTemporaryFile() calls remove(), this was easy to
trigger if you attempted to remove the temp file and leave
QTemporaryFile like that.
Take this opportunity to add to the docs of setAutoRemove() explaining
the possibility of unnamed files.
#7 0x00007f69bcc2b50e in qt_assert (
assertion=assertion@entry=0x7f69bcf194a0 "unnamedFile == d_func()->fileEntry.isEmpty()",
file=file@entry=0x7f69bcf19458 "io/qtemporaryfile.cpp",
line=line@entry=514) at global/qglobal.cpp:3123
#8 0x00007f69bcd672cf in QTemporaryFileEngine::isUnnamedFile (this=this@entry=0x55cd60644df0)
at io/qtemporaryfile.cpp:514
#9 0x00007f69bcd683f7 in QTemporaryFileEngine::remove (this=0x55cd60644df0)
at io/qtemporaryfile.cpp:396
#10 0x00007f69bcd48654 in QFile::remove (this=this@entry=0x7fffb393f7e0)
at io/qfile.cpp:513
#11 0x00007f69bcd6653b in QTemporaryFile::~QTemporaryFile (this=0x7fffb393f7e0, __in_chrg=<optimized out>)
at io/qtemporaryfile.cpp:719
Change-Id: I57a1bd6e0c194530b732fffd14f4ed28ca8185b2
Reviewed-by: Andreas Hartmetz <ahartmetz@gmail.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/io/qfile.cpp')
-rw-r--r-- | src/corelib/io/qfile.cpp | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/corelib/io/qfile.cpp b/src/corelib/io/qfile.cpp index bac995ff25..e4888e9523 100644 --- a/src/corelib/io/qfile.cpp +++ b/src/corelib/io/qfile.cpp @@ -503,7 +503,8 @@ bool QFile::remove() { Q_D(QFile); - if (d->fileName.isEmpty()) { + if (d->fileName.isEmpty() && + !static_cast<QFSFileEngine *>(d->engine())->isUnnamedFile()) { qWarning("QFile::remove: Empty or null file name"); return false; } |