ipmsg365src 问题修复
在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 问题修复相关推荐
- 2022-2028年中国产后修复行业市场研究及前瞻分析报告
[报告类型]产业研究 [报告价格]4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了中国产后修复行业市场行业相关概述.中国产后修 ...
- GStreamer 1.18.4稳定的错误修复版本
GStreamer 1.18.4稳定的错误修复版本 GStreamer团队宣布最喜欢的跨平台多媒体框架的稳定的1.18版本系列中的另一个错误修复版本! 此版本仅包含错误修复和重要的安全修复程序,并且从 ...
- 结构感知图像修复:ICCV2019论文解析
结构感知图像修复:ICCV2019论文解析 StructureFlow: Image Inpainting via Structure-aware Appearance Flow 论文链接: http ...
- iphone smtp服务器没有响应,电子邮件卡在iPhone或iPad上的发件箱?如何修复iOS中的未发送邮件 | MOS86...
您曾经在iOS中发送电子邮件,只能将信息卡在iPhone,iPad或iPod touch的邮件应用发件箱中?你知道这是什么时候发生的,因为在iOS的Mail应用程序的底部,状态栏在iOS中显示1个未发 ...
- pfSense 2.4.3 发布,包含重要的安全修复补丁
pfSense 2.4.3 已发布,本次更新包含重要的安全修复和 bug 修复,还引入了一些新特性,具体如下. 值得关注的更新 包含一些重要的安全修复补丁: Kernel PTI mitigation ...
- centos 6.8 启动损坏修复实验
前两天遇到了一个问题,centos必须借助CD的启动才能进入系统,当时想着做个测试,这会儿正好有时间,在VMWare里面试试. 思想是这样的,删除boot里面的文件,然后重启看效果. 具体过程如下: ...
- [转]后期-快速消除痘痘,完美修复MM肌肤
是面对美景,即使皮肤不好也得露个脸啊!那MM的面子问题怎么办呢?简单,咱就通过Photoshop后期处理来<?xml:namespace prefix = o /> 给MM打造完美水嫩的肌 ...
- 《OpenCV3编程入门》学习笔记8 图像轮廓与图像分割修复(六)图像修补
8.6 图像修补 基本思想: 利用已经被破坏区域的边缘,即边缘的颜色和结构,繁殖和混合到损坏的图像中,达到图像修补的目的. 8.6.1 实现图像修补:inpaint()函数 1.作用: 用来从 ...
- 《OpenCV3编程入门》学习笔记8 图像轮廓与图像分割修复(一)查找并绘制轮廓
第8章 图像轮廓与图像分割修复 8.1 查找并绘制轮廓 8.1.1 寻找轮廓:findContours()函数 1.作用:在二值图像中寻找轮廓 2.函数原型: void findcontours(In ...
最新文章
- Ubuntu任务栏Tint2安装与使用
- 哎..前段时间的偷懒..造成今天的被动局面...要检讨深刻教训.
- 查找 之 散列表查找(哈希表)
- 设计模式复习-策略模式
- linux 管道使用方法,Linux 管道命令
- 【助教】关于代码提交相关注意事项
- 推广的euclid_欧几里德(Euclid)贴近度评价法在人类进化上的应用
- 1008	计算(a+b)/c的值
- python实现CRAPS赌博游戏。
- Android常用设置
- 【数据攻略】字节面试真题(含答案)+100道面试题库
- 1033,2052 是什么意思?
- 纳秒脉冲等离子体放电
- 【深度学习环境配置】手把手实战配置深度学习环境(win10版)
- picPick使用研究
- 我是如何把大象装进冰箱里的……
- VBA学习(一)启用VBA、变量、常量、静态变量、字符串拼接、循环语句与判断语句
- python12306源码_春运了,Python大神分享爬取12306车票信息的例子,附抢票源码
- 谷歌外链发多少条能有效提升排名?
- 成功解决:Module build failed: Error: Vue packages version mismatch