diff options
| -rw-r--r-- | sql/updates/world/2014_09_12_03_world_gameobject_template.sql | 3 | ||||
| -rw-r--r-- | src/server/game/Server/WorldSocket.cpp | 4 | ||||
| -rw-r--r-- | src/server/game/Server/WorldSocket.h | 3 | ||||
| -rw-r--r-- | src/server/shared/Networking/MessageBuffer.h | 2 | ||||
| -rw-r--r-- | src/server/shared/Networking/Socket.h | 3 |
5 files changed, 10 insertions, 5 deletions
diff --git a/sql/updates/world/2014_09_12_03_world_gameobject_template.sql b/sql/updates/world/2014_09_12_03_world_gameobject_template.sql new file mode 100644 index 00000000000..3771dd7c7dc --- /dev/null +++ b/sql/updates/world/2014_09_12_03_world_gameobject_template.sql @@ -0,0 +1,3 @@ +-- +UPDATE `gameobject_template` SET `flags`=4 WHERE `entry`=201937; -- Light's Vengeance +UPDATE `gameobject_template` SET `flags`=32 WHERE `entry`=201759; -- The Forge of Souls Portcullis diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp index 6cf406f21fa..cb42732b464 100644 --- a/src/server/game/Server/WorldSocket.cpp +++ b/src/server/game/Server/WorldSocket.cpp @@ -131,7 +131,7 @@ bool WorldSocket::ReadHeaderHandler() EndianConvertReverse(header->size); EndianConvert(header->cmd); - if (!header->IsValid()) + if (!header->IsValidSize() || !header->IsValidOpcode()) { if (_worldSession) { @@ -141,7 +141,7 @@ bool WorldSocket::ReadHeaderHandler() } else TC_LOG_ERROR("network", "WorldSocket::ReadHeaderHandler(): client %s sent malformed packet (size: %hu, cmd: %u)", - GetRemoteIpAddress().to_string().c_str(), header->size, header->cmd); + GetRemoteIpAddress().to_string().c_str(), header->size, header->cmd); CloseSocket(); return false; diff --git a/src/server/game/Server/WorldSocket.h b/src/server/game/Server/WorldSocket.h index 6ba76584909..46614afd3bd 100644 --- a/src/server/game/Server/WorldSocket.h +++ b/src/server/game/Server/WorldSocket.h @@ -39,7 +39,8 @@ struct ClientPktHeader uint16 size; uint32 cmd; - bool IsValid() const { return size >= 4 && size < 10240 && cmd < NUM_OPCODE_HANDLERS; } + bool IsValidSize() const { return size >= 4 && size < 10240; } + bool IsValidOpcode() const { return cmd < NUM_OPCODE_HANDLERS; } }; #pragma pack(pop) diff --git a/src/server/shared/Networking/MessageBuffer.h b/src/server/shared/Networking/MessageBuffer.h index 2115bea3f47..2dcd4fbc161 100644 --- a/src/server/shared/Networking/MessageBuffer.h +++ b/src/server/shared/Networking/MessageBuffer.h @@ -81,7 +81,7 @@ public: } } - void Write(void* data, std::size_t size) + void Write(void const* data, std::size_t size) { if (size) { diff --git a/src/server/shared/Networking/Socket.h b/src/server/shared/Networking/Socket.h index 17f48343485..6aa7974b1c1 100644 --- a/src/server/shared/Networking/Socket.h +++ b/src/server/shared/Networking/Socket.h @@ -111,11 +111,12 @@ public: void QueuePacket(MessageBuffer&& buffer, std::unique_lock<std::mutex>& guard) { - _writeQueue.push(std::move(buffer)); #ifdef BOOST_ASIO_HAS_IOCP AsyncProcessQueue(guard); +#else + (void)guard; #endif } |
