ex0ch icon indicating copy to clipboard operation
ex0ch copied to clipboard

判明しているex0chのFastCGI化にあたっての障害

Open PrefKarafuto opened this issue 1 year ago • 1 comments

前提

FastCGIを導入するにあたっては、FCGIモジュールのインストールが必要となる。

FCGIの問題点

Unicode非対応

https://metacpan.org/release/BOBTFISH/FCGI-0.71_01/view/FCGI.PL より翻訳

FCGI.pm は Unicode を認識せず、0x00 ~ 0xFF の範囲内の文字のみがサポートされます。 0xFF より上の文字を含む文字列を出力しようとすると、例外が発生します: (F) Wide character in %s.

以前 (FCGI.pm <= 0.68) の誤った動作を望むユーザーは、次のコマンドを使用して例外を無効にできます。 bytesプラグマ。

{
use bytes;
print "\x{263A}"; }

binmodeによるPerl IOレイヤーの適用ができない

https://stackoverflow.com/questions/5005104/how-to-force-fastcgi-to-encode-form-data-as-utf-8-as-cgi-pm-has-option より翻訳

gitweb: CGI::Fast 使用時の UTF-8 エンコーディングの修正 署名者: Julien Moutinho

FCGI ストリームは古いストリーム API を使って実装されています: そのため、binmode() を使って PerlIO レイヤーを適用しても効果がありません。 このパッチの解決策は、FCGI::Stream::PRINT 関数を再定義して出力エンコーディングに UTF-8 を使用するようにすることです。ただし、git_blob_plain() や git_snapshot() ではまだ生のバイナリモードで出力する必要があります。

この問題と解決策は 2012 年に報告されています:

つまり、FastCGIを有効にする場合に限って

use open IO => ':encoding(cp932)';
binmode(STDOUT,':encoding(cp932)');

use open IO => ':std', ':encoding(UTF-8)';

などと記述してあっても文字化けが起こりうる。
一応、各ファイルストリームや標準入出力に対して逐一decodeやencodeすることで回避可能だが、単純に手間なのと、入れ忘れによる文字化けなんかがあると面倒くさい。

PrefKarafuto avatar May 10 '24 05:05 PrefKarafuto

ex0ch側の問題

新しく追加された機能に関して、変数の初期化が完全でない箇所がいくつかある。

PrefKarafuto avatar May 10 '24 06:05 PrefKarafuto

FCGI側の問題は解決

ex0ch側 bbs.cgi: Use of uninitialized value in string ne at ./module/slip.pl line 341. bbs.cgi: Argument "544e63e7" isn't numeric in addition (+) at ./module/slip.pl line 370. bbs.cgi: Use of uninitialized value in string eq at ./module/post_service.pl line 232. bbs.cgi: Use of uninitialized value in string eq at ./module/post_service.pl line 232. bbs.cgi: Filehandle $fh opened only for output at ./module/log.pl line 146. bbs.cgi: Use of uninitialized value in split at ./module/post_service.pl line 627. bbs.cgi: Use of uninitialized value $nusisid in string ne at ./module/post_service.pl line 235. bbs.cgi: Use of uninitialized value $ninLv in numeric ge (>=) at ./module/post_service.pl line 261. bbs.cgi: Use of uninitialized value in string eq at ./module/user.pl line 244. bbs.cgi: Use of uninitialized value $nusisid in string eq at ./module/post_service.pl line 307.

PrefKarafuto avatar May 19 '24 16:05 PrefKarafuto

一通り修正完了

PrefKarafuto avatar May 20 '24 04:05 PrefKarafuto