From: Sebastian Dröge Date: Mon, 19 Aug 2013 15:02:24 +0000 (+0200) Subject: orcbytecode: Fix parsing of 64 bit values from bytecode X-Git-Tag: orc-0.4.18~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3f98bc77a8a6056dc7674aa48c683eea2bd0c5b8;p=platform%2Fupstream%2Forc.git orcbytecode: Fix parsing of 64 bit values from bytecode The shift by 24 bits has to be casted already, otherwise we shift into the sign bit which causes undefined behaviour. Thanks to Edward Hervey for debugging this. https://bugzilla.gnome.org/show_bug.cgi?id=698520 --- diff --git a/orc/orcbytecode.c b/orc/orcbytecode.c index 19af32c..816d154 100644 --- a/orc/orcbytecode.c +++ b/orc/orcbytecode.c @@ -359,14 +359,16 @@ orc_uint64 orc_bytecode_parse_get_uint64 (OrcBytecodeParse *parse) { orc_uint64 value; - value = orc_bytecode_parse_get_byte (parse); - value |= orc_bytecode_parse_get_byte (parse) << 8; - value |= orc_bytecode_parse_get_byte (parse) << 16; - value |= orc_bytecode_parse_get_byte (parse) << 24; - value |= (orc_uint64)orc_bytecode_parse_get_byte (parse) << 32; - value |= (orc_uint64)orc_bytecode_parse_get_byte (parse) << 40; - value |= (orc_uint64)orc_bytecode_parse_get_byte (parse) << 48; - value |= (orc_uint64)orc_bytecode_parse_get_byte (parse) << 56; + + value = ((orc_uint64)orc_bytecode_parse_get_byte (parse)); + value |= ((orc_uint64)orc_bytecode_parse_get_byte (parse)) << 8; + value |= ((orc_uint64)orc_bytecode_parse_get_byte (parse)) << 16; + value |= ((orc_uint64)orc_bytecode_parse_get_byte (parse)) << 24; + value |= ((orc_uint64)orc_bytecode_parse_get_byte (parse)) << 32; + value |= ((orc_uint64)orc_bytecode_parse_get_byte (parse)) << 40; + value |= ((orc_uint64)orc_bytecode_parse_get_byte (parse)) << 48; + value |= ((orc_uint64)orc_bytecode_parse_get_byte (parse)) << 56; + return value; }