]> git.lizzy.rs Git - minetest.git/commitdiff
Fix serialization of std::time_t by casting to u64 first (#8353)
authorrubenwardy <rw@rubenwardy.com>
Sun, 10 Mar 2019 18:53:02 +0000 (18:53 +0000)
committerrubenwardy <rw@rubenwardy.com>
Mon, 11 Mar 2019 22:07:19 +0000 (22:07 +0000)
Fixes #8332

src/network/clientpackethandler.cpp
src/network/networkpacket.cpp
src/network/networkpacket.h
src/server.cpp

index 889002a82d21c79c522c3a537b1b5e0d3848fd74..2f5deae2a75042565b057bf83016e497057657e0 100644 (file)
@@ -408,7 +408,9 @@ void Client::handleCommand_ChatMessage(NetworkPacket *pkt)
                return;
        }
 
-       *pkt >> chatMessage->sender >> chatMessage->message >> chatMessage->timestamp;
+       u64 timestamp;
+       *pkt >> chatMessage->sender >> chatMessage->message >> timestamp;
+       chatMessage->timestamp = static_cast<std::time_t>(timestamp);
 
        chatMessage->type = (ChatMessageType) message_type;
 
index 6d869e5eb47b5572ca91ceba50d48a5e0c597720..22c035c5b9c8c4734ddd21b75b3c4d99ef5f9e51 100644 (file)
@@ -281,12 +281,6 @@ NetworkPacket& NetworkPacket::operator<<(u64 src)
        return *this;
 }
 
-NetworkPacket& NetworkPacket::operator<<(std::time_t src)
-{
-       *this << (u64) src;
-       return *this;
-}
-
 NetworkPacket& NetworkPacket::operator<<(float src)
 {
        checkDataSize(4);
@@ -372,16 +366,6 @@ NetworkPacket& NetworkPacket::operator>>(u64& dst)
        return *this;
 }
 
-NetworkPacket& NetworkPacket::operator>>(std::time_t& dst)
-{
-       checkReadOffset(m_read_offset, 8);
-
-       dst = readU64(&m_data[m_read_offset]);
-
-       m_read_offset += 8;
-       return *this;
-}
-
 NetworkPacket& NetworkPacket::operator>>(float& dst)
 {
        checkReadOffset(m_read_offset, 4);
index 760b51f7a06fe6065e3283e0052328f37589e172..a8b741374f8b32d2d2ca678dd5d201e5580e9cac 100644 (file)
@@ -19,7 +19,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 
 #pragma once
 
-#include <ctime>
 #include "util/pointer.h"
 #include "util/numeric.h"
 #include "networkprotocol.h"
@@ -88,9 +87,6 @@ class NetworkPacket
        NetworkPacket &operator>>(u64 &dst);
        NetworkPacket &operator<<(u64 src);
 
-       NetworkPacket &operator>>(std::time_t &dst);
-       NetworkPacket &operator<<(std::time_t src);
-
        NetworkPacket &operator>>(float &dst);
        NetworkPacket &operator<<(float src);
 
index 701339ad8eb93f4fa8b61bdb19d1d636579e4203..003ad45b42137989ffde8ab3a554387a25f7d9ed 100644 (file)
@@ -1559,7 +1559,7 @@ void Server::SendChatMessage(session_t peer_id, const ChatMessage &message)
        NetworkPacket pkt(TOCLIENT_CHAT_MESSAGE, 0, peer_id);
        u8 version = 1;
        u8 type = message.type;
-       pkt << version << type << std::wstring(L"") << message.message << message.timestamp;
+       pkt << version << type << std::wstring(L"") << message.message << (u64)message.timestamp;
 
        if (peer_id != PEER_ID_INEXISTENT) {
                RemotePlayer *player = m_env->getPlayer(peer_id);