chicken-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Chicken-users] bind egg and strings


From: Andrei Barbu
Subject: Re: [Chicken-users] bind egg and strings
Date: Mon, 11 Feb 2013 02:04:16 -0500

Attached is a trivial patch that does the strdup.


Andrei


On Sat, Feb 9, 2013 at 6:07 PM, Andrei Barbu <address@hidden> wrote:
> Hi,
>
>
> I've been using the bind egg and encountered some strange behaviour.
> I have:
>
> struct a {
>   char *b;
> };
>
> Bind generates:
>
> (begin
>   (define a-b
>     (foreign-lambda* c-string (((c-pointer (struct "a")) s)) "return(s->b);"))
>   (define make-a
>     (foreign-lambda*
>       (c-pointer (struct "a"))
>       ((c-string b))
>       "struct a *tmp_ = (struct a *)C_malloc(sizeof(struct
> a));\ntmp_->b = b;\n\nC_return(tmp_);")))
>
>
> It seems to me that make-a is guaranteed to eventually lead to an out
> of bounds memory access because of:
>  tmp_->b = b
> b is a c-string and will be GCed as soon a the foreign-lambda* returns.
> This is further exacerbated when using -mutable-fields making it
> impossible to set any char* member.
> Shouldn't the bind egg be doing an strdup here? Is there a way to get
> it do so? Or am I missing something?
>
>
> Thanks!
> Andrei

Attachment: patch.diff
Description: Binary data


reply via email to

[Prev in Thread] Current Thread [Next in Thread]