在src\recvdlg.cpp文件里,函数BOOL TRcvDlg::RecvDirFile(void)中存在一个bug,该bug导致自动接收时,接收文件体积大小的门限值乘积产生溢出,不对过大的文件进行接收;需要做如下修改:

BOOL TRecvDlg::RecvDirFile(void)
{
#define PEEK_SIZE   8if (fileObj->status == FS_DIRFILESTART || fileObj->status == FS_TRANSINFO) {int     size;if (fileObj->infoLen == 0) {if ((size = ::recv(fileObj->conInfo->sd, fileObj->info + (int)fileObj->offset,PEEK_SIZE - (int)fileObj->offset, 0)) <= 0) {return  FALSE;}if (fileObj->aes.IsKeySet()) {fileObj->aes.DecryptCTR((const BYTE *)fileObj->info + (int)fileObj->offset,(BYTE *)fileObj->info + (int)fileObj->offset, size);}if ((fileObj->offset += size) < PEEK_SIZE) {return  TRUE;}fileObj->info[fileObj->offset] = 0;fileObj->infoLen = strtoul(fileObj->info, 0, 16);if (fileObj->infoLen >= sizeof(fileObj->info) -1 || fileObj->infoLen <= 0) {return  FALSE;  // too big or small}}if (fileObj->offset < fileObj->infoLen) {if ((size = ::recv(fileObj->conInfo->sd, fileObj->info + (int)fileObj->offset,fileObj->infoLen - (int)fileObj->offset, 0)) <= 0) {return  FALSE;}if (fileObj->aes.IsKeySet()) {fileObj->aes.DecryptCTR((const BYTE *)fileObj->info + (int)fileObj->offset,(BYTE *)fileObj->info + (int)fileObj->offset, size);}fileObj->offset += size;}if (fileObj->offset == fileObj->infoLen) {fileObj->info[fileObj->infoLen] = 0;if (!DecodeDirEntry(fileObj->info, &fileObj->curFileInfo, fileObj->isDir ? fileObj->u8fname : NULL)) {return  FALSE;  // Illegal entry}if (isAutoSave) {if (fileObj->totalTrans + fileObj->curFileInfo.Size() >(int64)cfg->autoSaveMax * 1000 * 1000) return FALSE;    // 添加(int64)}fileObj->offset = fileObj->infoLen = 0; // 初期化DWORD   attr = fileObj->curFileInfo.Attr();if (GET_MODE(attr) == IPMSG_FILE_DIR) {char    buf[MAX_BUF];const char *fname = (fileObj->dirCnt == 0) ?fileObj->fileInfo->Fname() : fileObj->curFileInfo.Fname();if (!fileObj->isDir) return FALSE;if (MakePath(buf, fileObj->path, fname) >= MAX_PATH_U8) {MessageBoxU8(buf, GetLoadStrU8(IDS_PATHTOOLONG));return  FALSE;}if (!IsSafePath(buf, fname)) {return  FALSE;}if (!CreateDirectoryU8(buf, NULL)) {return  FALSE;}strncpyz(fileObj->path, buf, MAX_PATH_U8);fileObj->dirCnt++;}else if (GET_MODE(attr) == IPMSG_FILE_RETPARENT) {if (!fileObj->isDir) return FALSE;if (fileObj->curFileInfo.Mtime()) { // directory の time stamp をあわせる(NT系のみ)FILETIME    ft;HANDLE      hFile;UnixTime2FileTime(fileObj->curFileInfo.Mtime(), &ft);if ((hFile = CreateFileU8(fileObj->path, GENERIC_WRITE, FILE_SHARE_READ, 0,OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0)) != INVALID_HANDLE_VALUE) {::SetFileTime(hFile, NULL, NULL, &ft);::CloseHandle(hFile);}}if (fileObj->curFileInfo.Attr() & IPMSG_FILE_RONLYOPT) {SetFileAttributesU8(fileObj->path, FILE_ATTRIBUTE_READONLY);}if (--fileObj->dirCnt <= 0) {fileObj->status = FS_COMPLETE;return  TRUE;}if (!GetParentDirU8(fileObj->path, fileObj->path)) {return  FALSE;}}else {if (fileObj->isDir && fileObj->dirCnt == 0) {return  FALSE;}if (fileObj->curFileInfo.Size() == 0) { // 0byte fileif (OpenRecvFile()) {   // 0byteの場合は作成失敗を無視CloseRecvFile(TRUE);}if (!fileObj->isDir) {fileObj->status = FS_COMPLETE;return TRUE;}}fileObj->status = fileObj->curFileInfo.Size() ? FS_TRANSFILE : FS_TRANSINFO;}return  TRUE;}}if (fileObj->status == FS_TRANSFILE) {if (!RecvFile()) {CloseRecvFile();return  FALSE;}if (fileObj->status == FS_ENDFILE || fileObj->status == FS_COMPLETE) {CloseRecvFile(TRUE);if (!fileObj->isDir) return TRUE;fileObj->status = FS_TRANSINFO;}}return  TRUE;
}

ipmsg365src 问题修复相关推荐

  1. 2022-2028年中国产后修复行业市场研究及前瞻分析报告

    [报告类型]产业研究 [报告价格]4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了中国产后修复行业市场行业相关概述.中国产后修 ...

  2. GStreamer 1.18.4稳定的错误修复版本

    GStreamer 1.18.4稳定的错误修复版本 GStreamer团队宣布最喜欢的跨平台多媒体框架的稳定的1.18版本系列中的另一个错误修复版本! 此版本仅包含错误修复和重要的安全修复程序,并且从 ...

  3. 结构感知图像修复:ICCV2019论文解析

    结构感知图像修复:ICCV2019论文解析 StructureFlow: Image Inpainting via Structure-aware Appearance Flow 论文链接: http ...

  4. iphone smtp服务器没有响应,电子邮件卡在iPhone或iPad上的发件箱?如何修复iOS中的未发送邮件 | MOS86...

    您曾经在iOS中发送电子邮件,只能将信息卡在iPhone,iPad或iPod touch的邮件应用发件箱中?你知道这是什么时候发生的,因为在iOS的Mail应用程序的底部,状态栏在iOS中显示1个未发 ...

  5. pfSense 2.4.3 发布,包含重要的安全修复补丁

    pfSense 2.4.3 已发布,本次更新包含重要的安全修复和 bug 修复,还引入了一些新特性,具体如下. 值得关注的更新 包含一些重要的安全修复补丁: Kernel PTI mitigation ...

  6. centos 6.8 启动损坏修复实验

    前两天遇到了一个问题,centos必须借助CD的启动才能进入系统,当时想着做个测试,这会儿正好有时间,在VMWare里面试试. 思想是这样的,删除boot里面的文件,然后重启看效果. 具体过程如下: ...

  7. [转]后期-快速消除痘痘,完美修复MM肌肤

    是面对美景,即使皮肤不好也得露个脸啊!那MM的面子问题怎么办呢?简单,咱就通过Photoshop后期处理来<?xml:namespace prefix = o /> 给MM打造完美水嫩的肌 ...

  8. 《OpenCV3编程入门》学习笔记8 图像轮廓与图像分割修复(六)图像修补

    8.6 图像修补 基本思想:   利用已经被破坏区域的边缘,即边缘的颜色和结构,繁殖和混合到损坏的图像中,达到图像修补的目的. 8.6.1 实现图像修补:inpaint()函数 1.作用:   用来从 ...

  9. 《OpenCV3编程入门》学习笔记8 图像轮廓与图像分割修复(一)查找并绘制轮廓

    第8章 图像轮廓与图像分割修复 8.1 查找并绘制轮廓 8.1.1 寻找轮廓:findContours()函数 1.作用:在二值图像中寻找轮廓 2.函数原型: void findcontours(In ...

最新文章

  1. Ubuntu任务栏Tint2安装与使用
  2. 哎..前段时间的偷懒..造成今天的被动局面...要检讨深刻教训.
  3. 查找 之 散列表查找(哈希表)
  4. 设计模式复习-策略模式
  5. linux 管道使用方法,Linux 管道命令
  6. 【助教】关于代码提交相关注意事项
  7. 推广的euclid_欧几里德(Euclid)贴近度评价法在人类进化上的应用
  8. 1008 计算(a+b)/c的值
  9. python实现CRAPS赌博游戏。
  10. Android常用设置
  11. 【数据攻略】字节面试真题(含答案)+100道面试题库
  12. 1033,2052 是什么意思?
  13. 纳秒脉冲等离子体放电
  14. 【深度学习环境配置】手把手实战配置深度学习环境(win10版)
  15. picPick使用研究
  16. 我是如何把大象装进冰箱里的……
  17. VBA学习(一)启用VBA、变量、常量、静态变量、字符串拼接、循环语句与判断语句
  18. python12306源码_春运了,Python大神分享爬取12306车票信息的例子,附抢票源码
  19. 谷歌外链发多少条能有效提升排名?
  20. 成功解决:Module build failed: Error: Vue packages version mismatch

热门文章

  1. GNS3 1.3 10 考CCNA,CCNP,思科证必备软件教学和资源(拿高薪,走向人生巅峰)...
  2. Objective-C学习之Protocal协议,设置代理
  3. java 全站静态化_java如何页面全站静态化
  4. 唠唠Nacos的注册中心
  5. 用SamInside破解Windows登录密码
  6. 移动机器人——移动机器人的发展
  7. 基于hbase jira读源代码
  8. 严防死守把蠕虫病毒拒绝在系统之外(转)
  9. Java的异常类和常用类、容器
  10. IT项目管理痛点和应对方法总结