[erlang-bugs] Weird exception error return involving bitstrings

Björn Gustavsson bgustavsson@REDACTED
Tue Oct 30 08:56:05 CET 2012


On Mon, Oct 29, 2012 at 11:56 PM, Adam Rutkowski <hq@REDACTED> wrote:
> Hi,
>
> I am facing weird behaviour for the following code:
>
> -module(foo).
> -export([bar/1]).
> -include_lib("eunit/include/eunit.hrl").
>
> bar(<<>>) -> ok;
> bar(Bin) when is_bitstring(Bin) andalso not is_binary(Bin) ->
>     bar(<<Bin/binary, 0:1>>);
> bar(<<_:8/integer, Rest/binary>>) ->
>     bar(Rest).
>
> foobar1_test() -> ok = bar(<<1,2,3>>).
> foobar2_test() -> ok = bar(<<256:8>>).
> foobar3_test() -> ok = bar(<<256:7>>).
> foobar4_test() -> ok = bar(<<1,2,3>>).
>

Yes, there are two bugs in the error handling when
appending to a binary.

* If the binary has not been previously been appended
to, the exception type would not be set if an exception
was generated, leading to random exceptions.

* If the binary had been previously appended to, no
exception would be generated if (for example) unit was
set to 8 bits and the size of the binary was not a
multiple of 8 bits.

We will fix both bugs in R15B03.

/Bjorn

-- 
Björn Gustavsson, Erlang/OTP, Ericsson AB



More information about the erlang-bugs mailing list