Issue #4597 has been reported by Dominik Honnef.

----------------------------------------
Bug #4597: YAML doesn't consider tab stops as whitespace in mappings
http://redmine.ruby-lang.org/issues/4597

Author: Dominik Honnef
Status: Open
Priority: Low
Assignee: 
Category: 
Target version: 
ruby -v: ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-linux]


The YAML specification states that in a mapping (aka Hash in Ruby), the mapping value indicator (":") has to be separated from the value by white space (see quotation [1]).  The YAML specification also states, that white space is defined as follows: 

 s-space	::=	 #x20 /* SP */	 
 s-tab	::=	 #x9  /* TAB */	 
 s-white	::=	s-space | s-tab

(from http://yaml.org/spec/1.2/spec.html#id2775170)

Based on that, the following two lines of Ruby code should yield the same result:

 YAML.load("foo: bar") # => {"foo"=>"bar"}
 YAML.load("foo:\tbar") # => "foo:\tbar"

As one can see by the annotated results, however, Ruby parses "foo:\tbar" as a scalar and not as a mapping.

The same also happens for inline mappings:

 YAML.load("{ foo: bar }") # => {"foo"=>"bar"}
 YAML.load("{ foo:\tbar }") # => {"foo:\tbar"=>nil} 

That the tabulator is valid for separation is also explicitly stated by http://yaml.org/spec/1.2/spec.html#space/separation/ , which is referenced by quotation 1.


Quotations:
[1]: Normally, YAML insists the ???:??? mapping value indicator be separated from the value by white space. [from http://yaml.org/spec/1.2/spec.html#: mapping value//]


-- 
http://redmine.ruby-lang.org