aboutsummaryrefslogtreecommitdiff
path: root/src/server/shared
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2025-05-22 23:17:01 +0200
committerShauren <shauren.trinity@gmail.com>2025-05-22 23:17:01 +0200
commit5bebf0520968665af288d1d3619f1c42a7322ccb (patch)
tree26db7a76b581566ced3da9517701bee1ec3d0d40 /src/server/shared
parentfde4ba92f6540df1b9e4c3b9722c9341ed9febed (diff)
Core/PacketIO: Mark packet parsing exception throwing code paths as [[noreturn]]
Diffstat (limited to 'src/server/shared')
-rw-r--r--src/server/shared/Packets/ByteBuffer.cpp5
-rw-r--r--src/server/shared/Packets/ByteBuffer.h23
2 files changed, 18 insertions, 10 deletions
diff --git a/src/server/shared/Packets/ByteBuffer.cpp b/src/server/shared/Packets/ByteBuffer.cpp
index 8811a2a6c0c..f49c36a1cc0 100644
--- a/src/server/shared/Packets/ByteBuffer.cpp
+++ b/src/server/shared/Packets/ByteBuffer.cpp
@@ -199,6 +199,11 @@ void ByteBuffer::hexlike() const
sLog->OutMessageTo(networkLogger, "network", LOG_LEVEL_TRACE, "STORAGE_SIZE: {} {}", size(), o.view());
}
+void ByteBuffer::OnInvalidPosition(size_t pos, size_t valueSize) const
+{
+ throw ByteBufferPositionException(pos, _storage.size(), valueSize);
+}
+
template TC_SHARED_API uint8 ByteBuffer::read<uint8>();
template TC_SHARED_API uint16 ByteBuffer::read<uint16>();
template TC_SHARED_API uint32 ByteBuffer::read<uint32>();
diff --git a/src/server/shared/Packets/ByteBuffer.h b/src/server/shared/Packets/ByteBuffer.h
index 8f3e437f04f..f61a72f3664 100644
--- a/src/server/shared/Packets/ByteBuffer.h
+++ b/src/server/shared/Packets/ByteBuffer.h
@@ -442,15 +442,15 @@ class TC_SHARED_API ByteBuffer
uint8& operator[](size_t const pos)
{
- if (pos >= size())
- throw ByteBufferPositionException(pos, 1, size());
+ if (pos >= _storage.size())
+ OnInvalidPosition(pos, 1);
return _storage[pos];
}
uint8 const& operator[](size_t const pos) const
{
- if (pos >= size())
- throw ByteBufferPositionException(pos, 1, size());
+ if (pos >= _storage.size())
+ OnInvalidPosition(pos, 1);
return _storage[pos];
}
@@ -490,8 +490,8 @@ class TC_SHARED_API ByteBuffer
void read_skip(size_t skip)
{
- if (_rpos + skip > size())
- throw ByteBufferPositionException(_rpos, skip, size());
+ if (_rpos + skip > _storage.size())
+ OnInvalidPosition(_rpos, skip);
ResetBitPos();
_rpos += skip;
@@ -509,8 +509,9 @@ class TC_SHARED_API ByteBuffer
template <typename T>
T read(size_t pos) const
{
- if (pos + sizeof(T) > size())
- throw ByteBufferPositionException(pos, sizeof(T), size());
+ if (pos + sizeof(T) > _storage.size())
+ OnInvalidPosition(pos, sizeof(T));
+
T val;
std::memcpy(&val, &_storage[pos], sizeof(T));
EndianConvert(val);
@@ -530,8 +531,8 @@ class TC_SHARED_API ByteBuffer
void read(uint8* dest, size_t len)
{
- if (_rpos + len > size())
- throw ByteBufferPositionException(_rpos, len, size());
+ if (_rpos + len > _storage.size())
+ OnInvalidPosition(_rpos, len);
ResetBitPos();
std::memcpy(dest, &_storage[_rpos], len);
@@ -626,6 +627,8 @@ class TC_SHARED_API ByteBuffer
void hexlike() const;
protected:
+ [[noreturn]] void OnInvalidPosition(size_t pos, size_t valueSize) const;
+
size_t _rpos, _wpos;
uint8 _bitpos;
uint8 _curbitval;