Bugs item #7018, was opened at 2006-12-02 14:03
You can respond by visiting: 
http://rubyforge.org/tracker/?func=detail&atid=1971&aid=7018&group_id=494

Category: None
Group: None
>Status: Closed
Resolution: None
Priority: 3
Submitted By: Nobody (None)
>Assigned to: Charlie Savage (cfis)
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: Charlie Savage (cfis)
Date: 2008-07-01 03:09

Message:
This now returns an error instead of segfaulting.

----------------------------------------------------------------------

Comment By: Saurabh Nanda (saurabhnanda)
Date: 2008-02-05 07:13

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 06:49

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

Reply via email to