KENT-WEB サポートコーナー 過去ログ [ 0128 ]


記事No: 14027
投稿日: 2015/05/22(Fri) 16:17:36
タイトルpostmailのUnicode::Japaneseについて
ID情報: zurutto
投稿者: ずるっと
URLhttp://exec.que.jp/postmail3.1/postmail.cgi

リクエスト掲示板の方に書き込んでしまいましたので、こちらに改めて書き込みさせていただきます。

postmailの最近のバージョンではUnicode::Japaneseを使って文字コード変換を行うように変更されているようですが、lib以下に同梱されているUnicode::JapaneseではFreeBSD(OSバージョンは8〜10で確認。sjis、utf8版とも。perlは5.8.9と5.16.3で確認)で正しく文字コード変換できず、結果、postmail.cgiが暴走してメールの送信不能・CPU使用率100%の状況になってしまいます。

同梱のUnicode::Japaneseでの文字コード変換不具合はRedhatEL5.11でも発生しており、こちらは変換元文字コードがutf8の場合だけは正しく文字化けなく変換されていました。

FreeBSDではUnicode::Japaneseを独自にインストールして、それを使った場合は正常動作しております(同梱のものとバージョンは同じです)。
Unicode/Japanese.pmにはバイナリーも含まれており、環境毎にコンパイルしたもので無いと正常に動作しないのではないかと思われます。

とりあえず、こちらではinit.cgiの末尾を
# 文字コード変換モジュール
if ($] < 5.006 || $^O eq 'freebsd') {
require './lib/jacode.pl';
$cf{conv_pm} = 'j';
} else {
のように書き換えてFreeBSDでは jacode.pl を使うようにしてしのいでおります(FreeBSDで無くともダメなケースがあるようですが。。)。

※URLに記載したものは上記の修正を行ったものです。

宜しくお願いいたします。


記事No: 14030
投稿日: 2015/05/24(Sun) 19:27:32
タイトルRe: postmailのUnicode::Japanese
ID情報: kent
投稿者: KENT

> リクエスト掲示板の方に書き込んでしまいましたので、こちらに改めて書き込みさせていただきます。
>
> postmailの最近のバージョンではUnicode::Japaneseを使って文字コード変換を行うように変更されているようですが、lib以下に同梱されているUnicode::JapaneseではFreeBSD(OSバージョンは8〜10で確認。sjis、utf8版とも。perlは5.8.9と5.16.3で確認)で正しく文字コード変換できず、結果、postmail.cgiが暴走してメールの送信不能・CPU使用率100%の状況になってしまいます。
>
> 同梱のUnicode::Japaneseでの文字コード変換不具合はRedhatEL5.11でも発生しており、こちらは変換元文字コードがutf8の場合だけは正しく文字化けなく変換されていました。
>
> FreeBSDではUnicode::Japaneseを独自にインストールして、それを使った場合は正常動作しております(同梱のものとバージョンは同じです)。
> Unicode/Japanese.pmにはバイナリーも含まれており、環境毎にコンパイルしたもので無いと正常に動作しないのではないかと思われます。
>
> とりあえず、こちらではinit.cgiの末尾を
> # 文字コード変換モジュール
> if ($] < 5.006 || $^O eq 'freebsd') {
> require './lib/jacode.pl';
> $cf{conv_pm} = 'j';
> } else {
> のように書き換えてFreeBSDでは jacode.pl を使うようにしてしのいでおります(FreeBSDで無くともダメなケースがあるようですが。。)。
>
> ※URLに記載したものは上記の修正を行ったものです。
>
> 宜しくお願いいたします。

ご報告ありがとうございます。
Unicode::Japaneseの(環境による)不具合は初めて聞きました。
Unicode::Japaneseは、速度も遅いようですので、次のバージョンアップにて、対応を考えます。
ご指摘を感謝します。


記事No: 14031
投稿日: 2015/05/25(Mon) 12:57:05
タイトルRe^2: postmailのUnicode::Japanese
ID情報: zurutto
投稿者: ずるっと
URLhttp://exec.que.jp/postmail3.1/postmail.cgi

ご対応をご検討いただけるとのことありがとうございます。

せっかくですのでもう少し調べた詳細を書いておきます。
(テスト用サンプル)
#! /usr/bin/perl
use lib './lib';
require Unicode::Japanese;
$kcode = 'euc';
$str = 'あいうえお';
print Unicode::Japanese->new($str,$kcode)->euc;

実行結果は
??「うえお?
のように中途半端に化けます。
最初の書き込みでFreeBSDとRedhatで異なるようなことを書きましたが、再度確認したところ症状は同一でプログラムの文字コードがJISで$kcodeが'utf8'の"場合だけ文字化けしない"で変換されました。
かなりわけが分からない状況ですが、これは変換対象の文字に依存するのかも知れません。
(それぞれの環境でシステムにインストールしたUnicode::Japaneseでは文字化けせず)

文字化けが発生している際にpostmail.cgiが無限ループに陥る箇所ですが、add_encoded_wordというサブルーチンの中のwhile (1) のループ内で、ループを脱出する条件が成立しなくなってしまっているようです。
この部分の処理も少し危うい気がします。

宜しくお願いいたします。


[検索ページ] [掲示板]