[erlang-questions] RE: R14 vs R13 binary handling in driver_outputv

Koener Antoine <>
Wed Mar 9 23:53:50 CET 2011


Not a real answer but it's more about secure programming:
why do you use 'signed' integer for offset and size ?

Is offset going to be negative or even size ?


On Mar 9, 2011, at 17:53 , Tim Watson wrote:

> Hi all,
>
> I have a linked in driver which receives data from port_command/2 in
> driver_outputv and casts the binary into some shape using a couple of
> structs. This approach works fine for R13, but in R14 I get extra data
> at the end of the binary. I'm guessing I've screwed up by making an
> assumption about the length of the binary - hoping someone can give me
> a nudge in the right direction.
>
> The iolist that goes to port_command/2 looks like this:
>
> DataSizeMarkers = [ size(Input), size(Xsl) ],
> [[ InputType, XslType, <<0:16/native-integer>> ],
>    [ <<Marker:32/native-integer>> || Marker <- DataSizeMarkers ],
>    [ Input, Xsl ]];
>
> The variables are all binaries. This goes direct to driver outputv,
> where it is processed like so:
>
>  ErlDrvBinary *bin = ev->binv[1];
>  int bin_size = bin->orig_size;
>  Int32 offset = (Int32)(sizeof(InputSpecHeaders) +
> sizeof(PayloadSizeHeaders));
>  // error checking omitted for brevity
>  const char *buffer = &(bin->orig_bytes[0]);
>  const InputSpecHeaders *hspec = (const InputSpecHeaders*  
> const)buffer;
>  const PayloadSizeHeaders *hsoffset = (const PayloadSizeHeaders*) 
> (hspec + 1);
>  PayloadSizeHeaders hsize = *hsoffset;
>  hsoffset++;
>  buffer = (const char*)hsoffset;
>
> And those structures:
>
> typedef int8_t    Int8;
> typedef int16_t   Int16;
> typedef int32_t   Int32;
>
> typedef struct {
>  Int8 input_kind;
>  Int8 xsl_kind;
>  Int16 param_grp_arity;
> } InputSpecHeaders;
>
> typedef struct  {
>  Int32 input_size;
>  Int32 xsl_size;
> } PayloadSizeHeaders;
>
>
> Source code is here: http://github.com/hyperthunk/erlxsl.
>
> Any advice would be most welcome - I'm still finding my way around
> linked-in drivers!
>
> Cheers,
>
> Tim
>
> ________________________________________________________________
> erlang-questions (at) erlang.org mailing list.
> See http://www.erlang.org/faq.html
> To unsubscribe; mailto:
>



More information about the erlang-questions mailing list