From edf9e6a1292f52bdfab3c3c951e5020d067cf5f6 Mon Sep 17 00:00:00 2001 From: "Vladimir Golovnev (Glassez)" Date: Wed, 26 Mar 2025 19:30:55 +0300 Subject: [PATCH] RSS: Fix crash when moving a folder into its subfolder Closes #18446. --- src/base/rss/rss_session.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/base/rss/rss_session.cpp b/src/base/rss/rss_session.cpp index 9fd2ada0f..ade1361b4 100644 --- a/src/base/rss/rss_session.cpp +++ b/src/base/rss/rss_session.cpp @@ -214,14 +214,20 @@ nonstd::expected Session::moveItem(Item *item, const QString &des Q_ASSERT(item); Q_ASSERT(item != rootFolder()); + if (item->path() == destPath) + return {}; + + if (auto *folder = static_cast(item)) // if `item` is a `Folder` + { + if (destPath.startsWith(folder->path() + Item::PathSeparator)) + return nonstd::make_unexpected(tr("Couldn't move folder into itself or its subfolder.")); + } + const nonstd::expected result = prepareItemDest(destPath); if (!result) return result.get_unexpected(); auto *destFolder = result.value(); - if (static_cast(destFolder) == item) - return nonstd::make_unexpected(tr("Couldn't move folder into itself.")); - auto *srcFolder = static_cast(m_itemsByPath.value(Item::parentPath(item->path()))); if (srcFolder != destFolder) {