[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