diff --git a/CHANGELOG.rdoc b/CHANGELOG.rdoc index 9dfe4b4606..d4b59ab731 100644 --- a/CHANGELOG.rdoc +++ b/CHANGELOG.rdoc @@ -3,6 +3,7 @@ * Bugfixes * (JRuby) Fix "null document" error when parsing an empty IO in jruby 1.7.3. #883 + * (MRI) Fix segfault when there is no default subelement for an HTML node. #917 * Minor Enhancements diff --git a/ext/nokogiri/html_element_description.c b/ext/nokogiri/html_element_description.c index b0f7094101..696ed9a513 100644 --- a/ext/nokogiri/html_element_description.c +++ b/ext/nokogiri/html_element_description.c @@ -86,7 +86,10 @@ static VALUE default_sub_element(VALUE self) htmlElemDesc * description; Data_Get_Struct(self, htmlElemDesc, description); - return NOKOGIRI_STR_NEW2(description->defaultsubelt); + if (description->defaultsubelt) + return NOKOGIRI_STR_NEW2(description->defaultsubelt); + + return Qnil; } /* diff --git a/test/html/test_element_description.rb b/test/html/test_element_description.rb index 38ce55c233..8e0a1e908c 100644 --- a/test/html/test_element_description.rb +++ b/test/html/test_element_description.rb @@ -69,6 +69,11 @@ def test_default_sub_element assert_equal 'div', ElementDescription['body'].default_sub_element end + def test_null_default_sub_element + doc = Nokogiri::HTML('foo') + doc.root.description.default_sub_element + end + def test_optional_attributes attrs = ElementDescription['table'].optional_attributes assert attrs