From: shibata.hiroshi@... Date: 2016-02-10T13:36:13+00:00 Subject: [ruby-core:73759] [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 Hiroshi SHIBATA. I addressed this issue to upstream. ref https://github.com/tenderlove/psych/pull/270 ---------------------------------------- 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-56944 * Author: Sadayuki Furuhashi * Status: Assigned * Priority: Normal * Assignee: Aaron Patterson * ruby -v: ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin14] * Backport: 2.0.0: REQUIRED, 2.1: REQUIRED, 2.2: REQUIRED, 2.3: REQUIRED ---------------------------------------- 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: