
Encode 2.50 2.51 を Release しましたのでお報せします。
一番の変更点は、(de|en)code
元のtaintednessが変換後も保存されること。taintedessに関しては
も参考のこと。
変換結果のtaintednessがどうなるかというのは、非built-in以外はまちまちで、ざっと調べただけでもData::Dumper
やYAML
は反映する一方、MIME::Base64
やJSON::XS
は無視するといった具合で、Encode
も後者だったのですが、「言い訳無用」というお叱りを受けまして、「おっしゃるとおり」とばかり速攻で直した次第です。
とはいっても、(de|en)codeというのは文字コード別に実装方法がまちまちで(そうならざるを得ないのはソースを読んでいただければ)、それごとにtaintednessの伝播の方法も異なってきます。Encodeの場合、XSで変換するものとPure Perlでやっているものと主に二通りあったわけですが、前者の方が実は簡単で
if (SvTAINTED(src)) SvTAINTED_on(dst);
と見た目そのままなのに対し、後者は
my $dst = substr($src, 0, 0);
という方法でflagのみ取ってくるという方法をとっています。標準モジュールのScalar::Util
にもtainted()
はあってもtaint()
がないのはこういう時にちょっこと不便ですね。かといってこの場合CPANのTaint::Util
は使えませんし。簡単にuntaintできないのは合目的ではありますが…
ところでこの機構、JavaScriptとRubyにも存在します。前者の方は使いどころがいまいちはっきりせず、実際ほとんど使われていないのですが、Rubyの方はヴァージョンが上がる毎に進化していて、
p ENV['PATH'] p ENV['PATH'].tainted?
であれぇ、っとなったのですが、1.9以降では
p ENV['PATH'].tainted? p ENV['PATH'].encoding p ENV['PATH'].encode('UTF-8').tainted?
で、きちんとflagが伝播しているのを見てrubyえらいなーと思ったのもつかの魔、
p ENV['PATH'].tainted? p ENV['PATH'].to_sym.to_s == ENV['PATH'] p ENV['PATH'].to_sym.to_s.tainted? p ENV['PATH'].untaint
というのを見てずっこけた次第。
Encodeがtaint modeの伝播をサポートしていなかったことが今まで俎上に上がらなかったこと自体、Taint modeが使いづらくてわかりづらい割に肝心の時に役に立たない、というかCなどで拡張する際には個別対応せざるを得ないという点で時代遅れなのかもしれません。とはいえ時代遅れだとしたらなおのこそDWIMに行きたいもの。モジュール書きのみなさまにおかれては、taint checkのこともたまには思い出してくださいということで。
=head1 CPAN index User: DANKOGAI (Dan Kogai) Distribution file: Encode-2.50.tar.gz Number of files: 205 *.pm files: 26 README: Encode-2.50/README META-File: Encode-2.50/META.json META-Parser: Parse::CPAN::Meta 1.4404 META-driven index: no Timestamp of file: Fri Apr 26 18:36:59 2013 UTC Time of this run: Fri Apr 26 18:38:37 2013 UTC =head1 Changes $Revision: 2.50 $ $Date: 2013/04/26 18:30:46 $ ! Encode.xs Unicode/Unicode.xs lib/Encode/Unicode/UTF7.pm lib/CN/HZ.pm lib/Encode/GSM0338.pm t/taint.t Addressed: Encode::encode and Encode::decode gratuitously launders tainted data Taintedness now propagates as it should. https://rt.cpan.org/Ticket/Display.html?id=84879 ! encoding.pm Addressed: 5.18 deprecation https://rt.cpan.org/Ticket/Display.html?id=84709 ! bin/piconv Applied: Update piconv documentation https://rt.cpan.org/Ticket/Display.html?id=84695
追記 2013.04.30:MS Cでコンパイルしない問題に対処した2.51をリリースしました。他はほとんど変化ありません(Strawberry Perlは2.50も無問題でした)
=head1 CPAN index User: DANKOGAI (Dan Kogai) Distribution file: Encode-2.51.tar.gz Number of files: 206 *.pm files: 26 README: Encode-2.51/README META-File: Encode-2.51/META.json META-Parser: Parse::CPAN::Meta 1.4404 META-driven index: no Timestamp of file: Mon Apr 29 22:21:31 2013 UTC Time of this run: Mon Apr 29 22:23:20 2013 UTC =head1 Changes $Revision: 2.51 $ $Date: 2013/04/29 22:19:11 $ ! Encode.xs Addressed: Encode.xs doesn't compile with Microsoft C compiler https://rt.cpan.org/Public/Bug/Display.html?id=84920 ! MANIFEST Addressed: t/taint.t missing https://rt.cpan.org/Public/Bug/Display.html?id=84919
Dan the Encode Maintainer
このブログにコメントするにはログインが必要です。
さんログアウト
この記事には許可ユーザしかコメントができません。