Nathan Weizenbaum | 14 May 01:54
Gravatar

Re: Minor memory leak in 1.8.6?

I think the point of ALLOCA_N is that the memory is allocated from the 
stack, and thus doesn't have to be explicitly freed.

Christopher Thompson wrote:
> Is it not the case that rb_Str_to_inum(str, base, badcheck) in 
> bignum.c leaks the memory allocated with ALLOCA_N?
>
> I think it should always be the case that the string has a sentinel 
> and so if we end up running that section, there's already a bug, in 
> which case this may not be worth worrying about.
>
>
> VALUE
> rb_str_to_inum(str, base, badcheck)
>     VALUE str;
>     int base;
>     int badcheck;
> {
>     char *s;
>     long len;
>
>     StringValue(str);
>     if (badcheck) {
>     s = StringValueCStr(str);
>     }
>     else {
>     s = RSTRING(str)->ptr;
>     }
>     if (s) {
>     len = RSTRING(str)->len;
>     if (s[len]) {        /* no sentinel somehow */
>         char *p = ALLOCA_N(char, len+1);  /* THIS BIT HERE */
>
>         MEMCPY(p, s, char, len);
>         p[len] = '\0';
>         s = p;
>     }
>     }
>     return rb_cstr_to_inum(s, base, badcheck);
> }
>
>


Gmane