What would be the correct way to stop SAX parsing in libxml-ruby?
The correct way of doing it in some other bindings (i.e. the Java ones) is to raise an exception.
With libxml-ruby, if I raise an exception in the handler, the parsing stops. However, when my program finishes and ruby gc goes to clean up the memory I get this:
*** glibc detected *** /usr/bin/ruby1.8: free(): invalid pointer: 0x0038c420 ***
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6[0x244ff1]
/lib/tls/i686/cmov/libc.so.6[0x2466f2]
/lib/tls/i686/cmov/libc.so.6(cfree+0x6d)[0x2497cd]
/usr/lib/libxml2.so.2(xmlFreeParserCtxt+0xbf)[0x566976f]
/usr/lib/ruby/gems/1.8/gems/libxml-ruby-1.1.3/lib/libxml_ruby.so[0x3822ad]
/usr/lib/libruby1.8.so.1.8(rb_gc_call_finalizer_at_exit+0xf6)[0x85c7c6]
/usr/lib/libruby1.8.so.1.8[0x8415b7]
/usr/lib/libruby1.8.so.1.8(ruby_cleanup+0x18b)[0x84de0b]
/usr/lib/libruby1.8.so.1.8(ruby_stop+0x1d)[0x84df4d]
/usr/lib/libruby1.8.so.1.8(ruby_run+0x56)[0x8552e6]
/usr/bin/ruby1.8[0x804872d]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6)[0x1f0b56]
/usr/bin/ruby1.8[0x8048651]
======= Memory map: ========
00110000-00113000 r-xp 00000000 08:05 2212766 /usr/lib/ruby/1.8/i486-linux/thread.so
00113000-00114000 r--p 00002000 08:05 2212766 /usr/lib/ruby/1.8/i486-linux/thread.so
00114000-00115000 rw-p 00003000 08:05 2212766 /usr/lib/ruby/1.8/i486-linux/thread.so
00115000-00119000 r-xp 00000000 08:05 2212760 /usr/lib/ruby/1.8/i486-linux/stringio.so
00119000-0011a000 r--p 00003000 08:05 2212760 /usr/lib/ruby/1.8/i486-linux/stringio.so
0011a000-0011b000 rw-p 00004000 08:05 2212760 /usr/lib/ruby/1.8/i486-linux/stringio.so
0011b000-0012e000 r-xp 00000000 08:05 2794630 /lib/tls/i686/cmov/libnsl-2.10.1.so
0012e000-0012f000 r--p 00012000 08:05 2794630 /lib/tls/i686/cmov/libnsl-2.10.1.so
0012f000-00130000 rw-p 00013000 08:05 2794630 /lib/tls/i686/cmov/libnsl-2.10.1.so
00130000-00132000 rw-p 00000000 00:00 0
00132000-0013c000 r-xp 00000000 08:05 2794633 /lib/tls/i686/cmov/libnss_files-2.10.1.so
0013c000-0013d000 r--p 00009000 08:05 2794633 /lib/tls/i686/cmov/libnss_files-2.10.1.so
0013d000-0013e000 rw-p 0000a000 08:05 2794633 /lib/tls/i686/cmov/libnss_files-2.10.1.so
0013e000-00142000 r-xp 00000000 08:05 2212762 /usr/lib/ruby/1.8/i486-linux/strscan.so
00142000-00143000 r--p 00003000 08:05 2212762 /usr/lib/ruby/1.8/i486-linux/strscan.so
00143000-00144000 rw-p 00004000 08:05 2212762 /usr/lib/ruby/1.8/i486-linux/strscan.so
00144000-0014e000 r-xp 00000000 08:05 2212759 /usr/lib/ruby/1.8/i486-linux/socket.so
0014e000-0014f000 r--p 00009000 08:05 2212759 /usr/lib/ruby/1.8/i486-linux/socket.so
0014f000-00150000 rw-p 0000a000 08:05 2212759 /usr/lib/ruby/1.8/i486-linux/socket.so
00150000-00164000 r-xp 00000000 08:05 2777239 /lib/libz.so.1.2.3.3
00164000-00165000 r--p 00013000 08:05 2777239 /lib/libz.so.1.2.3.3
00165000-00166000 rw-p 00014000 08:05 2777239 /lib/libz.so.1.2.3.3
00166000-00169000 r-xp 00000000 08:05 2212737 /usr/lib/ruby/1.8/i486-linux/digest.so
00169000-0016a000 r--p 00002000 08:05 2212737 /usr/lib/ruby/1.8/i486-linux/digest.so
0016a000-0016b000 rw-p 00003000 08:05 2212737 /usr/lib/ruby/1.8/i486-linux/digest.so
0016b000-001aa000 r-xp 00000000 08:05 2213063 /usr/lib/ruby/1.8/i486-linux/openssl.so
001aa000-001ab000 ---p 0003f000 08:05 2213063 /usr/lib/ruby/1.8/i486-linux/openssl.so
001ab000-001ac000 r--p 0003f000 08:05 2213063 /usr/lib/ruby/1.8/i486-linux/openssl.so
001ac000-001ad000 rw-p 00040000 08:05 2213063 /usr/lib/ruby/1.8/i486-linux/openssl.so
001ad000-001af000 r-xp 00000000 08:05 2212740 /usr/lib/ruby/1.8/i486-linux/digest/md5.so
001af000-001b0000 r--p 00001000 08:05 2212740 /usr/lib/ruby/1.8/i486-linux/digest/md5.so
001b0000-001b1000 rw-p 00002000 08:05 2212740 /usr/lib/ruby/1.8/i486-linux/digest/md5.so
001b1000-001cd000 r-xp 00000000 08:05 2777094 /lib/libgcc_s.so.1
001cd000-001ce000 r--p 0001b000 08:05 2777094 /lib/libgcc_s.so.1
001ce000-001cf000 rw-p 0001c000 08:05 2777094 /lib/libgcc_s.so.1
001d1000-001d8000 r-xp 00000000 08:05 2794640 /lib/tls/i686/cmov/librt-2.10.1.so
001d8000-001d9000 r--p 00006000 08:05 2794640 /lib/tls/i686/cmov/librt-2.10.1.so
001d9000-001da000 rw-p 00007000 08:05 2794640 /lib/tls/i686/cmov/librt-2.10.1.so
001da000-00318000 r-xp 00000000 08:05 2794624 /lib/tls/i686/cmov/libc-2.10.1.so
00318000-00319000 ---p 0013e000 08:05 2794624 /lib/tls/i686/cmov/libc-2.10.1.so
00319000-0031b000 r--p 0013e000 08:05 2794624 /lib/tls/i686/cmov/libc-2.10.1.so
0031b000-0031c000 rw-p 00140000 08:05 2794624 /lib/tls/i686/cmov/libc-2.10.1.so
0031c000-0031f000 rw-p 00000000 00:00 0
0031f000-00365000 r-xp 00000000 08:05 2778418 /lib/i686/cmov/libssl.so.0.9.8
00365000-00366000 r--p 00045000 08:05 2778418 /lib/i686/cmov/libssl.so.0.9.8
00366000-00369000 rw-p 00046000 08:05 2778418 /lib/i686/cmov/libssl.so.0.9.8
00369000-0038b000 r-xp 00000000 08:05 3318066 /usr/lib/ruby/gems/1.8/gems/libxml-ruby-1.1.3/lib/libxml_ruby.so
0038b000-0038c000 r--p 00022000 08:05 3318066 /usr/lib/ruby/gems/1.8/gems/libxml-ruby-1.1.3/lib/libxml_ruby.so
0038c000-0038d000 rw-p 00023000 08:05 3318066 /usr/lib/ruby/gems/1.8/gems/libxml-ruby-1.1.3/lib/libxml_ruby.so
00414000-0041d000 r-xp 00000000 08:05 2794626 /lib/tls/i686/cmov/libcrypt-2.10.1.so
0041d000-0041e000 r--p 00008000 08:05 2794626 /lib/tls/i686/cmov/libcrypt-2.10.1.so
0041e000-0041f000 rw-p 00009000 08:05 2794626 /lib/tls/i686/cmov/libcrypt-2.10.1.so
0041f000-00446000 rw-p 00000000 00:00 0
00481000-0049a000 r-xp 00000000 08:05 2212763 /usr/lib/ruby/1.8/i486-linux/syck.so
0049a000-0049b000 r--p 00018000 08:05 2212763 /usr/lib/ruby/1.8/i486-linux/syck.so
0049b000-0049c000 rw-p 00019000 08:05 2212763 /usr/lib/ruby/1.8/i486-linux/syck.so
004c6000-004db000 r-xp 00000000 08:05 2794638 /lib/tls/i686/cmov/libpthread-2.10.1.so
004db000-004dc000 r--p 00014000 08:05 2794638 /lib/tls/i686/cmov/libpthread-2.10.1.so
004dc000-004dd000 rw-p 00015000 08:05 2794638 /lib/tls/i686/cmov/libpthread-2.10.1.so
004dd000-004df000 rw-p 00000000 00:00 0
00509000-0050a000 r-xp 00000000 08:05 3238178 /usr/lib/ruby/gems/1.8/gems/hpricot-0.8.2/lib/fast_xs.so
0050a000-0050b000 r--p 00000000 08:05 3238178 /usr/lib/ruby/gems/1.8/gems/hpricot-0.8.2/lib/fast_xs.so
0050b000-0050c000 rw-p 00001000 08:05 3238178 /usr/lib/ruby/gems/1.8/gems/hpricot-0.8.2/lib/fast_xs.so
0050c000-0065b000 r-xp 00000000 08:05 2778416 /lib/i686/cmov/libcrypto.so.0.9.8
0065b000-00663000 r--p 0014e000 08:05 2778416 /lib/i686/cmov/libcrypto.so.0.9.8
00663000-00670000 rw-p 00156000 08:05 2778416 /lib/i686/cmov/libcrypto.so.0.9.8
00670000-00674000 rw-p 00000000 00:00 0 Aborted
|