没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
机遇永远只属于随时做好准备的人!!
开发经验总结:
1. strcpy(dst,src)是个不安全的函数,如果sizeof(src) > sizeof(dst);可能会导致其他的内存数据被覆盖.
【eg】: 在开发调试upgrade模块时,src > dst导致ip地址的内容被覆盖啦
【解决方法】:用strncpy()和memcpy()来代替. 用memcpy()时请注意末尾未必是'\0'结束.
2. strncpy(dst,str)调用的时候注意,如果str长度大于dst,则copy sizeof(dst)长度的话,可能导致后续使用
strncmp()和strcmp()结果不正确!也就是说dst末尾非'\0'结尾时,可能得不到预期结果.
【eg】: char achDirTmp[10]; strncpy(achDirTmp,"0123456789ab",sizeof(achDirTmp));
strncmp(achDirTmp,"0123456789ab",sizeof(achDirTmp));
【解决方法】:linux下验证失败!!
3. 在函数里面基本上无法根据指针得到所在内存的大小,不管是sizeof()还是strlen(),因此,为了确保安全
建议在传递pBuf时带上BufSize;同时调用者必须确保两者一致;否则可能导致系统崩溃.
【eg】: ULONG upgrd_getSubVerContent(char * pchExpFileName,char * pchLocalBinFile,char *pchSubVerBuf,ULONG ulLen)
如果pchSubVerBuf大小远远小于实际文件的大小,执行结果将导致系统崩溃(大把内存数据被覆盖)
【解决方法】:带上bufSize
4. 文件操作时,特别是open; fopen; opendir时必须要close;fclose;closedir操作,否则将导致文件系统不可用
因此,在调用类似,malloc,open,socket等句柄和文件描述符操作函数时,都要考虑是否需要close
5. 注意静态变量,特别是静态全局变量的初始化问题,否则会导致莫名其妙的问题
6. 没有100%把握的优先级问题,均要用()实现,如:&pstDirNode->dirlist,安全的写法为:&(pstDirNode->dirlist)
7. socket使用注意事项:close已经关闭的fd,或者close根本就没有获取成功的fd将导致很多莫名奇妙的问题!
【eg】: 在software upgrade模块中的upgrd_transferFile()中,goto Error后直接close(dataSocket)和close(ctrlSocket)
结果导致没有按正常的序列return; 再如:正常情况下close(dataSocket)两次,竟然运行到几十次才出现errno=9错误!
如果加上taskDelay后,竟然成功运行17*22次才出现errno=9的问题;
【解决方法】:在close socket时进行判断,如:if (dataSocket >=0) close(dataSocket); 当然,最好把socket赋初值为-1而
不是ERROR; 因为ERROR压根就无法保证为-1.
开发经验总结:
1. strcpy(dst,src)是个不安全的函数,如果sizeof(src) > sizeof(dst);可能会导致其他的内存数据被覆盖.
【eg】: 在开发调试upgrade模块时,src > dst导致ip地址的内容被覆盖啦
【解决方法】:用strncpy()和memcpy()来代替. 用memcpy()时请注意末尾未必是'\0'结束.
2. strncpy(dst,str)调用的时候注意,如果str长度大于dst,则copy sizeof(dst)长度的话,可能导致后续使用
strncmp()和strcmp()结果不正确!也就是说dst末尾非'\0'结尾时,可能得不到预期结果.
【eg】: char achDirTmp[10]; strncpy(achDirTmp,"0123456789ab",sizeof(achDirTmp));
strncmp(achDirTmp,"0123456789ab",sizeof(achDirTmp));
【解决方法】:linux下验证失败!!
3. 在函数里面基本上无法根据指针得到所在内存的大小,不管是sizeof()还是strlen(),因此,为了确保安全
建议在传递pBuf时带上BufSize;同时调用者必须确保两者一致;否则可能导致系统崩溃.
【eg】: ULONG upgrd_getSubVerContent(char * pchExpFileName,char * pchLocalBinFile,char *pchSubVerBuf,ULONG ulLen)
如果pchSubVerBuf大小远远小于实际文件的大小,执行结果将导致系统崩溃(大把内存数据被覆盖)
【解决方法】:带上bufSize
4. 文件操作时,特别是open; fopen; opendir时必须要close;fclose;closedir操作,否则将导致文件系统不可用
因此,在调用类似,malloc,open,socket等句柄和文件描述符操作函数时,都要考虑是否需要close
5. 注意静态变量,特别是静态全局变量的初始化问题,否则会导致莫名其妙的问题
6. 没有100%把握的优先级问题,均要用()实现,如:&pstDirNode->dirlist,安全的写法为:&(pstDirNode->dirlist)
7. socket使用注意事项:close已经关闭的fd,或者close根本就没有获取成功的fd将导致很多莫名奇妙的问题!
【eg】: 在software upgrade模块中的upgrd_transferFile()中,goto Error后直接close(dataSocket)和close(ctrlSocket)
结果导致没有按正常的序列return; 再如:正常情况下close(dataSocket)两次,竟然运行到几十次才出现errno=9错误!
如果加上taskDelay后,竟然成功运行17*22次才出现errno=9的问题;
【解决方法】:在close socket时进行判断,如:if (dataSocket >=0) close(dataSocket); 当然,最好把socket赋初值为-1而
不是ERROR; 因为ERROR压根就无法保证为-1.
资源评论
gisbeibei
- 粉丝: 0
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功