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
[email protected]
https://lists.nongnu.org/mailman/listinfo/chicken-users