下面是上期项目的BUG管理,给大家借鉴一下,希望能够得到大家更多的意见,共同进步:
(file ref: G:/_P2004002/PI_smtpEX_item_forPLATO_cn.xls)
- [7] DNS协议BUG对应
- [5] 无法解决使用DNS的名称
[原因
新建了Lgetipnodebyname函数,但是因为没有指定query type,所以出错
対処方法
Lgetipnodebyname函数内,设置query type为T_A.
修正箇所
DNS/resolv.c(Lgetipnodebyname)]
- [5] 无法解决使用DNS的名称
- [7] SMTP协议BUG对应
mail_initEX中无法登录多个服务器
[原因
在仕样设计阶段遗漏了扩展版的新API中登录多个服务器
対処方法
要求开发方在扩展版API中也可以登录多个邮件服务器.
2004/3/11拿到开发方的修正版.
修正箇所
MAIL/mailmain.c(Lmail_initEX, Lmail_sendEX)]- [7] 不用mail_initEX登录邮件服务器,且DNS中没有指定MX记录时,无法发送邮件。
[原因
本来的设计应该为Mailmx.c的mail_get_server()函数找到的邮件个数作为返回值。但是正常时返回0
対処方法
修正为返回mail_get_server()找到的邮件个数
修正箇所
MAIL/mailmx.c(mail_get_server)] - [7] 不用mail_initEX登录邮件服务器,且DNS中没有指定MX记录时,无法发送邮件
[原因
因为mail_get_server找到的服务器列表不传递到调用元.
対処方法
将mail_get_server()的第2参数从addrinfo结构体的指针更改为指针的指针.
修正箇所
MAIL/mailmx.c(mail_get_server)] - [7] 如果继续发送邮件,则heap内存减少
[原因
mail_get_server中用CXMALLOC获取heap内存,但是没有是否其内存
対処方法
在函数内从heap内存获取临时使用的6byte内存是设计错误.
如果只要6byte左右,那么使用堆栈更好,所以更改为从堆栈获取.
修正箇所
MAIL/mailmx.c(mail_get_server)] - [7] port编号为异常值
[原因
mail_get_server中使用sprintf,但是没有对应COSXSTRLIB
対処方法
修改为事先准备SMTP用port编号的字符串,不使用sprintf
修正箇所
MAIL/mailmx.c(mail_get_server)] - [7] MX得到的邮件服务器地址为异常值
[原因
抽取了MX,但是从MX获取IP地址时,没有转换为endian
対処方法
修改为将_getlong函数获得的地址转换为endian
修正箇所
MAIL/mailmx.c(mail_mx, mail_mxEX)] - [7] 用原来的API的mail_init登录服务器后,如果用mail_initEX登录服务器则无法用mail_sendEX发送邮件
[原因
因为mscount这个外部变量用于原来版本和扩展版,因此在上述条件下,扩展版的第1个服务器进入了垃圾.而且如果第一个服务器失败,则停止向之后的服务器发送邮件,并发此故障后,发送邮件失败
対処方法
分为mscount和mscountEX,取消互相的依赖.
另外,修改为即使Lmail_sendEX对第一个服务器失败,也继续尝试连接下一个服务器
修正箇所
MAIL/mailmain.c(main_initEX, mail_sendEX)] - [7] mail_sendEX的SSL的version指定中如果全部指定为小写字母"sslv3",既不错误返回也不发送
[原因
mail_send_EX内,SSL的处理即使出错,其错误代码也没有反映到mp->error
対処方法
修改为使错误代码反映到mp->error,传递给系统调用的返回值
修正箇所
MAIL/mailsend.c(main_send_EX)] - [7] 发送大附件的邮件时,即使分割也只发送第一个邮件
[原因
即使发送数据仍然存在,如果发送成功,也正常返回
対処方法
删除发送邮件成功时无条件正常返回的部分
修正箇所
MAIL/mailsend.c(main_send_EX)]
- [5] 其他BUG
- [5] 加载连续负荷时,cancelTimer系统崩溃
[原因
要取消已经超时正在删除的计时器要求时发生系统崩溃.
计时器和取消处理的互斥错误.
対処方法
取消处理之前,添加插入mask处理和计时器要求的存在确认
修正箇所
MAIL/mailsmtp.c(main_sndrcv)] - [5] 加载连续负荷时,计数器队列损坏,计时器句柄内发生无限循环.
[原因
不进行终端mask,而直接进行mailsmtp.c的mail_sndrcv()内的createTimer调用
対処方法
修改为将mailsmtp.c的mail_sndrcv()内的createTimer调用前后用Mskhi保护
修正箇所
MAIL/mailsmtp.c(main_sndrcv)]
- [5] 加载连续负荷时,cancelTimer系统崩溃