▼ 2007/5/12 (土) 18:02:15 ラスティブ | |
Mozilla/5.0 (X11; U; SunOS sun4u; en-US; rv:1.7) Gecko/20051027 |
[4815] UTF-7 の読み取りミス(?) について |
>>data:6053
▼ はこねさん
> 以下の文字列のファイルを開こうとすると UTF-7 と
> 判定されて文字化け(?)してしまいます。
> ・・・(中略)・・・
> d+hG5ugj9r46NRQqEZMyppcHgFCNCjOO9VCdsCMs6tjoJ6mkE66befz58aqNKRHQ
>
> ちなみに、1.5.10.0 では正常に開けました。
暫定的にですけれど、自分なりに見つかった問題を報告します。
charcode.cpp の UTF-7 判別関数に怪しげな部分が…
修正範囲)
charcode.cpp リビジョン 1081 の 342 行から 352 行のところ:
342: nret = CheckUtf7SetBPart( base_ptr, end_ptr-base_ptr, ptr );
343: // ここで, [特有バイト数] := [実際に調査されたデータ長] - [不正バイト数]
344: num_of_base64_encoded_bytes += (ptr-base_ptr) - nret;
345:
346: // ptr == end_ptr が成り立つ場合, CheckUtf7SetBPart() 関数の特性により,
347: // 単純に不正バイト数 := ptr-base_ptr(読み込んだバイト数)となる恐れがあるので,
348: // 条件 ptr == end_ptr が成り立つときはループ脱出.
349: if( end_ptr <= ptr ){
350: break;
351: }
352: nlostbytes += nret;
修正方法)
上から順に
nret = CheckUtf7SetBPart( base_ptr, end_ptr-base_ptr, ptr );
消す // ここで, [特有バイト数] := [実際に調査されたデータ長] - [不正バイト数]
消す num_of_base64_encoded_bytes += (ptr-base_ptr) - nret;
消す
消す // ptr == end_ptr が成り立つ場合, CheckUtf7SetBPart() 関数の特性により,
消す // 単純に不正バイト数 := ptr-base_ptr(読み込んだバイト数)となる恐れがあるので,
消す // 条件 ptr == end_ptr が成り立つときはループ脱出.
消す if( end_ptr <= ptr ){
消す break;
消す }
書足す // ptr == end_ptr が成り立つ場合, CheckUtf7SetBPart() 関数の特性により,
書足す // 単純に不正バイト数 := ptr-base_ptr(読み込んだバイト数)となる恐れがあるので,
書足す // 条件 ptr == end_ptr が成り立つときはループ脱出.
書足す if( end_ptr <= ptr ){
書足す break;
書足す }
書足す // ここで, [特有バイト数] := [実際に調査されたデータ長] - [不正バイト数]
書足す num_of_base64_encoded_bytes += (ptr-base_ptr) - nret;
nlostbytes += nret;
ちゃんとしたパッチが出せなくてすみません。
# 忘れまいと
# 自分でコメントを入れたそばから・・・ あぁあぁ orz
|
|