diff --git a/src/mapblock.cpp b/src/mapblock.cpp index f84c651765a31cd269018fa21545e9fe336f78ca..67e7e25740bbaf5c01cd5a9f821b4aa6b5ea77b1 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 5cb3080a7337b638b57d45055b8948344c49b698..12d732bea8d03ffca666787b8730ffc5efe860c3 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;