Project

General

Profile

Bug #3668 » string.c.bug3668.patch

string.c (str_make_independent): set capacity of expanded string correctly - pweldon (Peter Weldon), 08/17/2010 06:29 AM

View differences:

string.c (working copy)
{
char *ptr;
long len = RSTRING_LEN(str);
long capa = len + expand;
ptr = ALLOC_N(char, len+expand+1);
if (RSTRING_PTR(str)) {
memcpy(ptr, RSTRING_PTR(str), expand < 0 ? len + expand : len);
if(len > capa)
len = capa;
ptr = ALLOC_N(char, capa + 1);
if(RSTRING_PTR(str)) {
memcpy(ptr, RSTRING_PTR(str), len);
}
len += expand;
STR_SET_NOEMBED(str);
STR_UNSET_NOCAPA(str);
ptr[len] = 0;
RSTRING(str)->as.heap.ptr = ptr;
RSTRING(str)->as.heap.len = len;
RSTRING(str)->as.heap.aux.capa = len;
STR_UNSET_NOCAPA(str);
RSTRING(str)->as.heap.aux.capa = capa;
}
#define str_make_independent(str) str_make_independent_expand(str, 0L)
(3-3/3)