From f3c998510d3a6c8fc468e449d66b0280119d0a8f Mon Sep 17 00:00:00 2001 From: Assam Boudjelthia Date: Tue, 22 Nov 2022 14:02:11 +0200 Subject: [PATCH] Fix infinite loop when iterating content uri sub-files/dirs make QAbstractFileEngineIterator::currentFilePath() virtual and implement it under AndroidContentFileEngine to return current fileName because content uris shouldn't be constructed manaully like normal file paths. Pick-to: 6.4 6.2 Fixes: QTBUG-104776 Change-Id: I4643a73a3bd4019bedaa056c35468117bcec18dc Reviewed-by: Ville Voutilainen --- src/corelib/io/qabstractfileengine_p.h | 2 +- src/plugins/platforms/android/androidcontentfileengine.cpp | 5 +++++ src/plugins/platforms/android/androidcontentfileengine.h | 1 + .../platforms/android/qandroidassetsfileenginehandler.cpp | 2 +- 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/corelib/io/qabstractfileengine_p.h b/src/corelib/io/qabstractfileengine_p.h index 9982568725..04ad782763 100644 --- a/src/corelib/io/qabstractfileengine_p.h +++ b/src/corelib/io/qabstractfileengine_p.h @@ -206,7 +206,7 @@ public: virtual QString currentFileName() const = 0; virtual QFileInfo currentFileInfo() const; - QString currentFilePath() const; + virtual QString currentFilePath() const; protected: enum EntryInfoType { diff --git a/src/plugins/platforms/android/androidcontentfileengine.cpp b/src/plugins/platforms/android/androidcontentfileengine.cpp index 04862ccba6..978dd5332b 100644 --- a/src/plugins/platforms/android/androidcontentfileengine.cpp +++ b/src/plugins/platforms/android/androidcontentfileengine.cpp @@ -200,3 +200,8 @@ QString AndroidContentFileEngineIterator::currentFileName() const return QString(); return m_entries.at(m_index - 1); } + +QString AndroidContentFileEngineIterator::currentFilePath() const +{ + return currentFileName(); +} diff --git a/src/plugins/platforms/android/androidcontentfileengine.h b/src/plugins/platforms/android/androidcontentfileengine.h index e58c990c51..124336038e 100644 --- a/src/plugins/platforms/android/androidcontentfileengine.h +++ b/src/plugins/platforms/android/androidcontentfileengine.h @@ -40,6 +40,7 @@ public: QString next() override; bool hasNext() const override; QString currentFileName() const override; + QString currentFilePath() const override; private: mutable QStringList m_entries; mutable int m_index = -1; diff --git a/src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp b/src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp index bd1619e6db..67b2506e68 100644 --- a/src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp +++ b/src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp @@ -186,7 +186,7 @@ public: return m_currentIterator->currentFileName(); } - virtual QString currentFilePath() const + QString currentFilePath() const override { if (!m_currentIterator) return {};