From 24bf8eef6da5c4c116d7846e257485db600ce245 Mon Sep 17 00:00:00 2001 From: Vladimir Golovnev Date: Thu, 8 Dec 2022 17:02:47 +0300 Subject: [PATCH] Use identical conversions of tracker names PR #18146. Closes #18070. The problem is that conversions between std::string and QString is not mutually equivalent (i.e. QString::fromStdString(stdStr).toStdString() == stdStr isn't always true). --- src/base/bittorrent/torrentimpl.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/base/bittorrent/torrentimpl.cpp b/src/base/bittorrent/torrentimpl.cpp index 31a098991..da8a19e30 100644 --- a/src/base/bittorrent/torrentimpl.cpp +++ b/src/base/bittorrent/torrentimpl.cpp @@ -1530,20 +1530,21 @@ void TorrentImpl::refreshTrackerEntries() const const std::vector nativeTrackers = m_nativeHandle.trackers(); Q_ASSERT(nativeTrackers.size() == m_trackerEntries.size()); - for (TrackerEntry &trackerEntry : m_trackerEntries) + for (const lt::announce_entry &announceEntry : nativeTrackers) { - const auto updatedTrackerIter = m_updatedTrackerEntries.find(trackerEntry.url); + const auto trackerURL = QString::fromStdString(announceEntry.url); + const auto updatedTrackerIter = m_updatedTrackerEntries.find(trackerURL); if (updatedTrackerIter == m_updatedTrackerEntries.end()) continue; - const auto nativeTrackerIter = std::find_if(nativeTrackers.cbegin(), nativeTrackers.cend() - , [trackerURL = trackerEntry.url.toStdString()](const lt::announce_entry &announceEntry) + const auto trackerIter = std::find_if(m_trackerEntries.begin(), m_trackerEntries.end() + , [&trackerURL](const TrackerEntry &trackerEntry) { - return (announceEntry.url == trackerURL); + return (trackerEntry.url == trackerURL); }); - Q_ASSERT(nativeTrackerIter != nativeTrackers.cend()); + Q_ASSERT(trackerIter != m_trackerEntries.end()); - const lt::announce_entry &announceEntry = *nativeTrackerIter; + TrackerEntry &trackerEntry = *trackerIter; #ifdef QBT_USES_LIBTORRENT2 updateTrackerEntry(trackerEntry, announceEntry, m_nativeHandle.info_hashes(), updatedTrackerIter.value()); #else