[前][次][番号順一覧][スレッド一覧]

ruby-changes:47201

From: nagachika <ko1@a...>
Date: Wed, 12 Jul 2017 23:06:27 +0900 (JST)
Subject: [ruby-changes:47201] nagachika:r59316 (ruby_2_4): merge revision(s) 59312: [Backport #13739]

nagachika	2017-07-12 23:06:21 +0900 (Wed, 12 Jul 2017)

  New Revision: 59316

  https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=59316

  Log:
    merge revision(s) 59312: [Backport #13739]
    
    optparse.rb: get rid of eval
    
    * lib/optparse.rb: try Float() and Integer() instead of eval,
      which does too much things.

  Modified directories:
    branches/ruby_2_4/
  Modified files:
    branches/ruby_2_4/lib/optparse.rb
    branches/ruby_2_4/test/optparse/test_acceptable.rb
    branches/ruby_2_4/version.h
Index: ruby_2_4/test/optparse/test_acceptable.rb
===================================================================
--- ruby_2_4/test/optparse/test_acceptable.rb	(revision 59315)
+++ ruby_2_4/test/optparse/test_acceptable.rb	(revision 59316)
@@ -85,6 +85,9 @@ class TestOptionParser::Acceptable < Tes https://github.com/ruby/ruby/blob/trunk/ruby_2_4/test/optparse/test_acceptable.rb#L85
     assert_equal(%w"", no_error {@opt.parse!(%w"--numeric 1/2")})
     assert_equal(Rational(1, 2), @numeric)
 
+    assert_equal(%w"", no_error {@opt.parse!(%w"--numeric 010")})
+    assert_equal(8, @numeric)
+
     assert_equal(%w"", no_error {@opt.parse!(%w"--numeric 1.2/2.3")})
     assert_equal(Rational(12, 23), @numeric)
 
Index: ruby_2_4/version.h
===================================================================
--- ruby_2_4/version.h	(revision 59315)
+++ ruby_2_4/version.h	(revision 59316)
@@ -1,10 +1,10 @@ https://github.com/ruby/ruby/blob/trunk/ruby_2_4/version.h#L1
 #define RUBY_VERSION "2.4.2"
-#define RUBY_RELEASE_DATE "2017-07-10"
-#define RUBY_PATCHLEVEL 144
+#define RUBY_RELEASE_DATE "2017-07-12"
+#define RUBY_PATCHLEVEL 145
 
 #define RUBY_RELEASE_YEAR 2017
 #define RUBY_RELEASE_MONTH 7
-#define RUBY_RELEASE_DAY 10
+#define RUBY_RELEASE_DAY 12
 
 #include "ruby/version.h"
 
Index: ruby_2_4/lib/optparse.rb
===================================================================
--- ruby_2_4/lib/optparse.rb	(revision 59315)
+++ ruby_2_4/lib/optparse.rb	(revision 59316)
@@ -1842,7 +1842,7 @@ XXX https://github.com/ruby/ruby/blob/trunk/ruby_2_4/lib/optparse.rb#L1842
   #
   # Float number format, and converts to Float.
   #
-  float = "(?:#{decimal}(?:\\.(?:#{decimal})?)?|\\.#{decimal})(?:E[-+]?#{decimal})?"
+  float = "(?:#{decimal}(?=(.)?)(?:\\.(?:#{decimal})?)?|\\.#{decimal})(?:E[-+]?#{decimal})?"
   floatpat = %r"\A[-+]?#{float}\z"io
   accept(Float, floatpat) {|s,| s.to_f if s}
 
@@ -1851,11 +1851,13 @@ XXX https://github.com/ruby/ruby/blob/trunk/ruby_2_4/lib/optparse.rb#L1851
   # for float format, and Rational for rational format.
   #
   real = "[-+]?(?:#{octal}|#{float})"
-  accept(Numeric, /\A(#{real})(?:\/(#{real}))?\z/io) {|s, d, n|
+  accept(Numeric, /\A(#{real})(?:\/(#{real}))?\z/io) {|s, d, f, n,|
     if n
       Rational(d, n)
-    elsif s
-      eval(s)
+    elsif f
+      Float(s)
+    else
+      Integer(s)
     end
   }
 
@@ -1889,10 +1891,14 @@ XXX https://github.com/ruby/ruby/blob/trunk/ruby_2_4/lib/optparse.rb#L1891
   # integer format, Float for float format.
   #
   DecimalNumeric = floatpat     # decimal integer is allowed as float also.
-  accept(DecimalNumeric, floatpat) {|s,|
+  accept(DecimalNumeric, floatpat) {|s, f|
     begin
-      eval(s)
-    rescue SyntaxError
+      if f
+        Float(s)
+      else
+        Integer(s)
+      end
+    rescue ArgumentError
       raise OptionParser::InvalidArgument, s
     end if s
   }
Index: ruby_2_4
===================================================================
--- ruby_2_4	(revision 59315)
+++ ruby_2_4	(revision 59316)

Property changes on: ruby_2_4
___________________________________________________________________
Modified: svn:mergeinfo
## -0,0 +0,1 ##
   Merged /trunk:r59312

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]