Project

General

Profile

Actions

Bug #4597

closed

YAML doesn't consider tab stops as whitespace in mappings

Added by dominikh (Dominik Honnef) over 13 years ago. Updated over 13 years ago.

Status:
Rejected
Assignee:
-
Target version:
-
ruby -v:
ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-linux]
Backport:
[ruby-core:35853]

Description

=begin
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//]
=end

Updated by dominikh (Dominik Honnef) over 13 years ago

=begin
Okay, I just realized that only the latest YAML specification, 1.2, allows tabs there, while older ones do not. And as far as I know, Ruby's YAML parser doesn't support the 1.2 specification... I guess that makes this bug report invalid :)
=end

Updated by naruse (Yui NARUSE) over 13 years ago

  • Status changed from Open to Rejected

=begin
You may know Syck is YAML 1.0, and Psych (libyaml) is 1.1.
=end

Actions

Also available in: Atom PDF

Like0
Like0Like0