NSXMLElement の addNamespace メソッドにおいて、レシーヴァがすでに同名のネームスペースを持っている場合、かつ Snow Leopard な環境で実行すると Segmentation fault で落ちる。以下のような HTML があるとする。
html 要素に epub という名前のネームスペースを持っている。次に、この HTML を読み込んで処理を行う以下のようなコードがあるとする。 test.html にはすでに
epub というネームスペースを持っているが、そこにさらに同名のネームスペースを追加する処理を行う。このコードは Lion では正常に動作するが、Snow Leopard で実行すると addNamespace: の部分で Segmentation fault で落ちる。addNamespace: のドキュメントによると、If the receiver already has a namespace with the same name, aNamespace is not added.とのことで「レシーヴァがすでに同名のものを持っている場合はネームスペースは追加されない」、つまり何もしないということだと思うんだが、そして Lion ではそのようになっているんだが、Snow Leopard では Segmentation fault で落ちる。うーん……。
したがって、Snow Leopard で実行される場合は
addNamespace: する前に同名のネームスペースがあるかどうかをチェックしておく必要がある。ある名前を持つネームスペースがあるかどうかは namespaceForPrefix: メソッドで調べることができる。
0 comments:
コメントを投稿