From: Aaron Patterson Date: 2011-09-24T03:12:35+09:00 Subject: [ruby-dev:44530] [Ruby 1.9 - Bug #5358] YAML 中のタグの扱いについて Issue #5358 has been updated by Aaron Patterson. Category set to ext Assignee set to Aaron Patterson Target version set to 1.9.3 これは syck のバグです。Ruby 1.9.2 で最初に require 'psych' と書いてから、require 'yaml' と書けば、バグは発生しません。 例: ruby-1.9.2-p290 :001 > RUBY_VERSION => "1.9.2" ruby-1.9.2-p290 :002 > require 'psych' => true ruby-1.9.2-p290 :003 > require 'yaml' => true ruby-1.9.2-p290 :004 > YAML.load("--- foo") => "foo" ruby-1.9.2-p290 :005 > YAML.load("--- !str foo") => "foo" ruby-1.9.2-p290 :006 > YAML.load("--- !tag:yaml.org,2002:str foo") => "foo" ruby-1.9.2-p290 :007 > YAML.load("--- !!str foo") => "foo" ruby-1.9.2-p290 :008 > YAML.load("--- !:str foo") Psych::SyntaxError: couldn't parse YAML at line 1 column 24 from /Users/aaron/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/psych.rb:148:in `parse' from /Users/aaron/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/psych.rb:148:in `parse_stream' from /Users/aaron/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/psych.rb:119:in `parse' from /Users/aaron/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/psych.rb:106:in `load' from (irb):8 from /Users/aaron/.rvm/rubies/ruby-1.9.2-p290/bin/irb:16:in `
' ruby-1.9.2-p290 :009 > Ruby 1.9.3 を使ったら、require 'yaml' だけで良いです。 例: ruby-1.9.3-head :001 > RUBY_VERSION => "1.9.3" ruby-1.9.3-head :002 > require 'yaml' => true ruby-1.9.3-head :003 > YAML.load("--- foo") => "foo" ruby-1.9.3-head :004 > YAML.load("--- !str foo") => "foo" ruby-1.9.3-head :005 > YAML.load("--- !tag:yaml.org,2002:str foo") => "foo" ruby-1.9.3-head :006 > YAML.load("--- !!str foo") => "foo" ruby-1.9.3-head :007 > YAML.load("--- !:str foo") Psych::SyntaxError: (): couldn't parse YAML at line 0 column 24 from /Users/aaron/.rvm/rubies/ruby-1.9.3-head/lib/ruby/1.9.1/psych.rb:154:in `parse' from /Users/aaron/.rvm/rubies/ruby-1.9.3-head/lib/ruby/1.9.1/psych.rb:154:in `parse_stream' from /Users/aaron/.rvm/rubies/ruby-1.9.3-head/lib/ruby/1.9.1/psych.rb:125:in `parse' from /Users/aaron/.rvm/rubies/ruby-1.9.3-head/lib/ruby/1.9.1/psych.rb:112:in `load' from (irb):7 from /Users/aaron/.rvm/rubies/ruby-1.9.3-head/bin/irb:16:in `
' ruby-1.9.3-head :008 > ---------------------------------------- Bug #5358: YAML 中のタグの扱いについて http://redmine.ruby-lang.org/issues/5358 Author: Sho Hashimoto Status: Open Priority: Normal Assignee: Aaron Patterson Category: ext Target version: 1.9.3 ruby -v: ruby 1.9.2p290 http://yaml.org/ によると、以下はいずれも同じグローバルタグを指定してると思うのですが、結果が異なります。 YAML.load("--- !:str foo") # => # YAML.load("--- !!str foo") # => # 一方、以下はいずれも同じ結果になります。 YAML.load("--- foo") # => "foo" YAML.load("--- !str foo") # => "foo" YAML.load("--- !tag:yaml.org,2002:str foo") # => "foo" これらについて、もしかして以下のバグがあるのではないでしょうか。 * !str は間違ってグローバルタグとして扱われている * !tag:yaml.org,2002 は間違ってグローバルタグとして扱われている * !!str はグローバルタグとして扱われていない -- http://redmine.ruby-lang.org