[Scummvm-cvs-logs] scummvm master -> cacf8fbcb0939f34eecc1b982b767f198a7bed16

m-kiewitz m_kiewitz at users.sourceforge.net
Sat Jun 13 17:19:30 CEST 2015


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:
cacf8fbcb0 SHERLOCK: 3DO: add checks to ccb header reading


Commit: cacf8fbcb0939f34eecc1b982b767f198a7bed16
    https://github.com/scummvm/scummvm/commit/cacf8fbcb0939f34eecc1b982b767f198a7bed16
Author: Martin Kiewitz (m_kiewitz at users.sourceforge.net)
Date: 2015-06-13T17:18:59+02:00

Commit Message:
SHERLOCK: 3DO: add checks to ccb header reading

verify that height+width from PRE0/PRE1 are correct
security check

Changed paths:
    engines/sherlock/image_file.cpp



diff --git a/engines/sherlock/image_file.cpp b/engines/sherlock/image_file.cpp
index 61ed137..512018b 100644
--- a/engines/sherlock/image_file.cpp
+++ b/engines/sherlock/image_file.cpp
@@ -391,8 +391,10 @@ void ImageFile3DO::load3DOCelFile(Common::SeekableReadStream &stream) {
 	uint16 ccbPPMP0 = 0;
 	uint16 ccbPPMP1 = 0;
 	uint32 ccbPRE0 = 0;
+	uint16 ccbPRE0_height = 0;
 	byte   ccbPRE0_bitsPerPixel = 0;
 	uint32 ccbPRE1 = 0;
+	uint16 ccbPRE1_width = 0;
 	uint32 ccbWidth = 0;
 	uint32 ccbHeight = 0;
 	// pixel lookup table
@@ -472,6 +474,11 @@ void ImageFile3DO::load3DOCelFile(Common::SeekableReadStream &stream) {
 			ccbPRE0_bitsPerPixel = imagefile3DO_cel_bitsPerPixelLookupTable[ccbPRE0 & 0x07];
 			if (!ccbPRE0_bitsPerPixel)
 				error("load3DOCelFile: Invalid CCB PRE0 bits per pixel");
+
+			ccbPRE0_height = ((ccbPRE0 >> 6) & 0x03FF) + 1;
+			ccbPRE1_width  = (ccbPRE1 & 0x03FF) + 1;
+			assert(ccbPRE0_height == ccbHeight);
+			assert(ccbPRE1_width == ccbWidth);
 			break;
 
 		case MKTAG('P', 'L', 'U', 'T'):
@@ -603,8 +610,10 @@ void ImageFile3DO::load3DOCelRoomData(Common::SeekableReadStream &stream) {
 	uint16 ccbPPMP0 = 0;
 	uint16 ccbPPMP1 = 0;
 	uint32 ccbPRE0 = 0;
+	uint16 ccbPRE0_height = 0;
 	byte   ccbPRE0_bitsPerPixel = 0;
 	uint32 ccbPRE1 = 0;
+	uint16 ccbPRE1_width = 0;
 	uint32 ccbWidth = 0;
 	uint32 ccbHeight = 0;
 	// cel data
@@ -636,6 +645,11 @@ void ImageFile3DO::load3DOCelRoomData(Common::SeekableReadStream &stream) {
 		if (!ccbPRE0_bitsPerPixel)
 			error("load3DOCelRoomData: Invalid CCB PRE0 bits per pixel");
 
+		ccbPRE0_height = ((ccbPRE0 >> 6) & 0x03FF) + 1;
+		ccbPRE1_width  = (ccbPRE1 & 0x03FF) + 1;
+		assert(ccbPRE0_height == ccbHeight);
+		assert(ccbPRE1_width == ccbWidth);
+
 		if (ccbPRE0_bitsPerPixel != 16) {
 			// We currently support 16-bits per pixel in here
 			error("load3DOCelRoomData: bits per pixel < 16?!?!?");






More information about the Scummvm-git-logs mailing list