[erlang-questions] Problem with binary_to_term on different machines

Mikael Pettersson <>
Wed Feb 1 14:31:10 CET 2017


Sverker Eriksson writes:
 > Correction: Bug exists since OTP-17.0.
 > 
 > (and i tags R16B02_yielding_binary_to_term and 
 > OTP_R16B03_yielding_binary_to_term)
 > 
 > /Sverker
 > 
 > 
 > On 01/20/2017 05:17 PM, Sverker Eriksson wrote:
 > > This is indeed a problem in Erlang VM code (shallow copy of inflate 
 > > state)
 > > that has existed since R16B03, but not caused actual problem until 
 > > zlib v1.2.9.
 > >
 > > Fix coming up. Here is a preliminary patch for the impatient.

Has this landed in OTP master yet?  I've been keeping a look out for it,
but haven't seen it (I may have missed it of course).

I'd like to backport it to our internal OTP-18 and OTP-19.

/Mikael



 > >
 > > diff --git a/erts/emulator/beam/external.c 
 > > b/erts/emulator/beam/external.c
 > > index beed847..1c4fff5 100644
 > > --- a/erts/emulator/beam/external.c
 > > +++ b/erts/emulator/beam/external.c
 > > @@ -1431,6 +1431,10 @@ static B2TContext* b2t_export_context(Process* 
 > > p, B2TContext* src)
 > >      if (ctx->state >= B2TDecode && ctx->u.dc.next == &src->u.dc.res) {
 > >          ctx->u.dc.next = &ctx->u.dc.res;
 > >      }
 > > +    else if (ctx->state == B2TUncompressChunk) {
 > > +        int cres = inflateCopy(&ctx->u.uc.stream, &src->u.uc.stream);
 > > +        ASSERT(cres == Z_OK); (void)cres;
 > > +    }
 > >      hp = HAlloc(p, PROC_BIN_SIZE);
 > >      ctx->trap_bin = erts_mk_magic_binary_term(&hp, &MSO(p), context_b);
 > >      return ctx;
 > >
 > >
 > > /Sverker, Erlang/OTP
 > >
 > >
 > > On 01/19/2017 04:14 AM, Michel Boaventura wrote:
 > >> Hi all,
 > >>
 > >> I've build erlang 19 from scratch on my gentoo machine but can't use
 > >> dialyzer, because it complains my beam files weren't compiled with
 > >> debug_info.
 > >>
 > >> I've read and debugged a log of dialyzer and erlang code and find out 
 > >> the
 > >> issue is that for some reason erlang can't parse the abstract part of 
 > >> the
 > >> files.
 > >>
 > >> To check this I save the abstract part on a file and tried to parse 
 > >> it on
 > >> my gentoo machine and on a Ubuntu server I have access. For some 
 > >> reason I
 > >> don't know it reads with no problem Ubuntu but gives me an invalid 
 > >> arg on
 > >> gentoo.
 > >>
 > >> I'm very new to erlang and have no clue of how to debug further. The 
 > >> binary
 > >> is attached and I'm reading it like:
 > >>
 > >> {ok, [Binary]} = file:consult("Abstr").
 > >> Term = binary_to_term(Binary).
 > >>
 > >> ps: I've sent a message similar to this one on this list, but since 
 > >> it was
 > >> my first one I think it wasn't accepted (and I do apologize for the 
 > >> double
 > >> post if you received it). But after it I've discovered the problem with
 > >> binary_to_term, so that message isn't so useful anyway.
 > >>
 > >>
 > >>
 > >> _______________________________________________
 > >> erlang-questions mailing list
 > >> 
 > >> http://erlang.org/mailman/listinfo/erlang-questions
 > >
 > >
 > >
 > >
 > > _______________________________________________
 > > erlang-questions mailing list
 > > 
 > > http://erlang.org/mailman/listinfo/erlang-questions
 > 
 > 
 > ----------------------------------------------------------------------
 > _______________________________________________
 > erlang-questions mailing list
 > 
 > http://erlang.org/mailman/listinfo/erlang-questions

-- 



More information about the erlang-questions mailing list