歴史を引きずっているプロダクトだから、というのはわかるのだけれど、結構あちこち、杜撰なコードが残っていて、いささか心配になってくるMovableTypeなんですが、今度は、Perlのモジュールに不具合が。
コメントした時に、警告がどわーっと出るらしいのです。それは、びっくりしますよね。
まあ、どこが問題になっているのかは、どわーっと出てきているので、見て、直せばいいわけですが、こんなのが残っているっていうのは、格好悪すぎる......。
問題があるのは、lib/MT/Template/Tags/Asset.pm の422行目。で、見てみると、そもそも、自己矛盾というか、ロジック的にダメだめすぎて泣けてくるコードがありました。
my $so = lc($args->{sort_order})|| ...
おい。警告は、「lc()に初期化されてない変数が渡されている。」というものなのですが、見てのとおり、$soを初期化するのに、lc()の返り値が未定義であることを想定して書かれているじゃないですか。lc()の中身は、$args->{sort_order}だけなのだから、つまりはこれが未定義かもしれないことを判って書いているわけです。あーほーかー?
だったら、やるべきことは一つ。未定義の場合には未定義なりの処理を入れて、警告が出ないように書き換えればいいわけです。但し、未定義だと、||の後ろ側で初期化しなきゃいけないので、傷をあまりつけずに書き換えます。
--- lib/MT/Template/Tags/Asset.pm.orig 2013-11-07 13:04:27.000000000 +0900
+++ lib/MT/Template/Tags/Asset.pm 2014-01-16 09:45:05.000000000 +0900
@@ -420,7 +420,7 @@
else {
my $blog = $ctx->stash('blog');
my $so
- = lc( $args->{sort_order} )
+ = ( $args->{sort_order} ? lc( $args->{sort_order} ) : undef )
|| ( $blog ? $blog->sort_order_posts : undef )
|| '';
my $col = lc( $args->{sort_by} || 'created_on' );
たったこれだけで、警告は当たり前ですが出なくなります。どんな不具合がおきるか判らないので、現在、デバッグモードを有効にして走らせているということもあるんですが、この程度のものは、きちんと取ってからリリースして欲しいと思わなくはないです。しっかりしてくれ! > シックスアパート
コメント