mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	 cf924a05e0
			
		
	
	
		cf924a05e0
		
	
	
	
	
		
			
			Mixing other encoding string literals in one Regexp caused SEGV. This bug was found by CoverityScan. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61862 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
			
				
	
	
		
			30 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			30 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # -*- coding: cp932 -*-
 | ||
| # frozen_string_literal: false
 | ||
| # This test is in a different file than TestUnicodeEscapes
 | ||
| # So that we can have a different coding comment above
 | ||
| 
 | ||
| require 'test/unit'
 | ||
| 
 | ||
| class TestMixedUnicodeEscape < Test::Unit::TestCase
 | ||
|   def test_basic
 | ||
|     # Unicode escapes do work in an sjis encoded file, but only
 | ||
|     # if they don't contain other multi-byte chars
 | ||
|     assert_equal("A", "\u0041")
 | ||
|     # 8-bit character escapes are okay.
 | ||
|     assert_equal("B\xFF", "\u0042\xFF")
 | ||
| 
 | ||
|     # sjis mb chars mixed with Unicode should not work
 | ||
|     assert_raise(SyntaxError) { eval %q("é<>\u1234")}
 | ||
|     assert_raise(SyntaxError) { eval %q("\u{1234}é<>")}
 | ||
| 
 | ||
|     # also should not work for Regexp
 | ||
|     assert_raise(SyntaxError) { eval %q(/#{"\u1234"}#{"é<>"}/)}
 | ||
|     assert_raise(RegexpError) { eval %q(/\u{1234}#{nil}é<>/)}
 | ||
|     assert_raise(RegexpError) { eval %q(/é<>#{nil}\u1234/)}
 | ||
| 
 | ||
|     # String interpolation turns into an expression and we get
 | ||
|     # a different kind of error, but we still can't mix these
 | ||
|     assert_raise(Encoding::CompatibilityError) { eval %q("\u{1234}#{nil}é<>")}
 | ||
|     assert_raise(Encoding::CompatibilityError) { eval %q("é<>#{nil}\u1234")}
 | ||
|   end
 | ||
| end
 |