From: nobu@... Date: 2016-01-14T00:14:09+00:00 Subject: [ruby-core:72851] [Ruby trunk - Bug #11988] YAML.dump doesn't quote string starting with 0 which will be recognized as float in YAML 1.2 Issue #11988 has been updated by Nobuyoshi Nakada. I suspect that it may be a behavior of libyaml. ---------------------------------------- Bug #11988: YAML.dump doesn't quote string starting with 0 which will be recognized as float in YAML 1.2 https://bugs.ruby-lang.org/issues/11988#change-56086 * Author: Sadayuki Furuhashi * Status: Open * Priority: Normal * Assignee: * ruby -v: ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin14] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN ---------------------------------------- YAML.dump doesn't quote string "019" but it is recognized as float using Core Schema tag resolution option of YAML 1.2 specification. Therefore, SnakeYAML (Java) recognizes a string "019" serialized by Ruby's YAML as float 19.0 unexpectedly. YAML.dump works as following: ~~~ irb(main):002:0> require 'yaml' => true irb(main):003:0> puts YAML.dump({'a' => '017'}) --- a: '017' => nil irb(main):004:0> puts YAML.dump({'a' => '019'}) --- a: 019 => nil ~~~ This is valid behavior as a YAML 1.1 implementation. However, YAML 1.2 defines a new optional mechanism for resolving types implicitly. With this new option named Core Schema, type of 019 is resolved as tag:yaml.org,2002:float. Here is the specification: http://www.yaml.org/spec/1.2/spec.html#id2805071 ~~~ irb(main):002:0> /[-+]?(\.[0-9]+|[0-9]+(\.[0-9]*)?)([eE][-+]?[0-9]+)?/ =~ '019' => 0 ~~~ I think it's better to quote 019 as '019' to avoid unexpected results when YAML is read by YAML 1.2 Core Schema implementation. Related: a rejected pull-request to SnakeYAML https://bitbucket.org/asomov/snakeyaml/pull-requests/4/fix-implicit-resolver-of-float-type-so/diff -- https://bugs.ruby-lang.org/ Unsubscribe: