Changeset - r25188:cd267e3f3a88
[Not reviewed]
master
0 1 0
Milek7 - 4 years ago 2021-04-17 18:19:18
Milek7@users.noreply.github.com
Fix: Corrupted savegame could crash the game by providing invalid gamelog enums. (#9045)
1 file changed with 9 insertions and 6 deletions:
0 comments (0 inline, 0 general)
src/saveload/gamelog_sl.cpp
Show inline comments
 
@@ -107,8 +107,11 @@ static void Load_GLOG_common(LoggedActio
 
	assert(gamelog_action == nullptr);
 
	assert(gamelog_actions == 0);
 

	
 
	GamelogActionType at;
 
	while ((at = (GamelogActionType)SlReadByte()) != GLAT_NONE) {
 
	byte type;
 
	while ((type = SlReadByte()) != GLAT_NONE) {
 
		if (type >= GLAT_END) SlErrorCorrupt("Invalid gamelog action type");
 
		GamelogActionType at = (GamelogActionType)type;
 

	
 
		gamelog_action = ReallocT(gamelog_action, gamelog_actions + 1);
 
		LoggedAction *la = &gamelog_action[gamelog_actions++];
 

	
 
@@ -118,8 +121,10 @@ static void Load_GLOG_common(LoggedActio
 
		la->change = nullptr;
 
		la->changes = 0;
 

	
 
		GamelogChangeType ct;
 
		while ((ct = (GamelogChangeType)SlReadByte()) != GLCT_NONE) {
 
		while ((type = SlReadByte()) != GLCT_NONE) {
 
			if (type >= GLCT_END) SlErrorCorrupt("Invalid gamelog change type");
 
			GamelogChangeType ct = (GamelogChangeType)type;
 

	
 
			la->change = ReallocT(la->change, la->changes + 1);
 

	
 
			LoggedChange *lc = &la->change[la->changes++];
 
@@ -127,8 +132,6 @@ static void Load_GLOG_common(LoggedActio
 
			memset(lc, 0, sizeof(*lc));
 
			lc->ct = ct;
 

	
 
			assert((uint)ct < GLCT_END);
 

	
 
			SlObject(lc, _glog_desc[ct]);
 
		}
 
	}
0 comments (0 inline, 0 general)