From a549aa434e457490e17af41f2a85234a613754cf 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. Fixes: QTBUG-104776 Change-Id: I4643a73a3bd4019bedaa056c35468117bcec18dc Reviewed-by: Ville Voutilainen (cherry picked from commit f3c998510d3a6c8fc468e449d66b0280119d0a8f) Reviewed-by: Qt Cherry-pick Bot --- 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 99825687254..04ad782763e 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 04862ccba6e..978dd5332b0 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 e58c990c512..124336038e8 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 36fa2dd9454..e007088a227 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 {};