[Scummvm-git-logs] scummvm master -> 05c97e3e7eaa6bef3f9c7297a61581a9ce48ddc3

sev- noreply at scummvm.org
Thu Jul 27 12:25:48 UTC 2023


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

Summary:
05c97e3e7e DIRECTOR: Move sprite dimensions sanity cleanse deeper in frame loader


Commit: 05c97e3e7eaa6bef3f9c7297a61581a9ce48ddc3
    https://github.com/scummvm/scummvm/commit/05c97e3e7eaa6bef3f9c7297a61581a9ce48ddc3
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2023-07-27T14:23:44+02:00

Commit Message:
DIRECTOR: Move sprite dimensions sanity cleanse deeper in frame loader

Since filmloop casts call the Sprite Data loading methods directly,
we want to fix the possible negative dimensions there.

Fixes starup of sequencer video in totaldistorion

  --start-movie="ATD\HD\ADTDVSVF\TDVIDDB1.DIR" totaldistortion-win

Changed paths:
    engines/director/frame.cpp


diff --git a/engines/director/frame.cpp b/engines/director/frame.cpp
index 9ee36f65653..884e0b135be 100644
--- a/engines/director/frame.cpp
+++ b/engines/director/frame.cpp
@@ -289,11 +289,6 @@ void Frame::readSpriteD2(Common::MemoryReadStreamEndian &stream, uint16 offset,
 		// This means that the relevant `case` label reads too many bytes and must be split
 		error("Frame::readSpriteD2(): Read %ld extra bytes", stream.pos() - finishPosition);
 	}
-
-	// Sometimes removed sprites leave garbage in the channel
-	// We set it to zero, so then could skip
-	if (sprite._width <= 0 || sprite._height <= 0)
-		sprite._width = sprite._height = 0;
 }
 
 void readSpriteDataD2(Common::SeekableReadStreamEndian &stream, Sprite &sprite, uint32 startPosition, uint32 finishPosition) {
@@ -353,6 +348,10 @@ void readSpriteDataD2(Common::SeekableReadStreamEndian &stream, Sprite &sprite,
 		}
 	}
 
+	// Sometimes removed sprites leave garbage in the channel
+	// We set it to zero, so then could skip
+	if (sprite._width <= 0 || sprite._height <= 0)
+		sprite._width = sprite._height = 0;
 }
 
 
@@ -565,11 +564,6 @@ void Frame::readSpriteD4(Common::MemoryReadStreamEndian &stream, uint16 offset,
 		// This means that the relevant `case` label reads too many bytes and must be split
 		error("Frame::readSpriteD4(): Read %ld extra bytes", stream.pos() - finishPosition);
 	}
-
-	// Sometimes removed sprites leave garbage in the channel
-	// We set it to zero, so then could skip
-	if (sprite._width <= 0 || sprite._height <= 0)
-		sprite._width = sprite._height = 0;
 }
 
 void readSpriteDataD4(Common::SeekableReadStreamEndian &stream, Sprite &sprite, uint32 startPosition, uint32 finishPosition) {
@@ -644,6 +638,11 @@ void readSpriteDataD4(Common::SeekableReadStreamEndian &stream, Sprite &sprite,
 			error("readSpriteDataD4(): Miscomputed field position: %ld", stream.pos() - startPosition);
 		}
 	}
+
+	// Sometimes removed sprites leave garbage in the channel
+	// We set it to zero, so then could skip
+	if (sprite._width <= 0 || sprite._height <= 0)
+		sprite._width = sprite._height = 0;
 }
 
 /**************************




More information about the Scummvm-git-logs mailing list