From 96f6e470284858f1b8644ea949283dad24161dfe Mon Sep 17 00:00:00 2001 From: Sverker Eriksson Date: Fri, 16 Jan 2015 21:23:44 +0100 Subject: 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. --- erts/emulator/beam/erl_term.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'erts') 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) \ -- cgit v1.2.3