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

sev- noreply at scummvm.org
Thu Jul 23 13:55:32 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:
cef1021de8 DIRECTOR: Fix crash and size mismatch saving rich text cast members


Commit: cef1021de8446f718d90f6b922f03e2beafd4502
    https://github.com/scummvm/scummvm/commit/cef1021de8446f718d90f6b922f03e2beafd4502
Author: Gianluca Boiano (morf3089 at gmail.com)
Date: 2026-07-23T15:55:29+02:00

Commit Message:
DIRECTOR: Fix crash and size mismatch saving rich text cast members

writeCastData() passed a null pointer to write(), wrote zeros over five
real fields and declared 26 bytes for a 34-byte body. Only D5 was
tested; the D5-D10 range matches the constructor's.

Fixes SIGSEGV saving text_d5_win.dir (director-tests/saving)

Changed paths:
    engines/director/castmember/richtext.cpp


diff --git a/engines/director/castmember/richtext.cpp b/engines/director/castmember/richtext.cpp
index fe5a08ab925..cbb708fb00f 100644
--- a/engines/director/castmember/richtext.cpp
+++ b/engines/director/castmember/richtext.cpp
@@ -273,26 +273,30 @@ Common::String RichTextCastMember::formatInfo() {
 }
 
 uint32 RichTextCastMember::getCastDataSize() {
-	if (_cast->_version >= kFileVer500 && _cast->_version < kFileVer600) {
-		// 8 bytes (_initialRect)
-		// 8 bytes (_boundingRect)
-		// Ignored 9 bytes
+	if (_cast->_version >= kFileVer500 && _cast->_version < kFileVer1100) {
+		// 8 bytes (_initialRect) + 8 bytes (_boundingRect)
+		// 1 antialiasFlag, 1 cropFlags, 2 scrollPos, 2 antialiasFontSize,
+		// 2 displayHeight, 1 skip byte
 		// 3 bytes r, g, b (foreground, each a byte)
 		// 6 bytes r, g, b (background, each 2 bytes)
-		return 26;
+		return 34;
 	} else {
-		warning("RichTextCastMember()::getCastDataSize():>D5 isn't handled");
+		warning("RichTextCastMember()::getCastDataSize(): version v%d isn't handled", humanVersion(_cast->_version));
 		return 0;
 	}
 }
 
 void RichTextCastMember::writeCastData(Common::SeekableWriteStream *writeStream) {
-	if (_cast->_version >= kFileVer500 && _cast->_version < kFileVer600) {
+	if (_cast->_version >= kFileVer500 && _cast->_version < kFileVer1100) {
 		Movie::writeRect(writeStream, _initialRect);
 		Movie::writeRect(writeStream, _boundingRect);
 
-		writeStream->write(0, 8);
-		writeStream->writeByte(0);
+		writeStream->writeByte(_antialiasFlag);
+		writeStream->writeByte(_cropFlags);
+		writeStream->writeUint16BE(_scrollPos);
+		writeStream->writeUint16BE(_antialiasFontSize);
+		writeStream->writeUint16BE(_displayHeight);
+		writeStream->writeByte(0); // skip byte
 
 		uint8 r, g, b;
 		_pf32.colorToRGB(_foreColor, r, g, b);
@@ -305,7 +309,7 @@ void RichTextCastMember::writeCastData(Common::SeekableWriteStream *writeStream)
 		writeStream->writeUint16BE(g << 8);
 		writeStream->writeUint16BE(b << 8);
 	} else {
-		warning("RichTextCastMember()::writeCastData(): >D5 isn't handled");
+		warning("RichTextCastMember()::writeCastData(): version v%d isn't handled", humanVersion(_cast->_version));
 	}
 }
 




More information about the Scummvm-git-logs mailing list