diff --git a/lib/saml/base.rb b/lib/saml/base.rb index 8fb147c..541c32b 100644 --- a/lib/saml/base.rb +++ b/lib/saml/base.rb @@ -42,10 +42,6 @@ def use_original(object) module XmlMapperClassMethods def parse(xml, options = {}) - if xml.is_a?(String) - ActiveSupport::XmlMini_REXML.parse(xml) - end - object = super if object.is_a?(Array) object.map { |x| x.from_xml = true } @@ -53,7 +49,7 @@ def parse(xml, options = {}) object.from_xml = true end object - rescue Nokogiri::XML::SyntaxError, REXML::ParseException => e + rescue Nokogiri::XML::SyntaxError => e raise Saml::Errors::UnparseableMessage.new(e.message) rescue TypeError => e raise Saml::Errors::UnparseableMessage.new(e.message) diff --git a/saml.gemspec b/saml.gemspec index a06977d..e5961fd 100644 --- a/saml.gemspec +++ b/saml.gemspec @@ -19,8 +19,7 @@ Gem::Specification.new do |s| s.add_dependency 'activesupport', '>= 4.2' s.add_dependency 'activemodel', '>= 4.2' s.add_dependency 'xmlmapper', '~> 0.8.1' - s.add_dependency 'nokogiri', '~> 1.11' - s.add_dependency 'rexml' + s.add_dependency 'nokogiri', '>= 1.11.4', '< 2.0' s.add_dependency 'xmldsig', '>= 0.5.1', '< 0.8.0' s.add_dependency 'xmlenc', '>= 0.6.9', '< 0.9.0' diff --git a/spec/lib/saml/base_spec.rb b/spec/lib/saml/base_spec.rb index 72e316a..bf9d9f7 100644 --- a/spec/lib/saml/base_spec.rb +++ b/spec/lib/saml/base_spec.rb @@ -36,8 +36,8 @@ class BaseDummy XML - it 'raises an Saml::Errors::HackAttack for entity expansion has grown too large' do - expect { BaseDummy.parse(xml) }.to raise_error RuntimeError, 'entity expansion has grown too large' + it 'raises a Saml::Errors::UnparseableMessage instead of expanding the entities' do + expect { BaseDummy.parse(xml) }.to raise_error(Saml::Errors::UnparseableMessage) end end @@ -58,7 +58,7 @@ class BaseDummy end it 'raises an error when a method does not exist' do - expect(ActiveSupport::XmlMini_REXML).to receive(:parse).and_raise(NoMethodError) + expect(Nokogiri).to receive(:XML).and_raise(NoMethodError) expect { BaseDummy.parse('unknown') }.to raise_error(Saml::Errors::UnparseableMessage) diff --git a/spec/lib/saml/complex_types/request_abstract_type_spec.rb b/spec/lib/saml/complex_types/request_abstract_type_spec.rb index 11f5aac..a3dbcab 100644 --- a/spec/lib/saml/complex_types/request_abstract_type_spec.rb +++ b/spec/lib/saml/complex_types/request_abstract_type_spec.rb @@ -82,14 +82,17 @@ wsa_address: 'address' } ) - xml = Hash.from_xml(soap) - expect(xml["Envelope"]["Header"]).to eq( - "MessageID" => "id", - "To" => "to", - "Action" => "some_action", - "ReplyTo" => { "Address" => "address" }, - 'xmlns:wsa' => 'http://schemas.xmlsoap.org/ws/2004/08/addressing' - ) + namespaces = { + 'soapenv' => 'http://schemas.xmlsoap.org/soap/envelope/', + 'wsa' => 'http://schemas.xmlsoap.org/ws/2004/08/addressing' + } + header = Nokogiri::XML::Document.parse(soap).at_xpath('//soapenv:Header', namespaces) + + expect(header.namespaces['xmlns:wsa']).to eq('http://schemas.xmlsoap.org/ws/2004/08/addressing') + expect(header.at_xpath('wsa:MessageID', namespaces).text).to eq('id') + expect(header.at_xpath('wsa:To', namespaces).text).to eq('to') + expect(header.at_xpath('wsa:Action', namespaces).text).to eq('some_action') + expect(header.at_xpath('wsa:ReplyTo/wsa:Address', namespaces).text).to eq('address') end end