ruby-changes:67498
From: Alexandr <ko1@a...>
Date: Tue, 31 Aug 2021 19:36:32 +0900 (JST)
Subject: [ruby-changes:67498] 48b50cb4fe (master): [ruby/psych] fix parsing integer values with '_' at the end
https://git.ruby-lang.org/ruby.git/commit/?id=48b50cb4fe From 48b50cb4febc37120a6026dc95a4a868360048eb Mon Sep 17 00:00:00 2001 From: Alexandr Opak <opak.alexandr@g...> Date: Fri, 29 Jan 2021 13:04:37 +0100 Subject: [ruby/psych] fix parsing integer values with '_' at the end https://github.com/ruby/psych/commit/e0bb853014 --- ext/psych/lib/psych/scalar_scanner.rb | 8 ++++---- test/psych/test_scalar_scanner.rb | 9 ++++++++- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/ext/psych/lib/psych/scalar_scanner.rb b/ext/psych/lib/psych/scalar_scanner.rb index 01f7a2e..eecd46e 100644 --- a/ext/psych/lib/psych/scalar_scanner.rb +++ b/ext/psych/lib/psych/scalar_scanner.rb @@ -13,10 +13,10 @@ module Psych https://github.com/ruby/ruby/blob/trunk/ext/psych/lib/psych/scalar_scanner.rb#L13 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) - |[-+]?0[0-7_,]+ (?# base 8) - |[-+]?(?:0|[1-9][0-9_,]*) (?# base 10) - |[-+]?0x[0-9a-fA-F_,]+ (?# base 16))$/x + INTEGER = /^(?:[-+]?0b[0-1_,]+ (?# base 2) + |[-+]?0[0-7_,]+ (?# base 8) + |[-+]?(?:\d|[1-9][0-9_,]*[^_]) (?# base 10) + |[-+]?0x[0-9a-fA-F_,]+ (?# base 16))$/x attr_reader :class_loader diff --git a/test/psych/test_scalar_scanner.rb b/test/psych/test_scalar_scanner.rb index ec67a33..e489b20 100644 --- a/test/psych/test_scalar_scanner.rb +++ b/test/psych/test_scalar_scanner.rb @@ -118,13 +118,20 @@ module Psych https://github.com/ruby/ruby/blob/trunk/test/psych/test_scalar_scanner.rb#L118 assert_equal "_100", ss.tokenize('_100') end + def test_scan_strings_ending_with_underscores + assert_equal "100_", ss.tokenize('100_') + end + def test_scan_int_commas_and_underscores # NB: This test is to ensure backward compatibility with prior Psych versions, # not to test against any actual YAML specification. assert_equal 123_456_789, ss.tokenize('123_456_789') assert_equal 123_456_789, ss.tokenize('123,456,789') assert_equal 123_456_789, ss.tokenize('1_2,3,4_5,6_789') - assert_equal 123_456_789, ss.tokenize('1_2,3,4_5,6_789_') + + assert_equal 1, ss.tokenize('1') + assert_equal 1 ss.tokenize('+1') + assert_equal -1 ss.tokenize('-1') assert_equal 0b010101010, ss.tokenize('0b010101010') assert_equal 0b010101010, ss.tokenize('0b0,1_0,1_,0,1_01,0') -- cgit v1.1 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/