[erlang-bugs] beam_validator does not validate against circularity in constructed values

Erik Søe Sørensen <>
Mon Jun 27 11:00:48 CEST 2011


The following function passes beam_validator verification, but 
constructs a recursive data structure:

    {module, beamtoying4}.  %% version = 0
    {exports, [{module_info,0},{module_info,1},{recdata,1}]}.
    {labels, 2}.
    {function, recdata, 1, 2}.
      {label,1}.
        {func_info,{atom,beamtoying4},{atom,recdata},1}.
      {label,2}.
        {test_heap,3,1}.
        {put_tuple,2,{x,1}}.
        {put,{x,0}}.
        {put,{x,1}}.
        {move,{x,1},{x,0}}.
        return.

Demo:

    :q$ erlc beamtoying4.S
    :q$ erl
    Erlang R14B (erts-5.8.1) [source] [64-bit] [smp:8:8] [rq:8]
    [async-threads:0] [kernel-poll:false]

    Eshell V5.8.1  (abort with ^G)
    1> beamtoying4:recdata(x).
    {x,
     {x,{x,{x,{x,{x,{x,{x,{x,{x,{x,{x,{x,{x,{x,...}}}}}}}}}}}}}}}

(The REPL is then stuck.)

Regards,
Erik Søe Sørensen


More information about the erlang-bugs mailing list