[Scummvm-git-logs] scummvm master -> c9ae26fe75b81201832d1ce941c001c4274b9baa

Marisa-Chan noreply at scummvm.org
Wed Mar 11 15:38:20 UTC 2026


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .

Summary:
c9ae26fe75 GAMOS: Fix possible Out-of-bounds access CID 1645142, 1645143, 1645149, 1645152, 1645153, 1645155


Commit: c9ae26fe75b81201832d1ce941c001c4274b9baa
    https://github.com/scummvm/scummvm/commit/c9ae26fe75b81201832d1ce941c001c4274b9baa
Author: Marisa-Chan (thunder_8888 at mail.ru)
Date: 2026-03-11T22:37:56+07:00

Commit Message:
GAMOS: Fix possible Out-of-bounds access CID 1645142, 1645143, 1645149, 1645152, 1645153, 1645155

Changed paths:
    engines/gamos/vm.cpp


diff --git a/engines/gamos/vm.cpp b/engines/gamos/vm.cpp
index cd140c53679..d770499cb6a 100644
--- a/engines/gamos/vm.cpp
+++ b/engines/gamos/vm.cpp
@@ -488,8 +488,15 @@ uint32 VM::Context::getMem32(int memtype, uint32 offset) {
 	case REF_UNK:
 		return 0; // Set here breakpoint for find what is going wrong
 
-	case REF_STACK:
-		return getU32(_stack + offset);
+	case REF_STACK:	{
+		if (offset < (sizeof(_stack) - 4))
+			return getU32(_stack + offset);
+		else {
+			error("getMem32(): Out of bounds read, memType: REF_STACK  offset: 0x%02X", offset);
+			return 0;
+		}
+	}
+
 
 	case REF_EBX:
 		return getU32(EBX + offset);
@@ -509,8 +516,15 @@ uint8 VM::Context::getMem8(int memtype, uint32 offset) {
 	case REF_UNK:
 		return 0; // Set here breakpoint for find what is going wrong
 
-	case REF_STACK:
-		return _stack[offset];
+	case REF_STACK: {
+		if (offset < sizeof(_stack))
+			return _stack[offset];
+		else {
+			error("getMem8(): Out of bounds read, memType: REF_STACK  offset: 0x%02X", offset);
+			return 0;
+		}
+	}
+
 
 	case REF_EBX:
 		return EBX[offset];
@@ -529,9 +543,13 @@ void VM::Context::setMem32(int memtype, uint32 offset, uint32 val) {
 	default:
 	case REF_UNK:
 		break; // Set here breakpoint for find what is going wrong
-	case REF_STACK:
-		setU32(_stack + offset, val);
-		break;
+	case REF_STACK: {
+		if (offset < (sizeof(_stack) - 4))
+			setU32(_stack + offset, val);
+		else
+			error("setMem32(): Out of bounds write, memType: REF_STACK  offset: 0x%02X", offset);
+	} break;
+
 	case REF_EBX:
 		setU32(EBX + offset, val);
 		break;
@@ -551,9 +569,13 @@ void VM::Context::setMem8(int memtype, uint32 offset, uint8 val) {
 	default:
 	case REF_UNK:
 		break; // Set here breakpoint for find what is going wrong
-	case REF_STACK:
-		_stack[offset] = val;
-		break;
+	case REF_STACK:	{
+		if (offset < sizeof(_stack))
+			_stack[offset] = val;
+		else
+			error("setMem8(): Out of bounds write, memType: REF_STACK  offset: 0x%02X", offset);
+	} break;
+
 	case REF_EBX:
 		EBX[offset] = val;
 		break;
@@ -703,11 +725,17 @@ Common::String VM::Context::getString(int memtype, uint32 offset, uint32 maxLen)
 		return Common::String();
 
 	case REF_STACK: {
+		if (offset >= sizeof(_stack)) {
+			error("getString(): Out of bounds read, memType: REF_STACK  offset: 0x%02X", offset);
+			return Common::String();
+		}
+
 		Common::String s = Common::String((const char *)_stack + offset);
 		if (s.size() > maxLen)
 			s.erase(maxLen);
 		return s;
 	}
+
 	case REF_EBX: {
 		Common::String s = Common::String((const char *)EBX + offset);
 		if (s.size() > maxLen)




More information about the Scummvm-git-logs mailing list