diff options
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | ext/psych/lib/psych/scalar_scanner.rb | 2 | ||||
-rw-r--r-- | test/psych/test_numeric.rb | 4 | ||||
-rw-r--r-- | test/psych/test_string.rb | 4 |
4 files changed, 18 insertions, 1 deletions
@@ -1,3 +1,12 @@ +Thu Jan 10 04:23:07 2013 Aaron Patterson <aaron@tenderlovemaking.com> + + * ext/psych/lib/psych/scalar_scanner.rb: strip trailing dots from + floats so that Float() will not raise an exception. + + * test/psych/test_numeric.rb: test to ensure "1." can be loaded + + * test/psych/test_string.rb: make sure "1." can round trip + Thu Jan 10 03:38:40 2013 Aaron Patterson <aaron@tenderlovemaking.com> * ext/psych/lib/psych/visitors/yaml_tree.rb: ascii only binary strings diff --git a/ext/psych/lib/psych/scalar_scanner.rb b/ext/psych/lib/psych/scalar_scanner.rb index d0beee3626..575945990f 100644 --- a/ext/psych/lib/psych/scalar_scanner.rb +++ b/ext/psych/lib/psych/scalar_scanner.rb @@ -96,7 +96,7 @@ module Psych @string_cache[string] = true string else - Float(string.gsub(/[,_]/, '')) + Float(string.gsub(/[,_]|\.$/, '')) end else int = parse_int string.gsub(/[,_]/, '') diff --git a/test/psych/test_numeric.rb b/test/psych/test_numeric.rb index 200a9f0171..0858e799aa 100644 --- a/test/psych/test_numeric.rb +++ b/test/psych/test_numeric.rb @@ -16,6 +16,10 @@ module Psych $DEBUG = @old_debug end + def test_load_float_with_dot + assert_equal 1.0, Psych.load('--- 1.') + end + def test_non_float_with_0 str = Psych.load('--- 090') assert_equal '090', str diff --git a/test/psych/test_string.rb b/test/psych/test_string.rb index 0c5d4d2625..aa6866b618 100644 --- a/test/psych/test_string.rb +++ b/test/psych/test_string.rb @@ -102,6 +102,10 @@ module Psych assert_cycle string end + def test_float_confusion + assert_cycle '1.' + end + def binary_string percentage = 0.31, length = 100 string = '' (percentage * length).to_i.times do |i| |