2
0
mirror of https://github.com/telegramdesktop/tdesktop synced 2025-09-01 15:05:56 +00:00

Fix possible crash in DomainResolver.

App::CallDelayed() could be queued twice for a single key, if before
the delayed call we cleared entry in _attempts and created it again.
This commit is contained in:
John Preston
2019-03-20 13:23:14 +04:00
parent 8acd47bf2f
commit a59353df9f
2 changed files with 10 additions and 4 deletions

View File

@@ -91,6 +91,11 @@ private:
QStringList ips;
crl::time expireAt = 0;
};
struct Attempts {
std::vector<QString> hosts;
base::has_weak_ptr guard;
};
void resolve(const AttemptKey &key);
@@ -110,7 +115,7 @@ private:
crl::time expireAt)> _callback;
QNetworkAccessManager _manager;
std::map<AttemptKey, std::vector<QString>> _attempts;
std::map<AttemptKey, Attempts> _attempts;
std::map<AttemptKey, std::vector<ServiceWebRequest>> _requests;
std::map<AttemptKey, CacheEntry> _cache;
crl::time _lastTimestamp = 0;