summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorTomer Brisker <tbrisker@gmail.com>2020-08-08 14:46:05 +0300
committerTomer Brisker <tbrisker@gmail.com>2020-08-08 14:46:05 +0300
commit6e0e7a1e9f83b85615f82d26c5bf1a7d66844a3b (patch)
treee82f82788b17d3e7fca1dcf62369abd652ac9982 /lib
parent181a727c90cb1d320db5821bc16dc0bc34757935 (diff)
downloadpsych-6e0e7a1e9f83b85615f82d26c5bf1a7d66844a3b.tar.gz
Improve float scalar scanner
Previously, `+.inf` was not handled correctly. Additionally, the regexp was checking for inf and NaN, even though these cases are handled earlier in the condition. Added a few tests to ensure handling some missing cases.
Diffstat (limited to 'lib')
-rw-r--r--lib/psych/scalar_scanner.rb7
1 files changed, 3 insertions, 4 deletions
diff --git a/lib/psych/scalar_scanner.rb b/lib/psych/scalar_scanner.rb
index d565a33..01f7a2e 100644
--- a/lib/psych/scalar_scanner.rb
+++ b/lib/psych/scalar_scanner.rb
@@ -9,9 +9,8 @@ module Psych
TIME = /^-?\d{4}-\d{1,2}-\d{1,2}(?:[Tt]|\s+)\d{1,2}:\d\d:\d\d(?:\.\d*)?(?:\s*(?:Z|[-+]\d{1,2}:?(?:\d\d)?))?$/
# Taken from http://yaml.org/type/float.html
- FLOAT = /^(?:[-+]?([0-9][0-9_,]*)?\.[0-9]*([eE][-+][0-9]+)?(?# base 10)
- |[-+]?\.(inf|Inf|INF)(?# infinity)
- |\.(nan|NaN|NAN)(?# not a number))$/x
+ # Base 60, [-+]inf and NaN are handled separately
+ FLOAT = /^(?:[-+]?([0-9][0-9_,]*)?\.[0-9]*([eE][-+][0-9]+)?(?# base 10))$/x
# Taken from http://yaml.org/type/int.html
INTEGER = /^(?:[-+]?0b[0-1_,]+ (?# base 2)
@@ -61,7 +60,7 @@ module Psych
rescue ArgumentError
string
end
- elsif string.match?(/^\.inf$/i)
+ elsif string.match?(/^\+?\.inf$/i)
Float::INFINITY
elsif string.match?(/^-\.inf$/i)
-Float::INFINITY