diff options
author | Tim-Philipp Müller <tim@centricular.net> | 2013-08-19 18:12:21 +0100 |
---|---|---|
committer | Tim-Philipp Müller <tim@centricular.net> | 2013-08-19 18:15:21 +0100 |
commit | eb9108ce7c01a4322a3b8098b1427901accbeefb (patch) | |
tree | 4f6f741f602c52adb544a40566c9ae3a85d69708 | |
parent | 3f98bc77a8a6056dc7674aa48c683eea2bd0c5b8 (diff) |
orcbytecode: Fix parsing of 32 bit values from bytecode as well
The shift by 24 bits has to be casted as well, otherwise we
shift into the sign bit which causes undefined behaviour.
See https://bugzilla.gnome.org/show_bug.cgi?id=698520
-rw-r--r-- | orc/orcbytecode.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/orc/orcbytecode.c b/orc/orcbytecode.c index 816d154..f568e14 100644 --- a/orc/orcbytecode.c +++ b/orc/orcbytecode.c @@ -349,9 +349,9 @@ orc_bytecode_parse_get_uint32 (OrcBytecodeParse *parse) { orc_uint32 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_uint32)orc_bytecode_parse_get_byte (parse)) << 8; + value |= ((orc_uint32)orc_bytecode_parse_get_byte (parse)) << 16; + value |= ((orc_uint32)orc_bytecode_parse_get_byte (parse)) << 24; return value; } |