mirror of
https://github.com/github/rails.git
synced 2026-01-09 14:48:01 -05:00
Merge branch '3-2-17' into 3-2-stable
Conflicts: actionpack/CHANGELOG.md
This commit is contained in:
@@ -1 +1 @@
|
||||
3.2.16
|
||||
3.2.17
|
||||
|
||||
@@ -2,7 +2,7 @@ module ActionMailer
|
||||
module VERSION #:nodoc:
|
||||
MAJOR = 3
|
||||
MINOR = 2
|
||||
TINY = 16
|
||||
TINY = 17
|
||||
PRE = nil
|
||||
|
||||
STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.')
|
||||
|
||||
@@ -5,7 +5,18 @@
|
||||
|
||||
*Shota Fukumori (sora_h)*
|
||||
|
||||
## Rails 3.2.16 ##
|
||||
## Rails 3.2.17 (Feb 18, 2014) ##
|
||||
|
||||
* Use the reference for the mime type to get the format
|
||||
|
||||
Fixes: CVE-2014-0082
|
||||
|
||||
* Escape format, negative_format and units options of number helpers
|
||||
|
||||
Fixes: CVE-2014-0081
|
||||
|
||||
|
||||
## Rails 3.2.16 (Dec 12, 2013) ##
|
||||
|
||||
* Deep Munge the parameters for GET and POST Fixes CVE-2013-6417
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ module ActionPack
|
||||
module VERSION #:nodoc:
|
||||
MAJOR = 3
|
||||
MINOR = 2
|
||||
TINY = 16
|
||||
TINY = 17
|
||||
PRE = nil
|
||||
|
||||
STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.')
|
||||
|
||||
@@ -138,12 +138,18 @@ module ActionView
|
||||
|
||||
options.symbolize_keys!
|
||||
|
||||
options[:delimiter] = ERB::Util.html_escape(options[:delimiter]) if options[:delimiter]
|
||||
options[:separator] = ERB::Util.html_escape(options[:separator]) if options[:separator]
|
||||
options[:format] = ERB::Util.html_escape(options[:format]) if options[:format]
|
||||
options[:negative_format] = ERB::Util.html_escape(options[:negative_format]) if options[:negative_format]
|
||||
|
||||
defaults = I18n.translate(:'number.format', :locale => options[:locale], :default => {})
|
||||
currency = I18n.translate(:'number.currency.format', :locale => options[:locale], :default => {})
|
||||
currency[:negative_format] ||= "-" + currency[:format] if currency[:format]
|
||||
|
||||
defaults = DEFAULT_CURRENCY_VALUES.merge(defaults).merge!(currency)
|
||||
defaults[:negative_format] = "-" + options[:format] if options[:format]
|
||||
|
||||
options = defaults.merge!(options)
|
||||
|
||||
unit = options.delete(:unit)
|
||||
@@ -206,6 +212,9 @@ module ActionView
|
||||
|
||||
options.symbolize_keys!
|
||||
|
||||
options[:delimiter] = ERB::Util.html_escape(options[:delimiter]) if options[:delimiter]
|
||||
options[:separator] = ERB::Util.html_escape(options[:separator]) if options[:separator]
|
||||
|
||||
defaults = I18n.translate(:'number.format', :locale => options[:locale], :default => {})
|
||||
percentage = I18n.translate(:'number.percentage.format', :locale => options[:locale], :default => {})
|
||||
defaults = defaults.merge(percentage)
|
||||
@@ -255,6 +264,9 @@ module ActionView
|
||||
def number_with_delimiter(number, options = {})
|
||||
options.symbolize_keys!
|
||||
|
||||
options[:delimiter] = ERB::Util.html_escape(options[:delimiter]) if options[:delimiter]
|
||||
options[:separator] = ERB::Util.html_escape(options[:separator]) if options[:separator]
|
||||
|
||||
begin
|
||||
Float(number)
|
||||
rescue ArgumentError, TypeError
|
||||
@@ -578,7 +590,7 @@ module ActionView
|
||||
units = options.delete :units
|
||||
unit_exponents = case units
|
||||
when Hash
|
||||
units
|
||||
units = Hash[units.map { |k, v| [k, ERB::Util.html_escape(v)] }]
|
||||
when String, Symbol
|
||||
I18n.translate(:"#{units}", :locale => options[:locale], :raise => true)
|
||||
when nil
|
||||
|
||||
@@ -23,7 +23,7 @@ module ActionView #:nodoc:
|
||||
end
|
||||
|
||||
def formats
|
||||
[@mime_type.to_sym]
|
||||
[@mime_type.respond_to?(:ref) ? @mime_type.ref : @mime_type.to_s]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -19,6 +19,27 @@ class NumberHelperTest < ActionView::TestCase
|
||||
gigabytes(number) * 1024
|
||||
end
|
||||
|
||||
def test_number_helpers_escape_delimiter_and_separator
|
||||
assert_equal "111<script></script>111<script></script>1111", number_to_phone(1111111111, :delimiter => "<script></script>")
|
||||
|
||||
assert_equal "$1<script></script>01", number_to_currency(1.01, :separator => "<script></script>")
|
||||
assert_equal "$1<script></script>000.00", number_to_currency(1000, :delimiter => "<script></script>")
|
||||
|
||||
assert_equal "1<script></script>010%", number_to_percentage(1.01, :separator => "<script></script>")
|
||||
assert_equal "1<script></script>000.000%", number_to_percentage(1000, :delimiter => "<script></script>")
|
||||
|
||||
assert_equal "1<script></script>01", number_with_delimiter(1.01, :separator => "<script></script>")
|
||||
assert_equal "1<script></script>000", number_with_delimiter(1000, :delimiter => "<script></script>")
|
||||
|
||||
assert_equal "1<script></script>010", number_with_precision(1.01, :separator => "<script></script>")
|
||||
assert_equal "1<script></script>000.000", number_with_precision(1000, :delimiter => "<script></script>")
|
||||
|
||||
assert_equal "9<script></script>86 KB", number_to_human_size(10100, :separator => "<script></script>")
|
||||
|
||||
assert_equal "1<script></script>01", number_to_human(1.01, :separator => "<script></script>")
|
||||
assert_equal "100<script></script>000 Quadrillion", number_to_human(10**20, :delimiter => "<script></script>")
|
||||
end
|
||||
|
||||
def test_number_to_phone
|
||||
assert_equal("555-1234", number_to_phone(5551234))
|
||||
assert_equal("800-555-1212", number_to_phone(8005551212))
|
||||
@@ -33,6 +54,8 @@ class NumberHelperTest < ActionView::TestCase
|
||||
assert_equal("+18005551212", number_to_phone(8005551212, :country_code => 1, :delimiter => ''))
|
||||
assert_equal("22-555-1212", number_to_phone(225551212))
|
||||
assert_equal("+45-22-555-1212", number_to_phone(225551212, :country_code => 45))
|
||||
assert_equal "+<script></script>8005551212", number_to_phone(8005551212, :country_code => "<script></script>", :delimiter => "")
|
||||
assert_equal "8005551212 x <script></script>", number_to_phone(8005551212, :extension => "<script></script>", :delimiter => "")
|
||||
end
|
||||
|
||||
def test_number_to_currency
|
||||
@@ -48,6 +71,9 @@ class NumberHelperTest < ActionView::TestCase
|
||||
assert_equal("$1,234,567,890.50", number_to_currency("1234567890.50"))
|
||||
assert_equal("1,234,567,890.50 Kč", number_to_currency("1234567890.50", {:unit => raw("Kč"), :format => "%n %u"}))
|
||||
assert_equal("1,234,567,890.50 - Kč", number_to_currency("-1234567890.50", {:unit => raw("Kč"), :format => "%n %u", :negative_format => "%n - %u"}))
|
||||
assert_equal "<b>1,234,567,890.50</b> $", number_to_currency("1234567890.50", :format => "<b>%n</b> %u")
|
||||
assert_equal "<b>1,234,567,890.50</b> $", number_to_currency("-1234567890.50", :negative_format => "<b>%n</b> %u")
|
||||
assert_equal "<b>1,234,567,890.50</b> $", number_to_currency("-1234567890.50", 'negative_format' => "<b>%n</b> %u")
|
||||
end
|
||||
|
||||
def test_number_to_percentage
|
||||
@@ -252,6 +278,31 @@ class NumberHelperTest < ActionView::TestCase
|
||||
assert_equal '4.5 tens', number_to_human(45, :units => {:unit => "", :ten => ' tens '})
|
||||
end
|
||||
|
||||
def test_number_to_human_escape_units
|
||||
volume = { :unit => "<b>ml</b>", :thousand => "<b>lt</b>", :million => "<b>m3</b>", :trillion => "<b>km3</b>", :quadrillion => "<b>Pl</b>" }
|
||||
assert_equal '123 <b>lt</b>', number_to_human(123456, :units => volume)
|
||||
assert_equal '12 <b>ml</b>', number_to_human(12, :units => volume)
|
||||
assert_equal '1.23 <b>m3</b>', number_to_human(1234567, :units => volume)
|
||||
assert_equal '1.23 <b>km3</b>', number_to_human(1_234_567_000_000, :units => volume)
|
||||
assert_equal '1.23 <b>Pl</b>', number_to_human(1_234_567_000_000_000, :units => volume)
|
||||
|
||||
#Including fractionals
|
||||
distance = { :mili => "<b>mm</b>", :centi => "<b>cm</b>", :deci => "<b>dm</b>", :unit => "<b>m</b>",
|
||||
:ten => "<b>dam</b>", :hundred => "<b>hm</b>", :thousand => "<b>km</b>",
|
||||
:micro => "<b>um</b>", :nano => "<b>nm</b>", :pico => "<b>pm</b>", :femto => "<b>fm</b>"}
|
||||
assert_equal '1.23 <b>mm</b>', number_to_human(0.00123, :units => distance)
|
||||
assert_equal '1.23 <b>cm</b>', number_to_human(0.0123, :units => distance)
|
||||
assert_equal '1.23 <b>dm</b>', number_to_human(0.123, :units => distance)
|
||||
assert_equal '1.23 <b>m</b>', number_to_human(1.23, :units => distance)
|
||||
assert_equal '1.23 <b>dam</b>', number_to_human(12.3, :units => distance)
|
||||
assert_equal '1.23 <b>hm</b>', number_to_human(123, :units => distance)
|
||||
assert_equal '1.23 <b>km</b>', number_to_human(1230, :units => distance)
|
||||
assert_equal '1.23 <b>um</b>', number_to_human(0.00000123, :units => distance)
|
||||
assert_equal '1.23 <b>nm</b>', number_to_human(0.00000000123, :units => distance)
|
||||
assert_equal '1.23 <b>pm</b>', number_to_human(0.00000000000123, :units => distance)
|
||||
assert_equal '1.23 <b>fm</b>', number_to_human(0.00000000000000123, :units => distance)
|
||||
end
|
||||
|
||||
def test_number_to_human_with_custom_units_that_are_missing_the_needed_key
|
||||
assert_equal '123', number_to_human(123, :units => {:thousand => 'k'})
|
||||
assert_equal '123', number_to_human(123, :units => {})
|
||||
|
||||
17
actionpack/test/template/text_test.rb
Normal file
17
actionpack/test/template/text_test.rb
Normal file
@@ -0,0 +1,17 @@
|
||||
require 'abstract_unit'
|
||||
|
||||
class TextTest < ActiveSupport::TestCase
|
||||
test 'formats returns symbol for recognized MIME type' do
|
||||
assert_equal [:text], ActionView::Template::Text.new('', :text).formats
|
||||
end
|
||||
|
||||
test 'formats returns string for recognized MIME type when MIME does not have symbol' do
|
||||
foo = Mime::Type.lookup("foo")
|
||||
assert_nil foo.to_sym
|
||||
assert_equal ['foo'], ActionView::Template::Text.new('', foo).formats
|
||||
end
|
||||
|
||||
test 'formats returns string for unknown MIME type' do
|
||||
assert_equal ['foo'], ActionView::Template::Text.new('', 'foo').formats
|
||||
end
|
||||
end
|
||||
@@ -2,7 +2,7 @@ module ActiveModel
|
||||
module VERSION #:nodoc:
|
||||
MAJOR = 3
|
||||
MINOR = 2
|
||||
TINY = 16
|
||||
TINY = 17
|
||||
PRE = nil
|
||||
|
||||
STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.')
|
||||
|
||||
@@ -2,7 +2,7 @@ module ActiveRecord
|
||||
module VERSION #:nodoc:
|
||||
MAJOR = 3
|
||||
MINOR = 2
|
||||
TINY = 16
|
||||
TINY = 17
|
||||
PRE = nil
|
||||
|
||||
STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.')
|
||||
|
||||
@@ -2,7 +2,7 @@ module ActiveResource
|
||||
module VERSION #:nodoc:
|
||||
MAJOR = 3
|
||||
MINOR = 2
|
||||
TINY = 16
|
||||
TINY = 17
|
||||
PRE = nil
|
||||
|
||||
STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.')
|
||||
|
||||
@@ -2,7 +2,7 @@ module ActiveSupport
|
||||
module VERSION #:nodoc:
|
||||
MAJOR = 3
|
||||
MINOR = 2
|
||||
TINY = 16
|
||||
TINY = 17
|
||||
PRE = nil
|
||||
|
||||
STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.')
|
||||
|
||||
@@ -2,7 +2,7 @@ module Rails
|
||||
module VERSION #:nodoc:
|
||||
MAJOR = 3
|
||||
MINOR = 2
|
||||
TINY = 16
|
||||
TINY = 17
|
||||
PRE = nil
|
||||
|
||||
STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.')
|
||||
|
||||
@@ -2,7 +2,7 @@ module Rails
|
||||
module VERSION #:nodoc:
|
||||
MAJOR = 3
|
||||
MINOR = 2
|
||||
TINY = 16
|
||||
TINY = 17
|
||||
PRE = nil
|
||||
|
||||
STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.')
|
||||
|
||||
Reference in New Issue
Block a user