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

Reply via email to