From 3f98bc77a8a6056dc7674aa48c683eea2bd0c5b8 Mon Sep 17 00:00:00 2001 From: Sebastian Dröge Date: Mon, 19 Aug 2013 17:02:24 +0200 Subject: 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 --- orc/orcbytecode.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) 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; } -- cgit v1.2.3