diff options
| author | Eugene Sandulenko | 2017-08-24 08:53:08 +0200 | 
|---|---|---|
| committer | Eugene Sandulenko | 2017-08-24 08:53:08 +0200 | 
| commit | fd1ea78b35c88492f3d9ead9e2d2c4ccb6ab7d62 (patch) | |
| tree | 28d486154aa09034a6361a40ff8ad71ef26c1da3 | |
| parent | 59bc70299ec8f654686a69bac15440d81c4ad182 (diff) | |
| download | scummvm-rg350-fd1ea78b35c88492f3d9ead9e2d2c4ccb6ab7d62.tar.gz scummvm-rg350-fd1ea78b35c88492f3d9ead9e2d2c4ccb6ab7d62.tar.bz2 scummvm-rg350-fd1ea78b35c88492f3d9ead9e2d2c4ccb6ab7d62.zip | |
WAGE: Read rectangles sanely
| -rw-r--r-- | engines/wage/util.cpp | 22 | 
1 files changed, 17 insertions, 5 deletions
| diff --git a/engines/wage/util.cpp b/engines/wage/util.cpp index f2073ac140..74f2cf5c18 100644 --- a/engines/wage/util.cpp +++ b/engines/wage/util.cpp @@ -54,12 +54,24 @@ namespace Wage {  Common::Rect *readRect(Common::SeekableReadStream *in) {  	int x1, y1, x2, y2; -	y1 = in->readUint16BE(); -	x1 = in->readUint16BE(); -	y2 = in->readUint16BE() + 4; -	x2 = in->readUint16BE() + 4; +	y1 = in->readSint16BE(); +	x1 = in->readSint16BE(); +	y2 = in->readSint16BE() + 4; +	x2 = in->readSint16BE() + 4; -	debug(9, "readRect: %d, %d, %d, %d", x1, y1, x2, y2); +	bool normalized = false; + +	if (x1 > x2) { +		SWAP(x1, x2); +		normalized = true; +	} + +	if (y1 > y2) { +		SWAP(y1, y2); +		normalized = true; +	} + +	debug(9, "readRect: %s%d, %d, %d, %d", normalized ? "norm " : "", x1, y1, x2, y2);  	return new Common::Rect(x1, y1, x2, y2);  } | 
