Skip to content

Commit 6863550

Browse files
committed
Support correctly decoding \u{X..} unicode chars in Encoding::Ruby.unescape.
1 parent f192b89 commit 6863550

File tree

3 files changed

+5
-3
lines changed

3 files changed

+5
-3
lines changed

lib/ronin/support/encoding/ruby.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,8 +178,10 @@ def self.unescape(data)
178178
scanner = StringScanner.new(data)
179179

180180
until scanner.eos?
181-
unescaped << if (unicode_escape = scanner.scan(/\\u[0-9a-fA-F]{4,8}/))
181+
unescaped << if (unicode_escape = scanner.scan(/\\u[0-9a-fA-F]{4}/))
182182
unicode_escape[2..].to_i(16).chr(Encoding::UTF_8)
183+
elsif (unicode_escape = scanner.scan(/\\u\{[0-9a-fA-F]{1,6}\}/))
184+
unicode_escape[3..-2].to_i(16).chr(Encoding::UTF_8)
183185
elsif (hex_escape = scanner.scan(/\\x[0-9a-fA-F]{1,2}/))
184186
hex_escape[2..].to_i(16).chr
185187
elsif (octal_escape = scanner.scan(/\\[0-7]{1,3}/))

spec/encoding/ruby/core_ext/string_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@
7373
end
7474

7575
context "when the String contains escaped unicode characters" do
76-
subject { "\\u00D8\\u2070E" }
76+
subject { "\\u00D8\\u{2070E}" }
7777

7878
let(:unescaped) { "Ø𠜎" }
7979

spec/encoding/ruby_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@
178178
end
179179

180180
context "when the given String contains escaped unicode characters" do
181-
let(:data) { "\\u00D8\\u2070E" }
181+
let(:data) { "\\u00D8\\u{2070E}" }
182182
let(:unescaped) { "Ø𠜎" }
183183

184184
it "must unescape the hexadecimal characters" do

0 commit comments

Comments
 (0)