clq
浏览(2) +
2006-12-01 21:36:44 发表
编辑
关键字:
因为历史的原因兄弟我一直在使用 mail2000 控件,不过这个控件可真是满身bug,兄弟我是加了很多修改的.本来我应该回馈给 mail2000 邮件列表/社区 但它的人太少,俺的英文又没过4级,这个...这个...信心不足够.暂时贴在这里吧.英文好的兄弟请帮忙转贴吧!
clq
mail2000 对一行超长的解码是会崩溃的,因为它先假设了一行不超过80个字符!没错,协议是这样规定的,但有sb发超过这个长度的怎么办?内存访问异常呀!我的修改如下:
while nPos >= 0 do
begin
DataLine(Data, DecoLine, nPos);
//clq del 奇怪 132 是怎么来的//GetMem(Buffer, 132);
//这样肯定是错的,应该先分配足够的内存//它可能先假设了每行的字符不能大于多少
//GetMem(Buffer, 132);
GetMem(Buffer, Length(DecoLine)+1);//给结束符一个位置
//clq end;
Size := DecodeLineBASE64(TrimSpace(DecoLine), Buffer);
Buffer[Size] := #0;//clq add//参见对 'B': 我解码
if Size > 0 then
FDecoded.Write(Buffer^, Size);
FreeMem(Buffer);
end;
大家只要查找其中的 132 就可以了.
这是 base64 编码的,还有另外一个.如下:
while nPos >= 0 do
begin
DataLine(Data, DecoLine, nPos);
//clqGetMem(Buffer, 80);
GetMem(Buffer, length(DecoLine));//clq//参见 'U': 形式的解码//不能假设每行只有 80 个字符
Size := DecodeLineUUCODE(TrimSpace(DecoLine), Buffer);
FDecoded.Write(Buffer^, Size);
FreeMem(Buffer);
end;
查找其中的 80 就行了,它假设每行不超过 80 个字符....... :(
NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.