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: Daniel Leslie
Subject: Re: [Chicken-users] bind egg and strings
Date: Tue, 12 Feb 2013 13:25:22 -0800

Can someone with a little more core knowledge please comment on this?

I'm also curious as to whether this test case will eventually result in an OOB error due to foreign reliance on GC-controlled memory.

-Dan


On Sun, Feb 10, 2013 at 11:04 PM, Andrei Barbu <address@hidden> wrote:
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

_______________________________________________
Chicken-users mailing list
address@hidden
https://lists.nongnu.org/mailman/listinfo/chicken-users



reply via email to

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