When the attached code is run under valgrind I get the following error. ==13906== Invalid read of size 8 ==13906== at 0x6B4E13C: ruby_xml_attr_free (ruby_xml_attr.c:12) ==13906== by 0x3C2524A9CD: rb_gc_call_finalizer_at_exit (gc.c:1928) ==13906== by 0x3C2522FA92: ruby_finalize_1 (eval.c:1548) ==13906== by 0x3C25238BFF: ruby_cleanup (eval.c:1582) ==13906== by 0x3C25238D28: ruby_stop (eval.c:1619) ==13906== by 0x3C252444C3: ruby_run (eval.c:1640) ==13906== by 0x4007E2: main (main.c:48) ==13906== Address 0x6AE4790 is 40 bytes inside a block of size 96 free'd ==13906== at 0x4A055AB: free (vg_replace_malloc.c:233) ==13906== by 0x3C2524A737: ruby_xfree (gc.c:159) ==13906== by 0x3C304507AE: xmlRemoveProp (in /usr/lib64/libxml2.so.2.6.28) ==13906== by 0x6B49C3D: ruby_xml_node_property_set (ruby_xml_node.c:1892) ==13906== by 0x3C25235BAD: rb_call0 (eval.c:5815) ==13906== by 0x3C252360B7: rb_call (eval.c:6062) ==13906== by 0x3C2523DAB3: rb_eval (eval.c:3429) ==13906== by 0x3C2524442A: ruby_exec_internal (eval.c:1608) ==13906== by 0x3C25244474: ruby_exec (eval.c:1628) ==13906== by 0x3C2524449F: ruby_run (eval.c:1638) ==13906== by 0x4007E2: main (main.c:48) ==13906==
I think the issue is with ruby_xml_node_property_set() calling xmlRemoveProp() which both removes the attribute from the node and frees it. I think freeing the attribute needs to be conditional on there being no other references. Jon
attr.rb
Description: application/ruby
_______________________________________________ libxml-devel mailing list libxml-devel@rubyforge.org http://rubyforge.org/mailman/listinfo/libxml-devel