本当は怖いHPC

HPC屋の趣味&実益ブログ

[ruby] libxml-rubyの名前空間の扱いの件 - 続報とパッチ

エントリを書いて、id:cho45さんからトラックバックをいただいて、いろいろコメント欄でやり取りをした結果、わかったことは

  • libxml-ruby 3.8.4ではid:cho45さんのコードは動く。
  • だけど、libxml-ruby 5.2.0だと動かない(しかもたまにSEGVする)

ということ。

というわけで、パッチを書いた。

Index: ext/xml/ruby_xml_xpath.c
===================================================================
--- ext/xml/ruby_xml_xpath.c    (revision 218)
+++ ext/xml/ruby_xml_xpath.c    (working copy)
@@ -76,9 +76,9 @@
     }
     else {
       // tuples of prefix/uri
-      if (RARRAY(RARRAY(nslist)->ptr[i])->len == 2) {
-       rprefix = RARRAY(RARRAY(nslist)->ptr[i])->ptr[0];
-       ruri = RARRAY(RARRAY(nslist)->ptr[i])->ptr[1];
+      if (RARRAY(nslist)->len == 2) {
+       rprefix = RARRAY(nslist)->ptr[0];
+       ruri = RARRAY(nslist)->ptr[1];
        ruby_xml_xpath_context_register_namespace(xxpc, rprefix, ruri);
       } else {
        rb_raise(rb_eArgError, "nested array must be an array of strings, prefix and href/uri");

libxml-devのMLに投げたけど、取り込んでもらえるかしら。ついでにハッシュでも渡せると素敵かしら。

追記:acceptしてもらえました。次期バージョンでは修正されます。

【広告】