core: Don't use "time" tag without "server-time"
authorShane Synan <digitalcircuit36939@gmail.com>
Tue, 21 Jul 2020 00:48:28 +0000 (20:48 -0400)
committerManuel Nickschas <sputnick@quassel-irc.org>
Sat, 28 Nov 2020 12:42:31 +0000 (13:42 +0100)
Don't use the "time" IrcTagKey without "server-time" being enabled.
This ensures that if "server-time" isn't negotiated, e.g. due to
skipping the capability, message timestamps won't be adjusted.

According to the IRCv3 specifications, servers must not send the
"time" tag without "server-time" being acknowledged, however it's
probably better to handle the case where a server might send it
unprompted.

See https://ircv3.net/specs/extensions/server-time-3.2

src/core/ircparser.cpp

index 3bd8691..ccd3950 100644 (file)
@@ -119,7 +119,7 @@ void IrcParser::processNetworkIncoming(NetworkDataEvent* e)
         qDebug() << "IRC net" << net->networkId() << "<<" << tags << prefix << cmd << params;
     }
 
-    if (tags.contains(IrcTags::SERVER_TIME)) {
+    if (net->capEnabled(IrcCap::SERVER_TIME) && tags.contains(IrcTags::SERVER_TIME)) {
         QDateTime serverTime = QDateTime::fromString(tags[IrcTags::SERVER_TIME], "yyyy-MM-ddThh:mm:ss.zzzZ");
         serverTime.setTimeSpec(Qt::UTC);
         if (serverTime.isValid()) {