[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
patch.diff
Description: Binary data