From 21ed47ce1366ee6b9b861391faeccc0eb2c5afb3 Mon Sep 17 00:00:00 2001 From: Torbjörn Andersson Date: Mon, 18 Feb 2013 20:12:35 +0100 Subject: VIDEO: Fix Smacker crash, as per madmoose's suggestion Apparently, in some movies the Smacker decoder would peek ahead past the end of the bitstream, even though it didn't necessarily use all of those bits later. Fix that by first checking how many bits are still available. (This was originally reported for the mg1shoot.smk cutscene in the 4 CD version of The Feeble Files.) --- video/smk_decoder.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'video') diff --git a/video/smk_decoder.cpp b/video/smk_decoder.cpp index c49791100d..4e18268e72 100644 --- a/video/smk_decoder.cpp +++ b/video/smk_decoder.cpp @@ -119,7 +119,7 @@ uint16 SmallHuffmanTree::decodeTree(uint32 prefix, int length) { } uint16 SmallHuffmanTree::getCode(Common::BitStream &bs) { - byte peek = bs.peekBits(8); + byte peek = bs.peekBits(MIN(bs.size() - bs.pos(), 8)); uint16 *p = &_tree[_prefixtree[peek]]; bs.skip(_prefixlength[peek]); @@ -257,7 +257,7 @@ uint32 BigHuffmanTree::decodeTree(uint32 prefix, int length) { } uint32 BigHuffmanTree::getCode(Common::BitStream &bs) { - byte peek = bs.peekBits(8); + byte peek = bs.peekBits(MIN(bs.size() - bs.pos(), 8)); uint32 *p = &_tree[_prefixtree[peek]]; bs.skip(_prefixlength[peek]); -- cgit v1.2.3