Bug #15718 ยป yamldumputf32encodingerror.patch
| ext/psych/lib/psych/visitors/yaml_tree.rb (working copy) | ||
|---|---|---|
|
style = Nodes::Scalar::PLAIN
|
||
|
tag = nil
|
||
|
# regexps
|
||
|
literal_regexp = /\n(?!\Z)/
|
||
|
double_quoted_regexp = /^[^[:word:]][^"]*$/
|
||
|
single_quoted_regexp = /\A0[0-7]*[89]/
|
||
|
if binary?(o)
|
||
|
o = [o].pack('m0')
|
||
|
tag = '!binary' # FIXME: change to below when syck is removed
|
||
| ... | ... | |
|
style = Nodes::Scalar::LITERAL
|
||
|
plain = false
|
||
|
quote = false
|
||
|
elsif o =~ /\n(?!\Z)/ # match \n except blank line at the end of string
|
||
|
# match \n except blank line at the end of string
|
||
|
elsif string_match? o, literal_regexp
|
||
|
style = Nodes::Scalar::LITERAL
|
||
|
elsif o == '<<'
|
||
|
style = Nodes::Scalar::SINGLE_QUOTED
|
||
| ... | ... | |
|
quote = false
|
||
|
elsif @line_width && o.length > @line_width
|
||
|
style = Nodes::Scalar::FOLDED
|
||
|
elsif o =~ /^[^[:word:]][^"]*$/
|
||
|
elsif string_match? o, double_quoted_regexp
|
||
|
style = Nodes::Scalar::DOUBLE_QUOTED
|
||
|
elsif not String === @ss.tokenize(o) or /\A0[0-7]*[89]/ =~ o
|
||
|
elsif not String === @ss.tokenize(o) or string_match? o, single_quoted_regexp
|
||
|
style = Nodes::Scalar::SINGLE_QUOTED
|
||
|
end
|
||
| ... | ... | |
|
string.encoding == Encoding::ASCII_8BIT && !string.ascii_only?
|
||
|
end
|
||
|
def string_match? string, regexp
|
||
|
(string.encoding.ascii_compatible? || string.encoding == regexp.encoding) && string =~ regexp
|
||
|
end
|
||
|
def visit_array_subclass o
|
||
|
tag = "!ruby/array:#{o.class}"
|
||
|
ivars = o.instance_variables
|
||
| test/yaml/test_dump.rb (working copy) | ||
|---|---|---|
|
# frozen_string_literal: true
|
||
|
require 'test/unit'
|
||
|
require 'yaml'
|
||
|
require 'tmpdir'
|
||
|
class YAMLDumpTest < Test::Unit::TestCase
|
||
|
def test_dump_with_empty_utf32le_string
|
||
|
bug15718 = '[ruby-dev:91903]'
|
||
|
assert_nothing_raised bug15718 do
|
||
|
YAML.dump(''.dup.force_encoding('UTF-32LE'))
|
||
|
end
|
||
|
end
|
||
|
end
|
||