From f234d51eaba861edea925eabb564a0bee41b96a0 Mon Sep 17 00:00:00 2001 From: Benoit Daloze Date: Sat, 28 Mar 2020 00:22:51 +0100 Subject: Update to ruby/spec@ec84479 --- spec/ruby/security/cve_2020_10663_spec.rb | 42 +++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 spec/ruby/security/cve_2020_10663_spec.rb (limited to 'spec/ruby/security') diff --git a/spec/ruby/security/cve_2020_10663_spec.rb b/spec/ruby/security/cve_2020_10663_spec.rb new file mode 100644 index 0000000000..4738ce175e --- /dev/null +++ b/spec/ruby/security/cve_2020_10663_spec.rb @@ -0,0 +1,42 @@ +require_relative '../spec_helper' +require 'json' + +module JSONSpecs + class MyClass + def initialize(foo) + @foo = foo + end + + def self.json_create(hash) + new(*hash['args']) + end + + def to_json(*args) + { 'json_class' => self.class.name, 'args' => [ @foo ] }.to_json(*args) + end + end +end + +guard -> { + ruby_version_is "2.4.10"..."2.5.0" or + ruby_version_is "2.5.8"..."2.6.0" or + ruby_version_is "2.6.6" or + JSON.const_defined?(:Pure) or + version_is(JSON::VERSION, '2.3.0') +} do + describe "CVE-2020-10663 is resisted by" do + it "only creating custom objects if passed create_additions: true or using JSON.load" do + obj = JSONSpecs::MyClass.new("bar") + JSONSpecs::MyClass.json_creatable?.should == true + json = JSON.dump(obj) + + JSON.parse(json, create_additions: true).class.should == JSONSpecs::MyClass + JSON(json, create_additions: true).class.should == JSONSpecs::MyClass + JSON.load(json).class.should == JSONSpecs::MyClass + + JSON.parse(json).class.should == Hash + JSON.parse(json, nil).class.should == Hash + JSON(json).class.should == Hash + end + end +end -- cgit v1.2.3