Attached is a trivial patch that does the strdup.
Andrei On Sat, Feb 9, 2013 at 6:07 PM, Andrei Barbu <[email protected]> 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
_______________________________________________ Chicken-users mailing list [email protected] https://lists.nongnu.org/mailman/listinfo/chicken-users
