Skip to content

Commit dc793b3

Browse files
DevDev
authored andcommitted
Fixed vulnerability issue
1 parent 37e183a commit dc793b3

File tree

1 file changed

+17
-16
lines changed

1 file changed

+17
-16
lines changed

lib/money/bank/variable_exchange.rb

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -259,25 +259,26 @@ def rates
259259
# bank.get_rate("USD", "CAD") #=> 1.24515
260260
# bank.get_rate("CAD", "USD") #=> 0.803115
261261
def import_rates(format, s, opts = {})
262-
raise Money::Bank::UnknownRateFormat unless RATE_FORMATS.include?(format)
263-
264-
if format == :ruby
265-
warn '[WARNING] Using :ruby format when importing rates is potentially unsafe and ' \
266-
'might lead to remote code execution via Marshal.load deserializer. Consider using ' \
267-
'safe alternatives such as :json and :yaml.'
262+
raise Money::bank::UnknownRateFormat unless RATE_FORMATS.include?(format)
263+
264+
store.transaction do
265+
data = case format
266+
when :json
267+
JSON.parse(s)
268+
when :yaml
269+
YAML.safe_load(s, permitted_classes: [BigDecimal, Date, Time], aliases: true)
270+
else
271+
raise Money::bank::UnknownRateFormat, "Unknown format: #{format}"
268272
end
269-
270-
store.transaction do
271-
data = FORMAT_SERIALIZERS[format].load(s)
272-
273-
data.each do |key, rate|
274-
from, to = key.split(SERIALIZER_SEPARATOR)
275-
store.add_rate from, to, rate
276-
end
273+
274+
data.each do |key, rate|
275+
from, to = key.split(SERIALIZER_SEPARATOR)
276+
store.add_rate from, to, rate
277277
end
278-
279-
self
280278
end
279+
280+
self
281+
end
281282
end
282283
end
283284
end

0 commit comments

Comments
 (0)