summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim-Philipp Müller <tim@centricular.net>2013-08-19 18:12:21 +0100
committerTim-Philipp Müller <tim@centricular.net>2013-08-19 18:15:21 +0100
commiteb9108ce7c01a4322a3b8098b1427901accbeefb (patch)
tree4f6f741f602c52adb544a40566c9ae3a85d69708
parent3f98bc77a8a6056dc7674aa48c683eea2bd0c5b8 (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.c6
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;
}