ruby-changes:45971
From: nobu <ko1@a...>
Date: Tue, 21 Mar 2017 14:28:44 +0900 (JST)
Subject: [ruby-changes:45971] nobu:r58042 (trunk): string.c: use the usable size
nobu 2017-03-21 14:28:38 +0900 (Tue, 21 Mar 2017) New Revision: 58042 https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=58042 Log: string.c: use the usable size * string.c (rb_str_change_terminator_length): when called after the content has been copied, old terminator length no longer makes sense. use the whole usable size instead of capacity without terminator. [ruby-core:80257] [Bug #13339] Modified files: trunk/string.c Index: string.c =================================================================== --- string.c (revision 58041) +++ string.c (revision 58042) @@ -2102,11 +2102,11 @@ str_fill_term(VALUE str, char *s, long l https://github.com/ruby/ruby/blob/trunk/string.c#L2102 void rb_str_change_terminator_length(VALUE str, const int oldtermlen, const int termlen) { - long capa = str_capacity(str, oldtermlen); + long capa = str_capacity(str, oldtermlen) + oldtermlen; long len = RSTRING_LEN(str); assert(capa >= len); - if (capa - len < termlen - oldtermlen) { + if (capa - len < termlen) { rb_check_lockedtmp(str); str_make_independent_expand(str, len, 0L, termlen); } @@ -2118,7 +2118,7 @@ rb_str_change_terminator_length(VALUE st https://github.com/ruby/ruby/blob/trunk/string.c#L2118 if (!STR_EMBED_P(str)) { /* modify capa instead of realloc */ assert(!FL_TEST((str), STR_SHARED)); - RSTRING(str)->as.heap.aux.capa = capa - (termlen - oldtermlen); + RSTRING(str)->as.heap.aux.capa = capa - termlen; } if (termlen > oldtermlen) { TERM_FILL(RSTRING_PTR(str) + len, termlen); -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/