From b4453fac23270c94f9a64bcd6d0b36257f58f598 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Wed, 1 Jan 2020 17:13:17 +0000 Subject: [PATCH] Saveload: Log chunk sizes when load fails due to chunk size mismatch --- src/saveload/saveload.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index 5d88981efd..2a2287a599 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -728,7 +728,10 @@ int SlIterateArray() /* After reading in the whole array inside the loop * we must have read in all the data, so we must be at end of current block. */ - if (_next_offs != 0 && _sl.reader->GetSize() != _next_offs) SlErrorCorrupt("Invalid chunk size"); + if (_next_offs != 0 && _sl.reader->GetSize() != _next_offs) { + DEBUG(sl, 1, "Invalid chunk size: " PRINTF_SIZE " != " PRINTF_SIZE, _sl.reader->GetSize(), _next_offs); + SlErrorCorrupt("Invalid chunk size"); + } for (;;) { uint length = SlReadArrayLength(); @@ -2062,7 +2065,10 @@ static void SlLoadChunk(const ChunkHandler *ch) _sl.obj_len = len; endoffs = _sl.reader->GetSize() + len; ch->load_proc(); - if (_sl.reader->GetSize() != endoffs) SlErrorCorrupt("Invalid chunk size"); + if (_sl.reader->GetSize() != endoffs) { + DEBUG(sl, 1, "Invalid chunk size: " PRINTF_SIZE " != " PRINTF_SIZE ", (" PRINTF_SIZE ")", _sl.reader->GetSize(), endoffs, len); + SlErrorCorrupt("Invalid chunk size"); + } } else { SlErrorCorrupt("Invalid chunk type"); } @@ -2145,7 +2151,10 @@ static void SlLoadCheckChunk(const ChunkHandler *ch) } else { SlSkipBytes(len); } - if (_sl.reader->GetSize() != endoffs) SlErrorCorrupt("Invalid chunk size"); + if (_sl.reader->GetSize() != endoffs) { + DEBUG(sl, 1, "Invalid chunk size: " PRINTF_SIZE " != " PRINTF_SIZE ", (" PRINTF_SIZE ")", _sl.reader->GetSize(), endoffs, len); + SlErrorCorrupt("Invalid chunk size"); + } } else { SlErrorCorrupt("Invalid chunk type"); }