mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	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] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58042 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
		
							parent
							
								
									c8d66b5d82
								
							
						
					
					
						commit
						f0e6e47999
					
				
					 1 changed files with 3 additions and 3 deletions
				
			
		
							
								
								
									
										6
									
								
								string.c
									
										
									
									
									
								
							
							
						
						
									
										6
									
								
								string.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -2102,11 +2102,11 @@ str_fill_term(VALUE str, char *s, long len, int termlen)
 | 
			
		|||
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 str, const int oldtermlen, const int terml
 | 
			
		|||
	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);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue