Skip to content

Commit

Permalink
XSLT::Stylesheet#transform no longer segfaults when handed a non-XML:…
Browse files Browse the repository at this point in the history
…:Document. Closes #452
  • Loading branch information
flavorjones committed May 4, 2011
1 parent 6f373ca commit 99647d6
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 2 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.rdoc
Expand Up @@ -56,6 +56,7 @@
* HTML::SAX::Parser should call back a block given to parse*() if any, just as XML::SAX::Parser does.
* Add further encoding detection to HTML parser that libxml2 does not do.
* Document#remove_namespaces! now handles attributes with namespaces. #396
* XSLT::Stylesheet#transform no longer segfaults when handed a non-XML::Document. #452

=== 1.4.4 / 2010-11-15

Expand Down
2 changes: 2 additions & 0 deletions ext/nokogiri/xslt_stylesheet.c
Expand Up @@ -104,6 +104,8 @@ static VALUE transform(int argc, VALUE* argv, VALUE self)

rb_scan_args(argc, argv, "11", &xmldoc, &paramobj);
if (NIL_P(paramobj)) { paramobj = rb_ary_new2(0L) ; }
if (!rb_obj_is_kind_of(xmldoc, cNokogiriXmlDocument))
rb_raise(rb_eArgError, "argument must be a Nokogiri::XML::Document");

/* handle hashes as arguments. */
if(T_HASH == TYPE(paramobj)) {
Expand Down
8 changes: 6 additions & 2 deletions test/test_xslt_transforms.rb
@@ -1,7 +1,6 @@
require "helper"

class TestXsltTransforms < Nokogiri::TestCase

def setup
@doc = Nokogiri::XML(File.open(XML_FILE))
end
Expand Down Expand Up @@ -179,11 +178,16 @@ def test_xslt_parse_error
assert_raises(RuntimeError) { Nokogiri::XSLT.parse(xslt_str) }
end

def test_passing_a_non_document_to_transform
xsl = Nokogiri::XSLT('<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"></xsl:stylesheet>')
assert_raises(ArgumentError) { xsl.transform("<div></div>") }
assert_raises(ArgumentError) { xsl.transform(Nokogiri::HTML("").css("body")) }
end

def check_params result_doc, params
result_doc.xpath('/root/params/*').each do |p|
assert_equal p.content, params[p.name.intern]
end
end

end
end

0 comments on commit 99647d6

Please sign in to comment.