Bug #4383
closedpsych fails to parse a symbol in a flow sequence
Description
=begin
% ruby-trunk -rsyck -ryaml -ve 'p YAML.load("order: [ :year, :month, :day ]")'
ruby 1.9.3dev (2011-02-08 trunk 30821) [i386-darwin9.8.0]
{"order"=>[:year, :month, :day]}
% ruby-trunk -rpsych -ryaml -ve 'p YAML.load("order: [ :year, :month, :day ]")'
ruby 1.9.3dev (2011-02-08 trunk 30821) [i386-darwin9.8.0]
/Users/yugui/local/lib/ruby-trunk/1.9.1/psych.rb:153:in parse': (<unknown>): couldn't parse YAML at line 0 column 10 (Psych::SyntaxError) from /Users/yugui/local/lib/ruby-trunk/1.9.1/psych.rb:153:in
parse_stream'
from /Users/yugui/local/lib/ruby-trunk/1.9.1/psych.rb:124:in parse' from /Users/yugui/local/lib/ruby-trunk/1.9.1/psych.rb:111:in
load'
from -e:1:in `'
The example YAML is a part of lib/active_support/locale/en.yml in ActiveSupport 2.3.10.
=end
Updated by godfat (Lin Jen-Shin) over 13 years ago
=begin
I wonder if this is not a valid YAML, should we allow it?
According to http://yaml-online-parser.appspot.com/
ERROR:
while parsing a flow node
expected the node content, but found ':'
in "", line 1, column 10:
order: [ :year, :month, :day ]
This works though:
order:
- :year
- :month
- :day
=end
Updated by yugui (Yuki Sonoda) over 13 years ago
=begin
According to YAML 1.1 spec. http://yaml.org/spec/1.1, any flow node can occur as an element of a flow sequence, a ns-flow-node(n,c) can be a ns-plain-single(c) where c = flow-in, and a ns-plain-single(c) can start with ':' by definition of ns-plain-first-char(c).
I think it is a valid YAML 1.1. Is it wrong?
=end
Updated by tenderlovemaking (Aaron Patterson) over 13 years ago
=begin
On Tue, Feb 08, 2011 at 10:07:09PM +0900, Yuki Sonoda wrote:
Issue #4383 has been updated by Yuki Sonoda.
According to YAML 1.1 spec. http://yaml.org/spec/1.1, any flow node can occur as an element of a flow sequence, a ns-flow-node(n,c) can be a ns-plain-single(c) where c = flow-in, and a ns-plain-single(c) can start with ':' by definition of ns-plain-first-char(c).
I think it is a valid YAML 1.1. Is it wrong?
I think you are correct. However, that means this is a bug in libyaml.
I've emailed the libyaml mailing list to find out if we're interpreting
the spec correctly.
--
Aaron Patterson
http://tenderlovemaking.com/
Attachment: (unnamed)
=end
Updated by headius (Charles Nutter) over 13 years ago
=begin
JRuby, using a different library SnakeYAML (itself a port of libyaml) exhibits the same error:
~/projects/jruby ➔ jruby --1.9 -rpsych -ryaml -ve 'p YAML.load("order: [ :year, :month, :day ]")'
jruby 1.6.0.RC2 (ruby 1.9.2 patchlevel 136) (2011-02-08 3d4720a) (Java HotSpot(TM) 64-Bit Server VM 1.6.0_22) [darwin-x86_64-java]
org/jruby/ext/psych/PsychParser.java:242:in parse': while parsing a flow node; expected the node content, but found Value (RuntimeError) from /Users/headius/projects/jruby/lib/ruby/1.9/psych.rb:148:in
parse_stream'
from /Users/headius/projects/jruby/lib/ruby/1.9/psych.rb:119:in parse' from /Users/headius/projects/jruby/lib/ruby/1.9/psych.rb:106:in
load'
from -e:1:in `(root)'
=end
Updated by tenderlovemaking (Aaron Patterson) over 13 years ago
=begin
On Thu, Feb 10, 2011 at 04:21:05AM +0900, Charles Nutter wrote:
Issue #4383 has been updated by Charles Nutter.
JRuby, using a different library SnakeYAML (itself a port of libyaml) exhibits the same error:
~/projects/jruby ➔ jruby --1.9 -rpsych -ryaml -ve 'p YAML.load("order: [ :year, :month, :day ]")'
jruby 1.6.0.RC2 (ruby 1.9.2 patchlevel 136) (2011-02-08 3d4720a) (Java HotSpot(TM) 64-Bit Server VM 1.6.0_22) [darwin-x86_64-java]
org/jruby/ext/psych/PsychParser.java:242:inparse': while parsing a flow node; expected the node content, but found Value (RuntimeError) from /Users/headius/projects/jruby/lib/ruby/1.9/psych.rb:148:in
parse_stream'
from /Users/headius/projects/jruby/lib/ruby/1.9/psych.rb:119:inparse' from /Users/headius/projects/jruby/lib/ruby/1.9/psych.rb:106:in
load'
from -e:1:in `(root)'
Yay for consistency? ;-)
Looks like this is a bug in both libyaml and SnakeYAML. According to
other people on the yaml-core list, this example should be valid:
http://sourceforge.net/mailarchive/forum.php?thread_name=AANLkTimfwVXs_qbWV-Tqng_6HYwVSU_FSkQGWT2KLE9n%40mail.gmail.com&forum_name=yaml-core
http://yaml.org/ypaste/802/index.html
It seems that colons in flow sequences cause ambiguity problems. The
python community has already encountered these problems (yay for sharing
code) and have started a wiki page to try coming to a solution:
http://pyyaml.org/wiki/YAMLColonInFlowContext
I will add this example to the wiki.
As this is a bug in libyaml (and SnakeYAML), should we close this ticket
as a third party issue?
--
Aaron Patterson
http://tenderlovemaking.com/
Attachment: (unnamed)
=end
Updated by tenderlovemaking (Aaron Patterson) over 13 years ago
- Status changed from Assigned to Third Party's Issue
=begin
I'm closing this as a third party issue. The problem stems from ambiguities in the YAML spec with regard to JSON and YAML support. This exception was added on purpose in libyaml. Please read the discussion on the libyaml mailing list for more information:
In the mean time, I am updating projects with YAML that isn't compliant.
=end