[openjk] 50/130: Check for chunk read error in EvaluateFields

Simon McVittie smcv at debian.org
Fri Oct 28 11:09:17 UTC 2016


This is an automated email from the git hooks/post-receive script.

smcv pushed a commit to branch debian/master
in repository openjk.

commit 27bc43f16f6a99b09704f77f5870e9d3d9fe9fa1
Author: bibendovsky <bibendovsky at hotmail.com>
Date:   Sat Jul 23 18:26:16 2016 +0300

    Check for chunk read error in EvaluateFields
---
 codeJK2/game/g_savegame.cpp           | 7 +++++++
 shared/qcommon/ojk_i_saved_game.h     | 4 ++++
 shared/qcommon/ojk_i_saved_game_fwd.h | 3 +++
 shared/qcommon/ojk_saved_game.cpp     | 5 +++++
 shared/qcommon/ojk_saved_game.h       | 4 ++++
 5 files changed, 23 insertions(+)

diff --git a/codeJK2/game/g_savegame.cpp b/codeJK2/game/g_savegame.cpp
index 5e75a1e9..e4c9ca9 100644
--- a/codeJK2/game/g_savegame.cpp
+++ b/codeJK2/game/g_savegame.cpp
@@ -647,6 +647,13 @@ static void EvaluateFields(
     pbData->sg_import(
         ::gi.saved_game);
 
+    if (!::gi.saved_game->is_all_data_read())
+    {
+        ::G_Error(
+            ::va("EvaluateFields(): variable-sized chunk '%s' without handler!",
+                ::SG_GetChidText(ulChid)));
+    }
+
     if (pFields) {
         for (auto pField = pFields; pField->psName; ++pField) {
             ::EvaluateField(
diff --git a/shared/qcommon/ojk_i_saved_game.h b/shared/qcommon/ojk_i_saved_game.h
index fc246f8..f050a78 100644
--- a/shared/qcommon/ojk_i_saved_game.h
+++ b/shared/qcommon/ojk_i_saved_game.h
@@ -44,6 +44,8 @@ bool ISavedGame::read_chunk(
     read<TSrc>(
         dst_value);
 
+    result &= is_all_data_read();
+
     return result;
 }
 
@@ -60,6 +62,8 @@ bool ISavedGame::read_chunk(
         dst_values,
         dst_count);
 
+    result &= is_all_data_read();
+
     return result;
 }
 
diff --git a/shared/qcommon/ojk_i_saved_game_fwd.h b/shared/qcommon/ojk_i_saved_game_fwd.h
index 3573f3b..c9559fa 100644
--- a/shared/qcommon/ojk_i_saved_game_fwd.h
+++ b/shared/qcommon/ojk_i_saved_game_fwd.h
@@ -61,6 +61,9 @@ public:
         TDst* dst_values,
         int dst_count);
 
+    // Returns true if all data read from the internal buffer.
+    virtual bool is_all_data_read() const = 0;
+
 
     // Writes a chunk into the file from the internal buffer.
     virtual bool write_chunk(
diff --git a/shared/qcommon/ojk_saved_game.cpp b/shared/qcommon/ojk_saved_game.cpp
index 936c80b..b170dfe 100644
--- a/shared/qcommon/ojk_saved_game.cpp
+++ b/shared/qcommon/ojk_saved_game.cpp
@@ -296,6 +296,11 @@ bool SavedGame::read_chunk(
     return true;
 }
 
+bool SavedGame::is_all_data_read() const
+{
+    return io_buffer_.size() == io_buffer_offset_;
+}
+
 bool SavedGame::write_chunk(
     const SavedGame::ChunkId chunk_id)
 {
diff --git a/shared/qcommon/ojk_saved_game.h b/shared/qcommon/ojk_saved_game.h
index a91515c..e9b04d2 100644
--- a/shared/qcommon/ojk_saved_game.h
+++ b/shared/qcommon/ojk_saved_game.h
@@ -63,6 +63,10 @@ public:
     using ISavedGame::read_chunk;
 
 
+    // Returns true if all data read from the internal buffer.
+    bool is_all_data_read() const override;
+
+
     // Writes a chunk into the file from the internal buffer.
     bool write_chunk(
         const ChunkId chunk_id) override;

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/openjk.git



More information about the Pkg-games-commits mailing list