Hatena::ブログ(Diary)

岩本隆史の日記帳

2009-10-06

htmlspecialcharsに関する残念なお知らせ

htmlspecialcharsのパッチ私案」に書いた件、バグレポートを出してみましたが、「すでに同じバグレポートがあるだろ」という理由により、あえなく却下されました。

せめて先方が「同じ」とみなしているレポート番号ぐらいは示してほしくて、そのようにコメントしましたが、お相手のjaniという人は気難し屋のようで*1、教えてもらえる気がしません。

私なりに探した結果、下記のレポートがくさいように感じました。

「不正なUTF-8シーケンスの場合に空文字列を返すのはおかしい」というレポートで、私のそれとは正反対どころか、Shift_JISにもEUC-JPにも触れられていない別個のものです。もちろん、私はレポート送信前に読み、別個と判断しました。

とはいえ、これぐらいしか似たようなレポートが見つかりません。他にあるようでしたら、ぜひお教えください。

#43896 についたコメントを見ると、どうも「PHPの利用者が自分で対処するのが正解」という流れになっているようです。もし、その基準にもとづいて私のレポートが却下されたのであれば、今後も htmlspecialchars の文字エンコーディング妥当性チェックが改善される見込みは薄いでしょう。残念ながら、自衛するしかないと思われます。

追記(2009-10-07)

PHPの開発陣には期待できないことが分かったので、Suhosinにfeature wishesとしてメールしてみました。

Suhosinについては下記の記事が参考になります。

もしリプライがなければ、私はもうお手上げです。私の書いたパッチは自由に使っていただいてかまいませんが、保守するつもりはありませんので、ご了承ください。ここから先は、PHPを愛している方たちにおまかせします。

追記その2(2009-10-08)

日本語のブログのURL書いて「危ないです」というのも、"I don't know whether it is useful though :)"なんて日本的謙遜も、伝わらなくても仕方ないかと

はてなブックマーク - @akky のはてなブックマーク - 2009年10月8日

ありがとうございます。このようなご意見を待っていました。

id:AKIMOTOさんに限らず、私のレポートの仕方が悪かったせいだと思われる方、ぜひ本件を引き継いでいただけないでしょうか。私の望みは htmlspecialchars の文字エンコーディング妥当性チェックが改善されることであって、どなたかが達成されるのであれば、それで万々歳です。採用されるレポートの書き方もそれで分かるでしょうし。

「いや、お前のレポートのせいで改善される見込みがなくなったんだ、余計なことをするな」といわれるのであれば、「それは残念です」とお答えするほかありません。

追記その3(2009-10-08)

ご指摘ありがとうございます。生かせるものは生かしたいと思います。

私は今回の件については、意図が伝わらなかったせいで却下されたのではなく、伝わったうえで却下されたのだと思っています。PHP開発陣の総意は「htmlspecialchars にはバリデーションの責務はない」というもので、その立場に立てば、記述が丹念であろうとなかろうと、過去に似たようなバグレポートがあろうとなかろうと、私のレポートを却下して当然です。

レポートを通じて気づかされたPHP開発陣の総意、つまりPHPの仕様は、私には「残念」なものでした。記事タイトルの「残念」には、そういう意味が込められています。テンプレートエンジンなんだから、validateしたっていいと思うんだけどねえ。PHPの残念さを見くびってました。

追記その4(2009-10-08)

なんども追記すみません。私なりに良案が浮かんだので、別のバグレポートを提出してみました。

ポイントは:

  • セキュリティの話にはアレルギーがありそうなので、純粋なバグレポートにした
  • 相手の言質(ChangeLog)を利用した
  • 冗長なUTF-8については諦めた(仕方ない)

の3点です。

これならすぐには却下されない(ひょっとしたら採用される)と思うんですが、どうなるでしょうか。

*1:OS欄に「All」と書いてあるレポートに対して、毎度「AllというOSはない」と返しているところから、そう感じました。もし「*」と入力するのが正解なのであれば、レポートフォームにそう注意書きしときゃいいのにね。

yohgakiyohgaki 2009/10/07 15:56 Janiさんはいつもあんな感じの人です。文字エンコーディングの問題について深く理解している方でも無いです。

文字エンコーディングのチェックは入力で完璧にするのが筋なので出力時のチェックはフェイルセーフとは思っています。ただ、PHP 5.3の位置づけからいうと少なくとも冗長なエンコーディングに対して脆弱であるのは問題だと思います。どうして理解されないのか、理解できないです(苦笑

IwamotoTakashiIwamotoTakashi 2009/10/07 20:53 コメントありがとうございます。問題を深く理解していない方に却下されたのであれば、ますます「残念」といわざるをえないですね。似たようなバグレポートを何度も処理するより、さっさと直したほうがリソースの節約になると私は思うんですが、PHPの開発陣はそう思わないんでしょうね。

AKIMOTOAKIMOTO 2009/10/08 18:07 > PHP開発陣の総意は「htmlspecialchars にはバリデーションの責務はない」

公式のアナウンスでしょうか?

> レポートを通じて気づかされたPHP開発陣の総意

もし言葉で確認されていないのであれば、「気づかされる」というのも日本的な感じがします。

そして、そういう背景・姿勢が問題なのであれば、なおさら「『htmlspecialchars にはバリデーションの責務はない』とするPHPの公式ポリシーが問題である。他のウェブ開発言語では、Perlはこう、Pytonはこう、… これによって引き起こされる問題とその想定される被害額はこう、…」といったような論陣を張らないと、今回のようなパッチが単発で受け入れられるような気はしないのですが。

hasegawayosukehasegawayosuke 2009/10/08 18:09 とりあえず、Suhosinの人には伝わったです。http://twitter.com/i0n1c/status/4705129319

IwamotoTakashiIwamotoTakashi 2009/10/08 19:12 AKIMOTOさん:

> 公式のアナウンスでしょうか?

いえ、下記の議論を読んでの推測です。
http://bugs.php.net/bug.php?id=43896
http://news.php.net/php.internals/34990

> そして、そういう背景・姿勢が問題なのであれば……

(私の推測する)PHP開発陣の総意、および、Suhosinができた経緯を見て、「いくら論陣を張ってもこの仕様が変わることはない」というのが私の見立てです。悲観的に過ぎるようですが、ほかのPHPユーザも、あまつさえコミッタだって、「言ってもムダだ」と思っているからこそ動かないわけですよね? そういう言語だと思って付き合う(または避ける)しかないんだと思っています。

hasegawayosukeさん:

お伝えいただいてありがとうございます。(メール読まれてなかったのか…)

今後の成り行きに期待してみます。

co3kco3k 2009/10/09 04:42 ごめんなさい! 追記その 4 に気づかず、
http://marc.info/?l=php-internals&m=125503005412795&w=2
で援護射撃という余計なことをしてしまいました。。。
規模は小さいですが同じ OSS 開発者として、今回のような成り行きになるのは非常に悲しいなと感じ、少しでも事態がうまく運ぶようにと思っての行動でした。ご迷惑になるようでしたら本当に申し訳ないです。

IwamotoTakashiIwamotoTakashi 2009/10/09 10:43 いえいえ、迷惑なんてとんでもないです。ありがとうございます。空白文字がちぐはぐだった件、最初のレポート分のパッチも修正しました。

Kenji_sKenji_s 2009/10/09 11:14 すでにご存しかもしれませんが、以下のような記事も出ています。

http://d.hatena.ne.jp/matarillo/20091008/p2

この問題については、せっかくもりあがってきましたので、みんなで協力して PHP をよい方向へ持っていければと思います。

IwamotoTakashiIwamotoTakashi 2009/10/09 11:32 はい、トラックバックをいただいたので読んでいました。

Rubyのまつもとさんがおっしゃる通り、PHPでのプログラミングは落とし穴がたくさんあるので難しいと思っています。
http://www.rubyist.net/~matz/20080129.html#p02

今回の件も(小さいながら)落とし穴のひとつで、誰かがふさぐよう提案しないと、ずっと放置されたままだったはずです。初心者向けといわれているPHPのような言語こそ、積極的に穴をふさいでいくべきだと思っています。

noricyannoricyan 2009/10/09 11:32 対応した新しい関数としてなら通るかも。

A-xtuA-xtu 2009/10/09 20:53 なんだか、最初のイシューが対応されてるっぽくないですか?

IwamotoTakashiIwamotoTakashi 2009/10/10 02:00 リプライが遅くなってすみません。A-xtuさんのおっしゃる通り、最初の分を対応していただけました。

A-xtuA-xtu 2009/10/10 14:23 おお、それはよかったですね。
であれば、対応していただけた方に感謝のメールを送られることを勧めます。ケースがクローズするとコメントをできないようなので。
あと、僭越ながら Jani さんにも感謝のメールを送ると良いと思われます。Jani さんの対応はたしかにつっけんどんながらも、文章そのものはとても丁寧かつ紳士的です。「:)」なんていう失礼なポストにそこまでの返事をいただけたことに感謝すべきです。
ニッポンの OSS コミュニティの誇りを捨てないでくださいね。

IwamotoTakashiIwamotoTakashi 2009/10/10 21:33 うーん。メールまで送る気にはなれないのが正直なところです。レポートを受け付けているわけですし、バグだと思えば修正するのが当然なんじゃないですかねえ。

「ニッポンの OSS コミュニティの誇り」については、すみませんが、よく分かりませんでした。仕事でしかたなくPHPを使っている身なので、「バグがあれば潰してほしい」以上の感情はないんですよね。(プライベートではPHPの使用を避けています)

時系列的には「徳丸さんやt_komuraさんの日記を読んだ → PHPのコードを読んで、意外と簡単に直せそうだと思った → パッチの私案を書いた → 本家に提案してほしいというコメントがあった → どうやって提案したらいいのか分からなかったので、とりあえずバグレポートを書いた → rejectされた → それがPHPの仕様っぽいから残念に思った → そのまま日記に書いた」というだけのことです。

ついでなので書いておきますが、「効果的なバグレポートの書き方」とか、「異文化コミュニケーションの難しさ」とか、「マルチバイト圏 vs. 非マルチバイト圏の戦い」とかいう話にはあまり興味がないです。私が興味があるのは、たぶん「PHPという言語そのもの(おもにその残念さ)」なんだろうと思います。

nonamenoname 2009/10/11 17:03 対応お疲れ様でした。
ところで、読んでいて突っかかったので長文になりますがコメントさせてください。
>バグだと思えば修正するのが当然
岩本さんがPHPを好きで使われていないのは分かりました。なぜまつもとさんのURLを出してきたのかも同時に分かりました。
仕事で使わされる残念な言語に外国語でわざわざバグレポートしたのに残念な反応をされた。その努力は大変なものだったと思います。
しかし、PHPはオープンソースプロジェクトです。企業の製品のように、仕事でやっているのではありません。
開発に縛られているのでもなく、給料を貰っているわけでもありません(講演料やコンサル料等は別にして)。ただ働きです。
空いた時間を見つけて参加しているだけです。バグだって直さなくてもいいんです。
直した所でお金がもらえるわけでもないし、別の人がチョチョイとやってくれるかもしれない。時間も浪費する。
でもそれでは駄目だと思う心あって、直されるんだと思います。そういう点でWindowsのセキュリティフィックスとは違うはずです。
感謝のリプライまでは不要でしょうが、修正して当然という考えには同意できません。
興味がないとはいえ、あまりに冷たすぎます。開発者の立場なら、きっとがっかりすると思います。
PHPを何か好きなOSSのもの、gcc、Perl、Ruby、PostgeSQLなどに置き換えて再度考えてみて下さい。
プログラマでもない第三者がゴチャゴチャ言って申し訳ありませんが、これだけはどうしても伝えたいと思ったので。

IwamotoTakashiIwamotoTakashi 2009/10/11 18:40 「同意できません」といわれても、私もnonameさんのご意見に同意できないので、「そうでしょうねえ」と思うしかありません。あれですか、世の中のすべての人間が自分と同じ意見でないと気に食わない感じですか?

nonamenoname 2009/10/11 19:49 なぜそんなに怒っていらっしゃるのですか?
何か失礼なことを言いましたか。そうならば謝罪します。そんな意図はありません。
念のため言っておくとtsやA-xtuとは別人ですし、このブログに来たのは初めてです。
どこが同意できなかったかだけでも教えて頂けませんか。

IwamotoTakashiIwamotoTakashi 2009/10/11 21:36 怒ってはいませんよ。仮にPHPのコミッタが私のことを冷たい人間だと思ったからといって、それがnonameさんに何の関係があるのかさっぱり分からず、不思議に感じているだけです。おたがい時間の無駄だと思いますので、これっきりにしていただけませんか。

nonamenoname 2009/10/11 22:55 冷たすぎるという表現は不適切でした。失礼しました。
また、意見の押し付けのように書いてしまい申し訳ありませんでした。
確かに僕には何の関係もないです。でも、その一言(修正して当然)が引っかかったのも確かです。
岩本さんに考えがあってそう書いたのでしょうから、そう考えた理由(なぜ当然か)を知りたいのです。
そこで自分の考えをここに書きました。返信頂ければ岩本さんとの考えの違いを知ることができると思いました。
自分と同じ意見でないと気に食わないではなく、違う意見の方にもう少し詳しく尋ねたい、です。
理由も分からず意見だけ対立して名指しバッシング(A-xtuさんのtwitterの発言)でENDにしたくなかったので。

IwamotoTakashiIwamotoTakashi 2009/10/11 23:56 私はこれでも開発者のはしくれなんですが、もし自分の公開したソフトウェアにバグを見つけたという報告があり、それが実際にバグであって、簡単に直せそうであれば、直すのが当然だと思っています。他の開発者がどうかは知りません。

したがって私は、バグを直したからといって、感謝してほしいなどとはまったく思いません。好きで公開したソフトのバグを、好きで直しただけなんですから。むしろ使っていただいていることや、時間を割いてレポートしてくださったことに感謝すると思います。

空論だと思われると癪なので、本当は書きたくないことをあえて書きます。私は、自分の運営するWebアプリケーションの【仕様】を変更してほしいというリクエストを受けたことが何度かあります。必要な機能かどうか正直微妙だと思いましたが、わざわざ依頼いただいた心情を考慮し、対応することに決めて、深夜までかけて対応しました。その後、感謝のメールなどはありませんでしたが、私は報告者への感謝の念を覚えこそすれ、責める感情などはまったく持ちませんでした。

くり返しますが、他の開発者がどう思っているかは知りません。「お礼のメールくらい送れよ」と、moriyoshiさんやjaniさんが歯噛みしている可能性はあります。が、そんな可能性はほとんどないと、私は信じています。

moriyoshiさんがこの日記のブックマークコメントに「岩本さんありがとうございます」と書かれた意味、その意味がなぜ分からないんだあなたたちは! 外野でガタガタいうぐらいなら、さっさと俺の代わりに感謝メールを送ったり、donateしたりしてみろよ。

nonamenoname 2009/10/12 03:46 なるほど、とても良く分かりました。そこがどうしても知りたかった。
バグだと思えば修正するのが当然という言葉の意味は、すぐにバグすら直さないなんて残念すぎるとかではなく、使ってもらったりレポートされたりした時点で十分感謝に値している、強制されずに勝手に直した行為にまでわざわざ感謝する理由がない、ということだったのですね。
説得力のある、極めて真っ当な意見だと思います。
岩本さんのそのような姿勢を読み取れず、修正して当然という言葉が、単に(ソフトウェアに対してユーザが良く口にするように)バグくらいとっとと直すのが義務だと言っているかのように見えていました。何を抜かしやがる!と思われるでしょうが、言い訳すると、このバグ関連のページと関連するブログだけでは岩本さんがアプリ開発に対してそう(レポートを書いた時点で感謝の気持ちは伝わっているから、それ以上レポート者に感謝を強制するなと)考えていることまで把握できなかったのです。僕が両方とも感謝した方がよりベター(mustやshouldだとはちっとも思いません)だと考える節があるので、先入観もあったのだと思います。
岩本さんにそういう気持ちがあるとは知らずに、話の前提から誤った頓珍漢なコメントを書いてしまいました。同意できなくて当たり前です。 
失礼を重ねて本当にすみませんでした。また、貴重な時間を割いて丁寧にコメントして頂き有り難うございました。

IwamotoTakashiIwamotoTakashi 2009/10/12 12:26 感謝を他人に強制するって話がそもそもおかしいだろ。あんたらは俺の親か上司か友人か。36年も生きてるいいおっさんなんだから、今回の件がどれだけの感謝に値するかくらい自分で判断するっての。「ご尽力いただいた皆様、ありがとうございました」と日記に書くぐらいでいいと思ったからそうしたんだよ。

それじゃ不足だと思うんなら、俺にああだこうだいう前に、自分で補ってみたらどうだ。「岩本という奴、あいつ冷たい奴なんで、こういう対応しかできないんですよ。すいませんねえ。代わりに私から感謝しますね。少ないですけど、これ、感謝の気持ちです。何もいわずにお納めください」とかウェブマネー送るぐらいできんだろ。

バグと分かっていて、簡単に直せて、その時間もあるのに放置するのは、俺の美学に反するってこと。それが「直すのが当然」って意味だよ。そうじゃない開発者もいるのかもしれないが、そんな醜い奴らのメンテしてるソフトウェアなんて使いたくない。使わない自由くらい、俺にだってあるんだろ?

nonamenoname 2009/10/12 14:53 ちょっと待ってください。もしかして僕やA-xtuさんが感謝を強制しているとお考えですか。そんな訳ないじゃないですか。このコメントの中では、誰も感謝を強制していませんよ(この点は後に補足します)。感謝を強制したら不快にさせるということくらい、僕だって一応社会人のはしくれですから分かります。
日記に書くぐらいで不足だなんて言っていません。寧ろ正反対です。

僕が初めに言いたかったのは、修正するのが当然じゃない、バグは誰かの努力で直るんだということでした(話が逸れますが、某掲示板や質問サイトでも直せ直せや重い腰と動かせやと騒ぎ立てる人々をよく見ますし、直して当然と聞いて、そんな考えだったら残念だなと思いました。でも岩本さんはプログラマです。そんな訳がない、絶対理由があって当然と言っているはずだと思ったので聞きにきました。その理由は前のコメントではっきり分かりました)。しかしこれは岩本さんの、レポートを受け取ったら(内容はともかく)嬉しい、だからjaniさんやmoriyoshiさんに感謝は伝わっている(それでmoriyoshiさんはバグレポート最後やはてなブックマークに感謝のコメントを残した)、という考えを知らなかったから出た言葉です。知っていたらどうしてこんな恥ずかしいことがいえようか。
もっともっと感謝しろではなく、全く感謝していないのなら最低限は感謝して欲しいというのが僕の意見でした。岩本さんが十二分に感謝しているとはちっとも知らずに!

これは完全に予測ですが、A-xtuさんも此れに遠からず近からずの事を言いたかったのではないでしょうか(僕と同じく岩本さんが本当は凄く感謝していたことを知らずに感謝を勧めた)。だから、修正するのが当然なんじゃないですかねえと言われ早とちりして憤慨してしまってTwitterに暴言を書いた。その結果、岩本さんは俺に何が何でも感謝を強制しようとしていると読み取って怒った。
だとしたら僕は、A-xtuさんと同類ですから彼を非難することはできません。でも、岩本さんの今思っているような考えはまったく無いと伝えたい。

IwamotoTakashiIwamotoTakashi 2009/10/12 15:47 俺がバグを直す立場になるという可能性を考慮すれば、根拠なんか聞くまでもないことだろ。「直して当然」という発言は、自分にも跳ね返ってくるんだよ。あんたらはその可能性をまったく考慮していなかった。それが何よりも失礼なことだと思わないのか。「しょせんおまえは単なる利用者だろ」という侮蔑心がなかったか、いっぺん考えてみろ。

IwamotoTakashiIwamotoTakashi 2009/10/12 16:30 しつこくてすまないが、「強制」という言葉を先に持ち出したのはあなただろう。なぜ強制するだのされるだのという話になるのか理解できない、と私は言っているのだ。

「最低限の感謝」とは何だ? 具体的に教えてくれないか?

「最低限は感謝して欲しい」の「欲しい」とは単なる願望か? 私が断ったらどうする? A-xtu氏のように名指しで誹謗するのか? それとも「こいつには話が通じない」と諦めるのか?

nonamenoname 2009/10/12 22:35 前のコメントについて。
そうです。そこまで考えられませんでした。本当に大変失礼しました。
侮辱心などはありません。繰り返しになりますが、純粋に疑問点を聞きたかっただけです。でも岩本さんにそう思わせた原因は僕にあります。

後のコメントについて。
こちらこそすみません。
初めの強制は仕事に縛られずという意味です。次の強制は、俺の代わりに感謝メールを送ったりしてみろよとのコメントを見て、僕が(岩本さん感謝の気持ちを読み取れずに)感謝させようとし、それ以上強制するならお前からやれやと怒ったと解釈したから使いました。それ以上の意図はありません。
最低限の感謝とは要はありがとうのことです。例えば落し物を届けてもらったら感謝すると思います。それのことです。しなかったら感謝にならないし、それ以上はかえって迷惑かもしれない、なので最低限と書きました。
欲しいは自分の主張でした。願望は2の次です。断られたらどうするかは、ここまでのコメントの通りです。そもそも感謝を断る断らないはどうでも良くて、まずは自分の意見を明確にするのが目的でありました。でないと僕の意見のどこが岩本さんの意見と違うのか伝わらないと考えたからです。その意見が頓珍漢だったから、こんなに長くまでお付き合いさせてしまいました。
名指しで誹謗などしません。ここまでのコメントで誹謗したつもりはありません。誹謗すると自分自信が嫌いになるのでやれませんし、したところで誰の得にもなりません。また話が通じなくても、通じるようにもっと言い方を工夫することぐらいは出来ると思います。そうしたつもりになっていたので、これっきりにしていただけませんかと言われた時は焦りました。一般論で、通じない原因は大抵は少なからず自分にあると思っています。通じないたびにこいつは〜と思っていたら誰も理解できなくなってしまいます。

IwamotoTakashiIwamotoTakashi 2009/10/12 23:55 要するに、自分の知的好奇心を満たしたかっただけ、ということだな。それを「どうしても伝えたい」などとごまかすから、かえって相手に伝わらないんだ。最初から「単なる疑問なんですが」と書けば充分だったはずだろう。

nonameさん、あなたの粘り強さは美徳だ。謙虚なところも好もしい。せっかくの資質を、おのれの知的好奇心を満たすなどという卑小なことに浪費しないでもらいたい。もっと大きな目的や使命を果たすために使ったらどうなんだ。「今の世には感謝が足りない」と思うなら、他人に「感謝してほしい」などと青臭いことをいう前に、まずは自ら、相手が戸惑うぐらい感謝していけばいいじゃないか。そうやって周りを巻き込んでいくんだ。それができて初めて「社会人」なんじゃないのか。

私は、nonameさん以外の人に「面倒くさい奴だ」と思われるのを覚悟でこのコメントを書いている。そう思われても何の問題もないからだ。私には、もっと大きな使命があるんだよ。

nanashinanashi 2012/04/11 10:58 コメント全部読んだけどIwamotoさんの途中からのキレ具合がokashiiです。

うだうだ言ってないで感謝くらい示せばいいじゃない。
こんな記事の隅っこに書いたって(相手は知らないから)何も伝わらないよ。

A-xtuさんを擁護するわけじゃないが、Iwamotoさんだって修正して感謝のメールが届いたらうれしいだろ?
それだけの話だし、その程度の話だ。

IwamotoTakashiIwamotoTakashi 2012/04/12 01:54 だーかーらー、moriyoshiさんには個人的に6044はてなポイント送ったっつーの。外野がいちいちうるせーんだよ。

IwamotoTakashiIwamotoTakashi 2012/04/12 02:05 つーかさー、「うだうだ」とか「こんな記事」とか「だろ?」とか失礼な書き方する人間の言うことなんか、まともに聞けるわけねーだろ。「関係のない人間がしゃしゃり出るのはどうかと思いますが、感謝してあげてはいかがでしょうか」ぐらい書けないものかね。