Skip to content

Commit f2d1c3c

Browse files
committed
Use BigDecimal for multiple_of check
Fixes overflow error exposed by: json-schema-org/JSON-Schema-Test-Suite#438 ``` FloatDomainError: Infinity /Users/dharsha/repos/json_schemer/lib/json_schemer/schema/base.rb:367:in `floor' /Users/dharsha/repos/json_schemer/lib/json_schemer/schema/base.rb:367:in `validate_numeric' /Users/dharsha/repos/json_schemer/lib/json_schemer/schema/base.rb:378:in `validate_number' /Users/dharsha/repos/json_schemer/lib/json_schemer/schema/base.rb:277:in `validate_type' /Users/dharsha/repos/json_schemer/lib/json_schemer/schema/base.rb:198:in `validate_instance' ```
1 parent b6c9d38 commit f2d1c3c

File tree

2 files changed

+2
-2
lines changed

2 files changed

+2
-2
lines changed

lib/json_schemer.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# frozen_string_literal: true
22
require 'base64'
3+
require 'bigdecimal'
34
require 'ipaddr'
45
require 'json'
56
require 'net/http'

lib/json_schemer/schema/base.rb

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -355,8 +355,7 @@ def validate_numeric(instance, &block)
355355
validate_exclusive_minimum(instance, exclusive_minimum, minimum, &block) if exclusive_minimum
356356

357357
if multiple_of
358-
quotient = data / multiple_of.to_f
359-
yield error(instance, 'multipleOf') unless quotient.floor == quotient
358+
yield error(instance, 'multipleOf') unless BigDecimal(data.to_s).modulo(multiple_of).zero?
360359
end
361360
end
362361

0 commit comments

Comments
 (0)