Bugs item #7018, was opened at 2006-12-03 02:33 You can respond by visiting: http://rubyforge.org/tracker/?func=detail&atid=1971&aid=7018&group_id=494
Category: None Group: None Status: Open Resolution: None Priority: 3 Submitted By: Nobody (None) Assigned to: Nobody (None) Summary: Parsing an empty string causes Segfault / Bus Error Initial Comment: Running on Mac OS X with libxml-ruby 0.3.8.4, if you try to parse an empty string you get a segfault. irb(main):001:0> require 'rubygems' => true irb(main):002:0> require 'xml/libxml' => true irb(main):003:0> string = '' => "" irb(main):004:0> XML::Parser.string(string).parse (irb):4: [BUG] Bus Error ruby 1.8.4 (2005-12-24) [i686-darwin8.7.1] Abort trap Expected behaviour would be simlar to what a single space character gets: irb(main):001:0> require 'rubygems' => true irb(main):002:0> require 'xml/libxml' => true irb(main):003:0> string = ' ' => " " irb(main):004:0> XML::Parser.string(string).parse Entity: line 1: parser error : Start tag expected, '<' not found ^ XML::Parser::ParseError: Document didn't parse from (irb):4:in `parse' from (irb):4 irb(main):005:0> ---------------------------------------------------------------------- Comment By: Saurabh Nanda (saurabhnanda) Date: 2008-02-05 19:43 Message: I see there's a patch submitted for this already. Has this been applied? I'm running libxml-ruby-0.5.2 and still facing this issue. ---------------------------------------------------------------------- Comment By: Todd Fisher (taf2) Date: 2006-12-17 19:19 Message: Here's a patch and test. ctxt is null in the case of nil input... Index: ext/xml/ruby_xml_parser.c =================================================================== RCS file: /var/cvs/libxml/libxml/ext/xml/ruby_xml_parser.c,v retrieving revision 1.5 diff -u -r1.5 ruby_xml_parser.c --- ext/xml/ruby_xml_parser.c 20 Nov 2006 01:22:07 -0000 1.5 +++ ext/xml/ruby_xml_parser.c 17 Dec 2006 13:45:04 -0000 @@ -1123,7 +1123,9 @@ case RUBY_LIBXML_SRC_TYPE_IO: Data_Get_Struct(rxp->ctxt, ruby_xml_parser_context, rxpc); if (xmlParseDocument(rxpc->ctxt) == -1) { - xmlFreeDoc(rxpc->ctxt->myDoc); + if (rxpc->ctxt && rxpc->ctxt->myDoc) { + xmlFreeDoc(rxpc->ctxt->myDoc); + } rb_raise(eXMLParserParseError, "Document didn't parse"); } require "libxml_test" require 'test/unit' class EmptyString < Test::Unit::TestCase def test_parse_empty_string begin string = '' XML::Parser.string(string).parse rescue => e assert e, "Document didn't parse" end end end ---------------------------------------------------------------------- You can respond by visiting: http://rubyforge.org/tracker/?func=detail&atid=1971&aid=7018&group_id=494 _______________________________________________ libxml-devel mailing list libxml-devel@rubyforge.org http://rubyforge.org/mailman/listinfo/libxml-devel