chicken-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Chicken-users] bind egg and strings


From: Andrei Barbu
Subject: [Chicken-users] bind egg and strings
Date: Sat, 9 Feb 2013 18:07:55 -0500

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



reply via email to

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