[erlang-bugs] Erlang problems with big binaries

Mikael Pettersson mikpelinux@REDACTED
Wed Jan 21 16:45:57 CET 2015


Nico Kruber writes:
 > I'd like to 'bor' (binary or) a big binary but the result is an empty list(?!)
 > Smaller binaries work as expected.
 > 
 > Steps to reproduce (at least on Erlang 17.4):
 > 
 > A=erlang:term_to_binary(lists:seq(1000000,2200000)).
 > B=erlang:term_to_binary(lists:seq(1000001,2200001)).
 > ASize=erlang:bit_size(A).
 > BSize=erlang:bit_size(B).
 > <<ANr:ASize>> = A.
 > <<BNr:BSize>> = B.
 > XNr = ANr bor BNr.
 > <<XNr:BSize>>.
 > 
 > 
 > Please note that printing the actual values of A or B is not a good idea ;)
 > and so would XNr but including it directly into a binary fails with the same 
 > error: "** exception error: bad argument"
 > <<(ANr bor BNr):BSize>>.

I can confirm the [] result, in both 17.4 and r15b03-1.

Running these steps in a debug-enabled otp 17.4 on x86_64 results in:

7> XNr = ANr bor BNr.
beam/erl_arith.c:1078:erts_bor() Assertion failed: ((arg1) != ((~((Uint) 0) << 6) | ((0x3 << 4) | ((0x2 << 2) | 0x3))))
               Abort

so the [] result is probably due to insufficient type checking.

I'll take a look, unless someone beats me to it.



More information about the erlang-bugs mailing list