ruby-core@ruby-lang.org archive (unofficial mirror)
 help / color / mirror / Atom feed
* [ruby-core:72850] [Ruby trunk - Bug #11988] [Open] YAML.dump doesn't quote string starting with 0 which will be recognized as float in YAML 1.2
       [not found] <redmine.issue-11988.20160113193829@ruby-lang.org>
@ 2016-01-13 19:38 ` frsyuki
  2016-01-14  0:14 ` [ruby-core:72851] [Ruby trunk - Bug #11988] " nobu
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 5+ messages in thread
From: frsyuki @ 2016-01-13 19:38 UTC (permalink / raw
  To: ruby-core

Issue #11988 has been reported by Sadayuki Furuhashi.

----------------------------------------
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

* 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/

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [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
       [not found] <redmine.issue-11988.20160113193829@ruby-lang.org>
  2016-01-13 19:38 ` [ruby-core:72850] [Ruby trunk - Bug #11988] [Open] YAML.dump doesn't quote string starting with 0 which will be recognized as float in YAML 1.2 frsyuki
@ 2016-01-14  0:14 ` nobu
  2016-01-14  9:42 ` [ruby-core:72853] [Ruby trunk - Bug #11988] [Assigned] " naruse
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 5+ messages in thread
From: nobu @ 2016-01-14  0:14 UTC (permalink / raw
  To: ruby-core

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/

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [ruby-core:72853] [Ruby trunk - Bug #11988] [Assigned] YAML.dump doesn't quote string starting with 0 which will be recognized as float in YAML 1.2
       [not found] <redmine.issue-11988.20160113193829@ruby-lang.org>
  2016-01-13 19:38 ` [ruby-core:72850] [Ruby trunk - Bug #11988] [Open] YAML.dump doesn't quote string starting with 0 which will be recognized as float in YAML 1.2 frsyuki
  2016-01-14  0:14 ` [ruby-core:72851] [Ruby trunk - Bug #11988] " nobu
@ 2016-01-14  9:42 ` naruse
  2016-02-10 13:36 ` [ruby-core:73759] [Ruby trunk Bug#11988] " shibata.hiroshi
  2016-08-15 17:56 ` [ruby-core:76882] " nagachika00
  4 siblings, 0 replies; 5+ messages in thread
From: naruse @ 2016-01-14  9:42 UTC (permalink / raw
  To: ruby-core

Issue #11988 has been updated by Yui NARUSE.

Status changed from Open to Assigned
Assignee set to Aaron Patterson
Backport changed from 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN to 2.0.0: REQUIRED, 2.1: REQUIRED, 2.2: REQUIRED, 2.3: REQUIRED

I found it is psych's issue.
Following fixes this (but may be it is fixed in Psych::ScalarScanner#tokenize.

```diff
diff --git a/ext/psych/lib/psych/visitors/yaml_tree.rb b/ext/psych/lib/psych/visitors/yaml_tree.rb
index 7c40050..15cd89c 100644
--- a/ext/psych/lib/psych/visitors/yaml_tree.rb
+++ b/ext/psych/lib/psych/visitors/yaml_tree.rb
@@ -331,7 +331,8 @@ def visit_String o
           style = Nodes::Scalar::FOLDED
         elsif o =~ /^[^[:word:]][^"]*$/
           style = Nodes::Scalar::DOUBLE_QUOTED
-        elsif not String === @ss.tokenize(o)
+        elsif not String === @ss.tokenize(o) or /\A0[0-7]*[89]/ =~ o
+          p @ss
           style = Nodes::Scalar::SINGLE_QUOTED
         end
```

----------------------------------------
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-56089

* 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/

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [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
       [not found] <redmine.issue-11988.20160113193829@ruby-lang.org>
                   ` (2 preceding siblings ...)
  2016-01-14  9:42 ` [ruby-core:72853] [Ruby trunk - Bug #11988] [Assigned] " naruse
@ 2016-02-10 13:36 ` shibata.hiroshi
  2016-08-15 17:56 ` [ruby-core:76882] " nagachika00
  4 siblings, 0 replies; 5+ messages in thread
From: shibata.hiroshi @ 2016-02-10 13:36 UTC (permalink / raw
  To: ruby-core

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/

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [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
       [not found] <redmine.issue-11988.20160113193829@ruby-lang.org>
                   ` (3 preceding siblings ...)
  2016-02-10 13:36 ` [ruby-core:73759] [Ruby trunk Bug#11988] " shibata.hiroshi
@ 2016-08-15 17:56 ` nagachika00
  4 siblings, 0 replies; 5+ messages in thread
From: nagachika00 @ 2016-08-15 17:56 UTC (permalink / raw
  To: ruby-core

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/

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2016-08-15 17:23 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <redmine.issue-11988.20160113193829@ruby-lang.org>
2016-01-13 19:38 ` [ruby-core:72850] [Ruby trunk - Bug #11988] [Open] YAML.dump doesn't quote string starting with 0 which will be recognized as float in YAML 1.2 frsyuki
2016-01-14  0:14 ` [ruby-core:72851] [Ruby trunk - Bug #11988] " nobu
2016-01-14  9:42 ` [ruby-core:72853] [Ruby trunk - Bug #11988] [Assigned] " naruse
2016-02-10 13:36 ` [ruby-core:73759] [Ruby trunk Bug#11988] " shibata.hiroshi
2016-08-15 17:56 ` [ruby-core:76882] " nagachika00

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).