登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> 程序员学前班[不再更新,只读] >> 主题: mail2000问题集     [回主站]     [分站链接]
标题
mail2000问题集
clq
浏览(2) + 2006-12-01 21:36:44 发表 编辑

关键字:

因为历史的原因兄弟我一直在使用 mail2000 控件,不过这个控件可真是满身bug,兄弟我是加了很多修改的.本来我应该回馈给 mail2000 邮件列表/社区 但它的人太少,俺的英文又没过4级,这个...这个...信心不足够.暂时贴在这里吧.英文好的兄弟请帮忙转贴吧!
clq
2006-12-1 21:42:40 发表 编辑

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 个字符....... :(


总数:1 页次:1/1 首页 尾页  
总数:1 页次:1/1 首页 尾页  


所在合集/目录



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1