From 3b25b807f33bff885bd840ec0dc9e2d95b392f81 Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Sun, 10 Mar 2019 18:53:02 +0000 Subject: [PATCH] Fix serialization of std::time_t by casting to u64 first (#8353) Fixes #8332 --- src/network/clientpackethandler.cpp | 4 +++- src/network/networkpacket.cpp | 16 ---------------- src/network/networkpacket.h | 4 ---- src/server.cpp | 2 +- 4 files changed, 4 insertions(+), 22 deletions(-) diff --git a/src/network/clientpackethandler.cpp b/src/network/clientpackethandler.cpp index 889002a8..2f5deae2 100644 --- a/src/network/clientpackethandler.cpp +++ b/src/network/clientpackethandler.cpp @@ -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(timestamp); chatMessage->type = (ChatMessageType) message_type; diff --git a/src/network/networkpacket.cpp b/src/network/networkpacket.cpp index 6d869e5e..22c035c5 100644 --- a/src/network/networkpacket.cpp +++ b/src/network/networkpacket.cpp @@ -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); diff --git a/src/network/networkpacket.h b/src/network/networkpacket.h index 760b51f7..a8b74137 100644 --- a/src/network/networkpacket.h +++ b/src/network/networkpacket.h @@ -19,7 +19,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once -#include #include "util/pointer.h" #include "util/numeric.h" #include "networkprotocol.h" @@ -88,9 +87,6 @@ public: 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); diff --git a/src/server.cpp b/src/server.cpp index 701339ad..003ad45b 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -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);