aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib
diff options
context:
space:
mode:
authorDominik Sander <git@dsander.de>2018-04-17 22:03:02 +0200
committerDominik Sander <git@dsander.de>2018-04-18 21:45:13 +0200
commit7d25b651fa9011b040fab2f19fb315679519edb2 (patch)
treef1ee16f98b5b76a58669e7dffbb3feba1520b893 /activesupport/lib
parent6378a386ddd1beb998ec9149a284d5fb13d491c7 (diff)
downloadrails-7d25b651fa9011b040fab2f19fb315679519edb2.tar.gz
rails-7d25b651fa9011b040fab2f19fb315679519edb2.tar.bz2
rails-7d25b651fa9011b040fab2f19fb315679519edb2.zip
Fix exception in AS::Timezone.all when any tzinfo data is missing
Before this change missing timezone data for any of the time zones defined in `ActiveSupport::Timezone::MAPPING` caused a `comparison of NilClass with ActiveSupport::TimeZone failed` exception. Attempting to get a timezone by passing a number/duration to `[]` or calling `all` directly will try to sort sort the values of `zones_map`. Those values are initialized by the return value of `create(zonename)` which returns `nil` if `TZInfo` is unable to find the timezone information. In our case the exception was triggered by an outdated tzdata package which did not include information for the "recently" added time zones. Before 078421bacba178eac6a8e607b16f3f4511c5d72f `zones_map` only returned the information that have been loaded into `@lazy_zone_map` which ignored time zones for which the data could not be loaded, this change restores the previous behaviour.
Diffstat (limited to 'activesupport/lib')
-rw-r--r--activesupport/lib/active_support/values/time_zone.rb3
1 files changed, 2 insertions, 1 deletions
diff --git a/activesupport/lib/active_support/values/time_zone.rb b/activesupport/lib/active_support/values/time_zone.rb
index 9dfaddb825..5f709c5fd9 100644
--- a/activesupport/lib/active_support/values/time_zone.rb
+++ b/activesupport/lib/active_support/values/time_zone.rb
@@ -279,7 +279,8 @@ module ActiveSupport
def zones_map
@zones_map ||= MAPPING.each_with_object({}) do |(name, _), zones|
- zones[name] = self[name]
+ timezone = self[name]
+ zones[name] = timezone if timezone
end
end
end