mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	Escape unprintable chars only, without surrounding quotes
This commit is contained in:
		
							parent
							
								
									8cc18703cf
								
							
						
					
					
						commit
						eec45a93ef
					
				
				
				Notes:
				
					git
				
				2021-07-24 17:59:09 +09:00 
				
			
			
			
		
		
					 4 changed files with 6 additions and 10 deletions
				
			
		
							
								
								
									
										6
									
								
								pack.c
									
										
									
									
									
								
							
							
						
						
									
										6
									
								
								pack.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -141,7 +141,6 @@ str_associated(VALUE str)
 | 
			
		|||
static void
 | 
			
		||||
unknown_directive(const char *mode, char type, VALUE fmt)
 | 
			
		||||
{
 | 
			
		||||
    VALUE f;
 | 
			
		||||
    char unknown[5];
 | 
			
		||||
 | 
			
		||||
    if (ISPRINT(type)) {
 | 
			
		||||
| 
						 | 
				
			
			@ -151,10 +150,7 @@ unknown_directive(const char *mode, char type, VALUE fmt)
 | 
			
		|||
    else {
 | 
			
		||||
        snprintf(unknown, sizeof(unknown), "\\x%.2x", type & 0xff);
 | 
			
		||||
    }
 | 
			
		||||
    f = rb_str_quote_unprintable(fmt);
 | 
			
		||||
    if (f != fmt) {
 | 
			
		||||
        fmt = rb_str_subseq(f, 1, RSTRING_LEN(f) - 2);
 | 
			
		||||
    }
 | 
			
		||||
    fmt = rb_str_quote_unprintable(fmt);
 | 
			
		||||
    rb_warning("unknown %s directive '%s' in '%"PRIsVALUE"'",
 | 
			
		||||
               mode, unknown, fmt);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1121,7 +1121,7 @@ ruby__sfvextra(rb_printf_buffer *fp, size_t valsize, void *valp, long *sz, int s
 | 
			
		|||
    else if (SYMBOL_P(value)) {
 | 
			
		||||
	value = rb_sym2str(value);
 | 
			
		||||
	if (sign == ' ' && !rb_str_symname_p(value)) {
 | 
			
		||||
	    value = rb_str_inspect(value);
 | 
			
		||||
	    value = rb_str_escape(value);
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										4
									
								
								string.c
									
										
									
									
									
								
							
							
						
						
									
										4
									
								
								string.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -11050,7 +11050,7 @@ rb_str_quote_unprintable(VALUE str)
 | 
			
		|||
    len = RSTRING_LEN(str);
 | 
			
		||||
    if ((resenc != enc && !rb_str_is_ascii_only_p(str)) ||
 | 
			
		||||
	!sym_printable(ptr, ptr + len, enc)) {
 | 
			
		||||
	return rb_str_inspect(str);
 | 
			
		||||
	return rb_str_escape(str);
 | 
			
		||||
    }
 | 
			
		||||
    return str;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -11060,7 +11060,7 @@ rb_id_quote_unprintable(ID id)
 | 
			
		|||
{
 | 
			
		||||
    VALUE str = rb_id2str(id);
 | 
			
		||||
    if (!rb_str_symname_p(str)) {
 | 
			
		||||
	return rb_str_inspect(str);
 | 
			
		||||
	return rb_str_escape(str);
 | 
			
		||||
    }
 | 
			
		||||
    return str;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,11 +21,11 @@ class Test_SPrintf < Test::Unit::TestCase
 | 
			
		|||
  end
 | 
			
		||||
 | 
			
		||||
  def test_quote
 | 
			
		||||
    assert_equal('["\n"]', Bug::Printf.q("\n"))
 | 
			
		||||
    assert_equal('[\n]', Bug::Printf.q("\n"))
 | 
			
		||||
    assert_equal('[aaa]', Bug::Printf.q('aaa'))
 | 
			
		||||
    assert_equal('[a a]', Bug::Printf.q('a a'))
 | 
			
		||||
    assert_equal('[]', Bug::Printf.q(''))
 | 
			
		||||
    assert_equal('[""]', Bug::Printf.q(:''))
 | 
			
		||||
    assert_equal('[]', Bug::Printf.q(:''))
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_encoding
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue