summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2017-11-07 14:08:54 -0800
committerJani Heikkinen <jani.heikkinen@qt.io>2017-11-23 05:27:23 +0000
commit4be50ecafd3cc63469504aaae8ac28ff0736989d (patch)
tree4eded8d8605f47653d540dc095be2c6ccbc49065 /tests
parent42005951defded6cd1a9a60582b29f58c78fea9e (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 'tests')
-rw-r--r--tests/auto/corelib/io/qtemporaryfile/tst_qtemporaryfile.cpp20
1 files changed, 18 insertions, 2 deletions
diff --git a/tests/auto/corelib/io/qtemporaryfile/tst_qtemporaryfile.cpp b/tests/auto/corelib/io/qtemporaryfile/tst_qtemporaryfile.cpp
index f3ce902bbd..2d87c2193b 100644
--- a/tests/auto/corelib/io/qtemporaryfile/tst_qtemporaryfile.cpp
+++ b/tests/auto/corelib/io/qtemporaryfile/tst_qtemporaryfile.cpp
@@ -70,6 +70,7 @@ private slots:
void io();
void openCloseOpenClose();
void removeAndReOpen();
+ void removeUnnamed();
void size();
void resize();
void openOnRootDrives();
@@ -442,11 +443,13 @@ void tst_QTemporaryFile::removeAndReOpen()
{
QTemporaryFile file;
file.open();
- fileName = file.fileName();
+ fileName = file.fileName(); // materializes any unnamed file
QVERIFY(QFile::exists(fileName));
- file.remove();
+ QVERIFY(file.remove());
+ QVERIFY(file.fileName().isEmpty());
QVERIFY(!QFile::exists(fileName));
+ QVERIFY(!file.remove());
QVERIFY(file.open());
QCOMPARE(QFileInfo(file.fileName()).path(), QFileInfo(fileName).path());
@@ -456,6 +459,19 @@ void tst_QTemporaryFile::removeAndReOpen()
QVERIFY(!QFile::exists(fileName));
}
+void tst_QTemporaryFile::removeUnnamed()
+{
+ QTemporaryFile file;
+ file.open();
+
+ // we did not call fileName(), so the file name may not have a name
+ QVERIFY(file.remove());
+ QVERIFY(file.fileName().isEmpty());
+
+ // if it was unnamed, this will succeed again, so we can't check the result
+ file.remove();
+}
+
void tst_QTemporaryFile::size()
{
QTemporaryFile file;