aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSverker Eriksson <[email protected]>2015-01-16 21:23:44 +0100
committerBjörn-Egil Dahlberg <[email protected]>2015-03-12 17:16:06 +0100
commit96f6e470284858f1b8644ea949283dad24161dfe (patch)
tree4b96a95347baa0dea80a10f943aeb6d42f9a017b
parentf602e2327c330969165430bbba1a0b997200606d (diff)
downloadotp-96f6e470284858f1b8644ea949283dad24161dfe.tar.gz
otp-96f6e470284858f1b8644ea949283dad24161dfe.tar.bz2
otp-96f6e470284858f1b8644ea949283dad24161dfe.zip
erts: Fix bug in _make_header macro
Called with a signed int 'sz' argument on 64 bit would cause sign extension 'sz' was larger than 33554431.
-rw-r--r--erts/emulator/beam/erl_term.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/erts/emulator/beam/erl_term.h b/erts/emulator/beam/erl_term.h
index fde90997e3..72946d9ddf 100644
--- a/erts/emulator/beam/erl_term.h
+++ b/erts/emulator/beam/erl_term.h
@@ -299,7 +299,7 @@ _ET_DECLARE_CHECKED(Uint,atom_val,Eterm)
#define atom_val(x) _ET_APPLY(atom_val,(x))
/* header (arityval or thing) access methods */
-#define _make_header(sz,tag) ((Uint)(((sz) << _HEADER_ARITY_OFFS) + (tag)))
+#define _make_header(sz,tag) ((Uint)(((Uint)(sz) << _HEADER_ARITY_OFFS) + (tag)))
#define is_header(x) (((x) & _TAG_PRIMARY_MASK) == TAG_PRIMARY_HEADER)
//#define _unchecked_header_arity(x) ((x) >> _HEADER_ARITY_OFFS)
#define _unchecked_header_arity(x) \