[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
- [Chicken-users] bind egg and strings,
Andrei Barbu <=