From 103ea813dc7d2729a5baa1b31fcce348c45ebccc Mon Sep 17 00:00:00 2001 From: Vladimir Golovnev Date: Fri, 28 Mar 2025 09:03:59 +0300 Subject: [PATCH] RSS: Fix crash when moving a folder into its subfolder PR #22479. 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..53cf8b3f5 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("Can't move a folder into itself or its subfolders.")); + } + 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) {