漢字ファイル名のイメージ| メイン |ハリー・ポッターと死の秘宝 Part1

イメージファイルと a tag

| コメント(0) | トラックバック(0)

引き続き MovableType4 のお話。

なぜか jpeg イメージファイルをアップロードすると「Invalid image file format.」と言われてアップロード出来ない現象に遭遇。

最初はアップロードしようとしたイメージが壊れている、とか、フォーマットが CMYK なのか、と思っていろいろと調べたけど、全く正常な(?) jpeg ファイル。

これにはかなり参りましたよ。

で、結局ソースファイルを追いかけて調査。その結果わかったのが…MT/CMS/Asset.pm(1162) 以降の以下の部分。

## Read first 1k of image file
binmode($fh);
seek($fh, 0, 0);
read $fh, $data, 1024;
seek($fh, 0, 0);

## Using an error message format that already exists in all localizations of Movable Type 4.
return $app->error($app->translate("Saving [_1] failed: [_2]", $local_base, "Invalid image file format.")) if
    ( $data =~ m/^\s*<[!?]/ ) ||
    ( $data =~ m/<(HTML|SCRIPT|TITLE|BODY|HEAD|PLAINTEXT|TABLE|IMG|PRE|A)/i ) ||
    ( $data =~ m/text\/html/i ) ||
    ( $data =~ m/^\s*<(FRAMESET|IFRAME|LINK|BASE|STYLE|DIV|P|FONT|APPLET)/i ) ||
    ( $data =~ m/^\s*<(APPLET|META|CENTER|FORM|ISINDEX|H[123456]|B|BR)/i )
    ;

この処理は InternetExplorer6/7 の脆弱性に対応したものみたいで(コメントがそんなことを書いてある)、用は読み込もうとしたファイルの先頭 1024byte に html のタグがあると、イメージファイルではなく html として認識してしまうため、らしい。

で、ハイライトした箇所で'<A'があるとエラーになるようになっていて…偶然そのバイト列があってしまった、と。

う~~ん、やりたいことはわかるんだけど…これはなぁ。さすがに困ってしまったよ(^^ゞ

結局圧縮率を変更して、該当バイト列が出てこないようにしてしのいだけど…さてはて、どうしたものでしょうかね。

該当部分を

m/<(HTML|SCRIPT|TITLE|BODY|HEAD|PLAINTEXT|TABLE|IMG|PRE|A)(\s+|>)/i

とかにするくらい?

No TrackBacks

TrackBack URL: http://denchu.jp/cgi-bin/movabletype/mt-tb.cgi/56

コメントを投稿する