summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mapblock.cpp14
-rw-r--r--src/utility.h4
2 files changed, 14 insertions, 4 deletions
diff --git a/src/mapblock.cpp b/src/mapblock.cpp
index f84c65176..67e7e2574 100644
--- a/src/mapblock.cpp
+++ b/src/mapblock.cpp
@@ -2109,9 +2109,17 @@ void MapBlock::serialize(std::ostream &os, u8 version)
{
if(version <= 15)
{
- std::ostringstream oss(std::ios_base::binary);
- m_node_metadata.serialize(oss);
- os<<serializeString(oss.str());
+ try{
+ std::ostringstream oss(std::ios_base::binary);
+ m_node_metadata.serialize(oss);
+ os<<serializeString(oss.str());
+ }
+ // This will happen if the string is longer than 65535
+ catch(SerializationError &e)
+ {
+ // Use an empty string
+ os<<serializeString("");
+ }
}
else
{
diff --git a/src/utility.h b/src/utility.h
index 5cb3080a7..12d732bea 100644
--- a/src/utility.h
+++ b/src/utility.h
@@ -1911,7 +1911,9 @@ inline v3f intToFloat(v3s16 p, f32 d)
// Creates a string with the length as the first two bytes
inline std::string serializeString(const std::string &plain)
{
- assert(plain.size() <= 65535);
+ //assert(plain.size() <= 65535);
+ if(plain.size() > 65535)
+ throw SerializationError("String too long for serializeString");
char buf[2];
writeU16((u8*)&buf[0], plain.size());
std::string s;