Fix a crash (assert) when client set serial version < 24 in INIT command SER_FMT_VER_LOWEST is set to zero, then the test is stupid in INIT because all client works. In mapblock we check if client's serialization version is < 24, but if client sent serialization version < 24 (15 for example) the server set it and tried to send nodes, then BOOM

This commit is contained in:
(@U-Exp) 2015-01-24 11:07:04 +01:00 committed by Craig Robbins
parent f8bd1f3563
commit 800d192702
2 changed files with 3 additions and 9 deletions

@ -526,12 +526,6 @@ void MapBlock::serialize(std::ostream &os, u8 version, bool disk)
throw SerializationError("ERROR: Not writing dummy block."); throw SerializationError("ERROR: Not writing dummy block.");
} }
// Can't do this anymore; we have 16-bit dynamically allocated node IDs
// in memory; conversion just won't work in this direction.
if(version < 24)
throw SerializationError("MapBlock::serialize: serialization to "
"version < 24 not possible");
// First byte // First byte
u8 flags = 0; u8 flags = 0;
if(is_underground) if(is_underground)

@ -30,11 +30,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
-------------------------------- --------------------------------
For map data (blocks, nodes, sectors). For map data (blocks, nodes, sectors).
NOTE: The goal is to increment this so that saved maps will be NOTE: The goal is to increment this so that saved maps will be
loadable by any version. Other compatibility is not loadable by any version. Other compatibility is not
maintained. maintained.
0: original networked test with 1-byte nodes 0: original networked test with 1-byte nodes
1: update with 2-byte nodes 1: update with 2-byte nodes
2: lighting is transmitted in param 2: lighting is transmitted in param
@ -70,7 +70,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
// Saved on disk version // Saved on disk version
#define SER_FMT_VER_HIGHEST_WRITE 25 #define SER_FMT_VER_HIGHEST_WRITE 25
// Lowest supported serialization version // Lowest supported serialization version
#define SER_FMT_VER_LOWEST 0 #define SER_FMT_VER_LOWEST 24
inline bool ser_ver_supported(s32 v) { inline bool ser_ver_supported(s32 v) {
return v >= SER_FMT_VER_LOWEST && v <= SER_FMT_VER_HIGHEST_READ; return v >= SER_FMT_VER_LOWEST && v <= SER_FMT_VER_HIGHEST_READ;