Bugfixes
(JRuby) Fix out of memory bug when certain invalid documents are parsed.
(JRuby) Fix regression of billion-laughs vulnerability. #586
This release was based on v1.5.10 and 1.6.0.rc1, and contains changes mentioned in both.
廃止
Remove pre 1.9 monitoring from Travis.
This release was based on v1.5.9, and so does not contain any fixes mentioned in the notes for v1.5.10.
註
実行時依存 gem として mini_portile を追加
Ruby 1.9.2以上のみサポート
機能
(MRI) libxml 2.8.0 と libxslt 1.2.26 を同梱。環境変数 NOKOGIRI_USE_SYSTEM_LIBRARIES を設定しない限り、 gem のインストール時にコンパイルして使われる。VERSION_INFO (および ‘nokogiri -v`) には、同梱の libxml またはシステムの libxml のいずれが使われているかの情報が含まれる。
(Windows) libxml 2.8.0 に更新
廃止
Ruby 1.8.7以下のサポートを終了
Bugfixes
(JRuby) Fix out of memory bug when certain invalid documents are parsed.
(JRuby) Fix regression of billion-laughs vulnerability. #568
バグ修正
(JRuby) JRuby 1.7.3で空のIOをパースする際の “null document” エラーを修正 #883
(JRuby) XSDにDTDのDOCTYPEがあったときのスキーマ検証の問題を修正 #912 (Patrick Chengに感謝!)
(MRI) HTMLノードに対するdefault_sub_element呼出でsegfaultしていたのを修正 #917
註
RARRAY_PTR()の代わりにrb_ary_entry()を使うように変更 (そう、Rubiniusのためにね) #877 (Dirkjan Bussinkに感謝!)
テストでTypeErrorが起きるのを修正 #900 (Cédric Boutillierに感謝!)
バグ修正
prefixed attributes を持つ要素が親を付け替えられたとき名前空間を適切に扱う #869
ネストされた HTML のなかの SVG 要素が持つ名前空間つき属性を参照したときの返り値が一致しないバグを修正 #861
(MRI) 部分ノードをパースしたときメモリリークするバグを修正 #856
バグ修正
(JRuby) xhref 属性があり base_uri が無いとき、 EmptyStackException 例外が発生するのを修正 #534, #805. (ありがとう, Patrick Quinn と Brian Hoffman!)
1.5.7 から xmlns 属性が重複するバグを修正 #865
Nokogiri::XML::Builder を使って prefixed 名前空間をルートノードに対しても使えるようにした。 #868
機能
Ruby 2.0 で Windows 環境をサポート
バグ修正
エンコーディング名が小文字のとき SAX::Parser.parse_io が例外を投げるようになった。 #828
(JRuby) Java の Nokogiri はついに 1.8 と 1.9 両方のモードで全てのテストがグリーンになった!イェーイ! #798, #705
(JRuby) Nokogiri::XML::Reader が jruby で壊れていたのを修正 (pull parser なのに全ての xml ドキュメントをメモリ上にロードしていた) #831
(JRuby) JRuby が “&” をパースすると停止してしまう #837
(JRuby) JRuby で不正な XML 命令をパースさせると NullPointerException 例外が発生する #838
(JRuby) Node#content= が JRuby と MRI で一致しない #839
(JRuby) to_xhtml が自分自身に閉じタグを表すスラッシュを含む要素を正しく表示しない #834
(JRuby) テキストノードの後ろに続くエンティティが壊れてしまう (‘&` や `;` が消える) #835
(JRuby) 空の attributes を参照すると nil が返る #818
“.foo” のような CSS クラス名の問い合わせ時に連続した空白を単一とみなす #854
名前空間の扱いが MRI と JRuby の間で統一された #846, #801 (ありがとう, Michael Klein!)
(MRI) SAX パーサーが空の xml 命令をパースできるようにする #845
新機能
XML::Document#collect_namespaces メソッドのパフォーマンスを改善した。 #761 (ありがとう、Juergen Mangler!)
SAX::Document#processing_instructionに新しいcallbackが追加 (ありがとう、Kitaiti Makoto!)
Node#native_content= メソッドでエスケープされていない文字列をセットできるようにした。 #768
名前空間を付けて xpath 式を書く場合に、シンボルキーを使えるようにした。#729 (ありがとう、Ben Langfeld.)
XML::Node#[]= メソッド内で受け取った引数を文字列に変換するようにした。#729 (ありがとう、Ben Langfeld.)
bin/nokogiri コマンドが $stdin からドキュメントを読んで処理できるようにした。
bin/nokogiri -e を指定することでコマンドラインプログラムを実行できるようにした。
(JRuby) bin/nokogiri –version は Xerces および NekoHTML のバージョンを表示。
バグ修正
Nokogiri はこのバージョンからXSLT変換のエラーを検出するようになった。#731 (ありがとう、Justin Fitzsimmons!)
DocumentFragment のトップレベルノードを置き換えようとした際に Error を出さない。 #775
SAXパーザに不正なエンコーディングに渡された場合はArgumentErrorを投げるようにした。#756 (ありがとう、Bradley Schaefer!)
(JRuby) XML宣言の前にスペースがあると、ドキュメントのパーズに失敗する。(#748の修正でこれもなおっている) #790
(JRuby) Nokogiri::XML::Node#content のJRubyの振る舞いがCRubyと同じではない。#794, #797
(JRuby) で ‘#’ で始まる文字列を名前とする EntityReference を作ろうとすると INVALID_CHARACTER_ERR という例外が発生する。 #719
(JRuby) では Nodeのサブクラスのnamespaceを正しく文字列に変換しない。 #715
(JRuby) Node#contentがこのバージョンから改行コードを正しく表示するようになった。#737 (ありがとう、Piotr Szmielew!)
(JRuby) recover optionが指定されている場合は宣言の無い名前空間を無視するようにした。#748
(JRuby) 名前空間を検出するXPathが続けて実行されても例外を投げてはいけない。#764
(JRuby) XMLを表示(出力)する際のホワイトスペースの扱いをlibxml2バージョンとさらに同様になるようにした。#771
(JRuby) 名前空間付きの属性を含むXMLドキュメントを文字列でbuilderに追加しようとすると失敗する。#770
(JRuby) Nokogiri::XML::Document#wrapを使って生成したドキュメントに << でノードを追加しようとすると
undefined method `length' for nil:NilClassのエラーが発生する #781
(JRuby) 開いているファイルのデスクリプタを閉じようとすると、“bad file descriptor” が発生する。#495
(JRuby) 属性デコレータに関するJRubyとCRubyの非互換性 #785
(JRuby) DOCTYPE宣言内に内部サブセットを持たない(正しい)XMLをパースする際の問題 #547, #811
(JRuby) テキストにコロンを含むノードをパースする際の問題 #728
(JRuby) HTML文書のDOCTYPEを正しくパース #733
(JRuby) Builder で create_internal_subset を使った場合のXML出力にDOCTYPE宣言を含める #751
(JRuby) JRubyでのみ、 Builder でUTF-8テキストを #text で括る必要があった #784
機能
JRuby の1.9モードのサポートを大幅改善!イェイ!
バグ修正
JRuby Nokogiri の add_previous_sibling が以前は動いていたのに今は動かない(1.5.0 -> 1.5.1)。 #691 (ありがとう, John Shahid!)
JRuby バーションは URL が引数にあたえられると HTML ドキュメントを作れない。 #674 (ありがとう, John Shahid!)
JRuby バージョンは HTMLとして nil か “” が与えられると NullPointerException を投げる。 #699
JRuby 1.9 モードでエラー, uncaught throw ‘encoding_found’, が発生する。 #673
JRuby で US-ASCII にエンコードされた文字列が正しくないエンコードを返してくる。 #583
512 文字以上が与えられたときに XmlSaxPushParser が IndexOutOfBoundsException を投げる。#567, #615
Xpath を評価した結果、空の NodeSet が帰ってくる場合に、NodeSet が持っている Document の decorate に失敗して例外が投げられる。#514
JRuby で xpath を namespace 付きで指定した場合に、エラーが発生する。pull request #681 (ありがとう, Piotr Szmielew)
JRuby で Nokogiri::XML::Node を継承したクラスを定義すると、namespace が表示されない。 #695
JRuby で RDF::RDFXML::Writer をインスタンス化しようとすると NAMESPACE_ERR (org.w3c.dom.DOMException) が発生する. #683
JRuby で xpath に namespaces を指定すると例外が発生する. #493
JRuby の Entity 解決は C version の Nokogiri と同じ結果にならないといけない。#704, #647, #703
機能
“nokogiri” コマンドに ‘–rng` オプションが与えられと、より詳しい説明を表示するようになった。 #675 (ありがとう, Dan Radez!)
‘-Werror=format-security` CFLAGを使っている hardened な Debian 系 Linux でのビルドをサポート #680.
pkg-config ありのシステム上でのよりよいビルドをサポート。 #584
複数の iconv がイストールされているシステムでのよりよいビルドをサポート。
バグ修正
DocumentFragment をベースにしてコメントノードを作ったときに Segmentation fault する。 #677, #678.
at() と search() メソッドで ‘.’ をxpathとして扱う。 #690
(MRI, Security) XML パース時のディフォルトのオプションを nonet に変更。これにより、ディフォルトではドキュメントパース時にネットワーク接続を行わないようにし、XXE 脆弱性に対応した。#693
パース時にネットワークに接続して外部のドキュメントを見にいかせたい場合には、以下のように ‘nonoet` オプションを設定する:
Nokogiri::XML::Document.parse(xml) { |config| config.nononet }
ここに、自分ならではの二重否定のジョークをうめこむとなおよし。
機能
jQuery のような “prefixless” CSS セレクタ, ~ や >, + をサポート。#621, #623. (ありがとう, David Lee!)
homebrew 0.9でのインストールを改善してみる。(iconv周り) パッケージ管理って便利じゃない?
バグ修正
カスタム xpath 関数が空の nodeset を引数に含む場合、segfault を起こす。 #634.
Nokogiri::XML::Node#css は、デフォルトの名前空間を持つXML文書に対して名前空間なしの属性セレクタをルールに含めても動作するようになった。
Marshalにおいて、XSLTのカスタムXPath関数への引数の渡し方(および戻し方)に関するバグを修正 #640.
Nokogiri::XML::Reader#outer_xml がJRubyで正しく動作しない #617
Nokogiri::XML::Attribute が JRuby 上で nil namespace を返す #647
Nokogiri::XML::Node#namespace= メソッドが JRuby 上で prefix
が無い namespace を設定できない #648
(JRuby) 1.9 モードで rake を実行するとデッドロックを引き起こす #571
HTML::Document#meta_encoding は誤った Content-Type (charset部)を含む文書で例外を起こさなくなった #655
コンテキスト付きフラグメントのパースで非サポートのエンコーディングが原因でRuby 1.8.7がSEGVを起こすのを修正 #643
(JRuby) XPathパースにおける並行実行時の問題 #682
古いRuby用にgemspecを修正しての再パッケージ. #631, #632.
新機能
XML::Builder#comment はコメントノードを作れるようになった.
CSSセレクター検索が名前空間付き属性に対応 #593
Java integration 機能が追加された. このバージョンから, XML::Document.wrap と XML::Document#to_java メソッドが利用可能。
‘nokogiri` CLIユーティリティがRelaxNGバリデーションに対応 #591 (thanks, Dan Radez!)
バグの修正
エンコーディング自動認識において発生しうるメモリリークを修正Tim Elliottに感謝!
homebrew がインストールされていたら、extconf は homebrew のパスを読む。
Java版の一貫性のない挙動 #620
JRuby (1.6.4/5) で Nokogiri::XML::Node を継承できなかった #560
XML::Attr ノードは子ノードとして追加できないので例外を出す #558
Node#add_next_sibling と Node#add_previous_sibling で隣接テキストノードをdupする条件を緩和 #595
Java版の一貫性のない挙動: 空の属性値をnilとして返していた #589
to_xhtml が要素が空のときに <p /></p> と誤ったタグを生成していた #557
Document#add_child が Node, NodeSet, DocumentFragment およびString を受け付けるようになった #546
Document#create_element が(“SOAP-ENV”のように)非単語構成文字を含む名前空間を認識するようになった. これは主に Builder を使う際に効いてくる. Builder はほぼすべてのものに Document#create_element を適用するためである #531
ファイルエンコーディングが効かなかった (1.5.0 / jruby / windows) #529
Java版において、<html>タグに含まれる名前空間定義を属性として返さなかった #542
Nokogiri 1.5.0で Bad file descriptor が発生していた #495
remove_namespace! がpure Java版で動かなかった #492
Javaネイティブ版でパースされたオブジェクトに対して ActiveSupport の .blank? メソッドを呼ぶと null pointer exception が発生していた #489
1.5.0 で正しい文字エンコーディングが仕様されなかった #488
XML Builder に生のXML文字列を渡した際の問題 (JRuby) #486
Nokogiri 1.5.0でXML生成が壊れていた (JRuby) #484
ルートノードを複数持つことを認めない #550
カスタムXPath関数を修正 #606 (Juan Wajnermanに感謝!)
Node#to_xml で :save_with が指定されている場合は上書きしないように修正 #505
Node#set をプライベートメソッドに (JRuby) #564 (Nick Siegerに感謝!)
C14nの整理と Node#canonicalize (Ivan Pirlikに感謝!) #563
註
1.4.7からの変更点を参照
新機能
各文書形式用のデフォルトのNode::SaveOptionsの組合せを定数化. (Node::SaveOptions::DEFAULT_{X,H,XH}TML)
バグの修正
JRuby版ではホワイトスペースの扱いに難があるため、XML出力(to_xml)において自動整形をデフォルトでは行わないように変更. #415
JRuby版でNodeのないNodeSetでNullPointerExceptionが発生するのを修正. #443
エンコーディング宣言のないHTMLファイルで部分的に重複したドキュメントが生成される問題を修正した. #478
<meta charset=“…”> を認識するようになった.
註
JRubyでの性能改善
1.4.4からの変更点を参照
バグの修正
Node#inner_textはnilを返さなくなった. (JRuby) #264
註
1.4.3からの変更点を参照
註
新しいピュアJavaバックエンドによりJRubyサポートを追加
廃止
Ruby 1.8.6は非推奨となった. インストールできるかもしれないが、正式なサポートは終了.
LibXML 2.6.16および古いバージョンは非推奨. インストールできない.
FFIサポートは削除された.
バグの修正
エンコーディング宣言のないHTMLファイルで部分的に重複したドキュメントが生成される問題を修正した. #478
ノート
このバージョンは、1.4.5と機能的に同じです
Rubyの1.8.6のサポートが復元されている
新機能
Nokogiri::HTML::Document#title アクセサメソッドでHTML文書のタイトルを読み書きできる
バグの修正
Node#serialize とその仲間達はSaveOptionオブジェクトを受け入れる
Nokogiri::CSS::Parser has-a Nokogiri::CSS::Tokenizer
(JRUBY+FFIのみ) 「弱い参照」はスレッドセーフになった. #355
HTML::SAX::Parserから呼ばれるstart_element()コールバックのattributes引数はHTML::XML::Parserによるエミュレートコールバックと同じく連想配列になった. rel. #356
HTML::SAX::Parserのparse*()メソッドはXML::SAX::Parser同様に渡されたブロックをコールバックするようになった.
HTMLパーサーのエンコーディング判定をlibxml2の仕様を超えて拡張・改善した. (XML宣言のencodingを認識、非ASCII文字出現後のmetaタグも文字化けを生じずに反映)
Document#remove_namespaces! は名前空間付きの属性に対応した. #396
新機能