Pārlūkot izejas kodu

Fix segfault on encoding a bignum

pull/49/head
Sergey Urbanovich pirms 11 gadiem
vecāks
revīzija
4d57502bf0
2 mainītis faili ar 12 papildinājumiem un 4 dzēšanām
  1. +10
    -2
      c_src/encoder.c
  2. +2
    -2
      src/jiffy.erl

+ 10
- 2
c_src/encoder.c Parādīt failu

@ -514,7 +514,7 @@ enc_yield(Encoder* e, ERL_NIF_TERM stack)
enc->is_resource = 1;
}
ERL_NIF_TERM val = enif_make_resource(e->env, enc);
return enif_make_tuple3(e->env, e->atoms->atom_partial, val, stack);
return enif_make_tuple4(e->env, e->atoms->atom_partial, val, stack, e->iolist);
}
@ -545,7 +545,15 @@ encode(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
}
stack = enif_make_list(env, 1, argv[0]);
} else {
stack = argv[1];
int arity;
ERL_NIF_TERM* args;
if(!enif_get_tuple(env, argv[1], &arity, (const ERL_NIF_TERM **) &args)) {
return enif_make_badarg(env);
} else if(arity != 2) {
return enif_make_badarg(env);
}
stack = args[0];
e->iolist = args[1];
e->env = env;
}

+ 2
- 2
src/jiffy.erl Parādīt failu

@ -116,8 +116,8 @@ nif_decode(_Data, _Options) ->
nif_encode_loop(Data, Options) ->
case nif_encode(Data, Options) of
{partial, Encoder, Stack} ->
nif_encode_loop(Encoder, Stack);
{partial, Encoder, Stack, IoList} ->
nif_encode_loop(Encoder, {Stack, IoList});
Other ->
Other
end.

Notiek ielāde…
Atcelt
Saglabāt