From faa939bee163de104e7e8aacb71fd2df49d96d61 Mon Sep 17 00:00:00 2001 From: Ahmed Samy Date: Fri, 24 Oct 2025 20:36:36 +0200 Subject: [PATCH 1/5] fix possible crash due to string conversion error --- src/networkmessage.cpp | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/networkmessage.cpp b/src/networkmessage.cpp index 319e1dd394..c978ec9f81 100644 --- a/src/networkmessage.cpp +++ b/src/networkmessage.cpp @@ -23,9 +23,13 @@ std::string NetworkMessage::getString(uint16_t stringLen /* = 0*/) auto it = buffer.data() + info.position; info.position += stringLen; - std::string_view latin1Str{reinterpret_cast(it), stringLen}; - return boost::locale::conv::to_utf(latin1Str.data(), latin1Str.data() + latin1Str.size(), "ISO-8859-1", - boost::locale::conv::skip); + try { + std::string_view latin1Str{reinterpret_cast(it), stringLen}; + return boost::locale::conv::to_utf(latin1Str.data(), latin1Str.data() + latin1Str.size(), "ISO-8859-1", + boost::locale::conv::skip); + } catch (const boost::locale::conv::conversion_error&) { + return {}; + } } Position NetworkMessage::getPosition() @@ -39,8 +43,14 @@ Position NetworkMessage::getPosition() void NetworkMessage::addString(std::string_view value) { - std::string latin1Str = boost::locale::conv::from_utf(value.data(), value.data() + value.size(), "ISO-8859-1", - boost::locale::conv::skip); + std::string latin1Str; + try { + latin1Str = boost::locale::conv::from_utf(value.data(), value.data() + value.size(), "ISO-8859-1", + boost::locale::conv::skip); + } catch (const boost::locale::conv::conversion_error&) { + return; + } + size_t stringLen = latin1Str.size(); if (!canAdd(stringLen + 2) || stringLen > 8192) { return; From 93e810f6cdd25d83c5d8f27d5aef2e13f072abee Mon Sep 17 00:00:00 2001 From: Ahmed Samy Date: Fri, 24 Oct 2025 20:42:27 +0200 Subject: [PATCH 2/5] formatting --- src/networkmessage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/networkmessage.cpp b/src/networkmessage.cpp index c978ec9f81..7a864366bc 100644 --- a/src/networkmessage.cpp +++ b/src/networkmessage.cpp @@ -46,7 +46,7 @@ void NetworkMessage::addString(std::string_view value) std::string latin1Str; try { latin1Str = boost::locale::conv::from_utf(value.data(), value.data() + value.size(), "ISO-8859-1", - boost::locale::conv::skip); + boost::locale::conv::skip); } catch (const boost::locale::conv::conversion_error&) { return; } From 0d5ed783c9a6a0c5f32784f9a40558eeebd4fbd7 Mon Sep 17 00:00:00 2001 From: Ahmed Samy Date: Sat, 25 Oct 2025 09:14:31 +0200 Subject: [PATCH 3/5] add empty string incase of conversion error and log it out --- src/networkmessage.cpp | 8 ++++---- src/networkmessage.h | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/networkmessage.cpp b/src/networkmessage.cpp index 7a864366bc..9834473c09 100644 --- a/src/networkmessage.cpp +++ b/src/networkmessage.cpp @@ -41,14 +41,14 @@ Position NetworkMessage::getPosition() return pos; } -void NetworkMessage::addString(std::string_view value) +void NetworkMessage::addString(const std::string_view& value) { - std::string latin1Str; + std::string latin1Str{}; try { latin1Str = boost::locale::conv::from_utf(value.data(), value.data() + value.size(), "ISO-8859-1", boost::locale::conv::skip); - } catch (const boost::locale::conv::conversion_error&) { - return; + } catch (const boost::locale::conv::conversion_error& e) { + std::clog << "Failed to convert string to ISO-8859-1: " << e.what() << ", will add an empty string as padding" << std::endl; } size_t stringLen = latin1Str.size(); diff --git a/src/networkmessage.h b/src/networkmessage.h index 9710a7fd55..61dee89f15 100644 --- a/src/networkmessage.h +++ b/src/networkmessage.h @@ -105,7 +105,7 @@ class NetworkMessage void addBytes(const char* bytes, size_t size); void addPaddingBytes(size_t n); - void addString(std::string_view value); + void addString(const std::string_view& value); void addDouble(double value, uint8_t precision = 2); From 0524d24395650591e604c695c768448acec2adbd Mon Sep 17 00:00:00 2001 From: Ahmed Samy Date: Sat, 25 Oct 2025 09:21:40 +0200 Subject: [PATCH 4/5] formatting --- src/networkmessage.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/networkmessage.cpp b/src/networkmessage.cpp index 9834473c09..19dd622b2c 100644 --- a/src/networkmessage.cpp +++ b/src/networkmessage.cpp @@ -48,7 +48,8 @@ void NetworkMessage::addString(const std::string_view& value) latin1Str = boost::locale::conv::from_utf(value.data(), value.data() + value.size(), "ISO-8859-1", boost::locale::conv::skip); } catch (const boost::locale::conv::conversion_error& e) { - std::clog << "Failed to convert string to ISO-8859-1: " << e.what() << ", will add an empty string as padding" << std::endl; + std::cerr << "Failed to convert string to ISO-8859-1: " << e.what() << ", will add an empty string as padding" + << std::endl; } size_t stringLen = latin1Str.size(); From c2bcd15bdb8d6d3221ad08009f44729ba8a3f580 Mon Sep 17 00:00:00 2001 From: Ahmed Samy Date: Mon, 27 Oct 2025 08:27:32 +0100 Subject: [PATCH 5/5] avoid spills, its only 1 arg, so can use int regs --- src/networkmessage.cpp | 2 +- src/networkmessage.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/networkmessage.cpp b/src/networkmessage.cpp index 19dd622b2c..1a68fe6a56 100644 --- a/src/networkmessage.cpp +++ b/src/networkmessage.cpp @@ -41,7 +41,7 @@ Position NetworkMessage::getPosition() return pos; } -void NetworkMessage::addString(const std::string_view& value) +void NetworkMessage::addString(std::string_view value) { std::string latin1Str{}; try { diff --git a/src/networkmessage.h b/src/networkmessage.h index 61dee89f15..9710a7fd55 100644 --- a/src/networkmessage.h +++ b/src/networkmessage.h @@ -105,7 +105,7 @@ class NetworkMessage void addBytes(const char* bytes, size_t size); void addPaddingBytes(size_t n); - void addString(const std::string_view& value); + void addString(std::string_view value); void addDouble(double value, uint8_t precision = 2);