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

Attachment: attr.rb
Description: application/ruby

_______________________________________________
libxml-devel mailing list
libxml-devel@rubyforge.org
http://rubyforge.org/mailman/listinfo/libxml-devel

Reply via email to