diff --git a/src/corelib/io/qdiriterator.cpp b/src/corelib/io/qdiriterator.cpp index a186d94a334..e73fd631493 100644 --- a/src/corelib/io/qdiriterator.cpp +++ b/src/corelib/io/qdiriterator.cpp @@ -106,8 +106,10 @@ public: // Match the behavior of advance() from before porting to QDirListing, // that is, even if hasNext() returns false, calling next() returns an // empty string without crashing. QTBUG-130142 - if (it == lister.end()) + if (it == lister.end()) { + currentFileInfo = {}; return; + } currentFileInfo = nextFileInfo; if (++it != lister.end()) { nextFileInfo = it->fileInfo(); diff --git a/tests/auto/corelib/io/qdiriterator/tst_qdiriterator.cpp b/tests/auto/corelib/io/qdiriterator/tst_qdiriterator.cpp index dd37c20239c..d4ae8c16118 100644 --- a/tests/auto/corelib/io/qdiriterator/tst_qdiriterator.cpp +++ b/tests/auto/corelib/io/qdiriterator/tst_qdiriterator.cpp @@ -646,10 +646,18 @@ void tst_QDirIterator::hiddenDirs_hiddenFiles() void tst_QDirIterator::hasNextFalseNoCrash() { - QDirIterator iter(u"empty"_s, QDir::NoDotAndDotDot); - // QTBUG-130142 - // No crash if you call next() after hasNext() returned false + QVERIFY(QFileInfo(u"empty"_s).exists()); + QDirIterator iter(u"empty"_s); + int count = 0; + while (iter.hasNext()) { + iter.next(); + ++count; + } + QVERIFY(count > 0); QVERIFY(!iter.hasNext()); + // QTBUG-130142 + // When the iteration reaches the end, calling next() returns an empty string + // and no crash happens QVERIFY(iter.next().isEmpty()); }