From: nagachika00@... Date: 2016-08-15T17:56:11+00:00 Subject: [ruby-core:76882] [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 Tomoyuki Chikanaga. Backport changed from 2.0.0: REQUIRED, 2.1: REQUIRED, 2.2: REQUIRED, 2.3: REQUIRED to 2.0.0: REQUIRED, 2.1: REQUIRED, 2.2: REQUIRED, 2.3: DONE ruby_2_3 r55902 merged revision(s) 55497,55498,55504. ---------------------------------------- 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-60104 * Author: Sadayuki Furuhashi * Status: Closed * 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: DONE ---------------------------------------- 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: