From 378c8d2c996558aa4108280d5f0db8daf040d0fc Mon Sep 17 00:00:00 2001 From: Yves Senn Date: Mon, 17 Mar 2014 10:55:21 +0100 Subject: fix `number_to_percentage` with `Float::NAN`, `Float::INFINITY`. Closes #14405. This is a follow-up to 9e997e9039435617b6a844158f5437e97f6bc107 to restore the documented behavior. --- actionview/CHANGELOG.md | 7 +++++++ actionview/test/template/number_helper_test.rb | 3 +++ .../active_support/number_helper/number_to_rounded_converter.rb | 3 +-- activesupport/test/number_helper_test.rb | 3 +++ 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/actionview/CHANGELOG.md b/actionview/CHANGELOG.md index a0e773e887..db3fa3be86 100644 --- a/actionview/CHANGELOG.md +++ b/actionview/CHANGELOG.md @@ -1,3 +1,10 @@ +* `number_to_percentage` does not crash with `Float::NAN` or `Float::INFINITY` + as input. + + Fixes #14405. + + *Yves Senn* + * Add `include_hidden` option to `collection_check_boxes` helper. *Vasiliy Ermolovich* diff --git a/actionview/test/template/number_helper_test.rb b/actionview/test/template/number_helper_test.rb index 11bc978324..adb888319d 100644 --- a/actionview/test/template/number_helper_test.rb +++ b/actionview/test/template/number_helper_test.rb @@ -32,6 +32,9 @@ class NumberHelperTest < ActionView::TestCase assert_equal "100%", number_to_percentage(100, precision: 0) assert_equal "123.4%", number_to_percentage(123.400, precision: 3, strip_insignificant_zeros: true) assert_equal "1.000,000%", number_to_percentage(1000, delimiter: ".", separator: ",") + assert_equal "98a%", number_to_percentage("98a") + assert_equal "NaN%", number_to_percentage(Float::NAN) + assert_equal "Inf%", number_to_percentage(Float::INFINITY) end def test_number_with_delimiter diff --git a/activesupport/lib/active_support/number_helper/number_to_rounded_converter.rb b/activesupport/lib/active_support/number_helper/number_to_rounded_converter.rb index c42354fc83..c45f6cdcfa 100644 --- a/activesupport/lib/active_support/number_helper/number_to_rounded_converter.rb +++ b/activesupport/lib/active_support/number_helper/number_to_rounded_converter.rb @@ -32,8 +32,7 @@ module ActiveSupport end formatted_string = - case rounded_number - when BigDecimal + if BigDecimal === rounded_number && rounded_number.finite? s = rounded_number.to_s('F') + '0'*precision a, b = s.split('.', 2) a + '.' + b[0, precision] diff --git a/activesupport/test/number_helper_test.rb b/activesupport/test/number_helper_test.rb index 6d8d835de7..9bdb92024e 100644 --- a/activesupport/test/number_helper_test.rb +++ b/activesupport/test/number_helper_test.rb @@ -79,6 +79,9 @@ module ActiveSupport assert_equal("123.4%", number_helper.number_to_percentage(123.400, :precision => 3, :strip_insignificant_zeros => true)) assert_equal("1.000,000%", number_helper.number_to_percentage(1000, :delimiter => '.', :separator => ',')) assert_equal("1000.000 %", number_helper.number_to_percentage(1000, :format => "%n %")) + assert_equal("98a%", number_helper.number_to_percentage("98a")) + assert_equal("NaN%", number_helper.number_to_percentage(Float::NAN)) + assert_equal("Inf%", number_helper.number_to_percentage(Float::INFINITY)) end end -- cgit v1.2.3