fix: 修复 AecDbEwEquipment 的 10 处逻辑缺陷 #52

Merged
gjm merged 1 commits from company-desktop-computer/fix/ewequipment-logic AGit into main 2026-10-25 11:42:31 +08:00
Collaborator

3.2 subErase:sName.Find(_T("接头")) 当布尔用,找不到返回 -1 也为真,
整个条件恒成立,删除任何设备都走阀门/接头的合并管线分支。补 != -1。

3.3 DrawHandFlg:else 分支写成 sFlag == _T("Y"),液动阀(3)符号文字一直是空串。

3.4 ProcessHlrResult:遍历 map 时 erase(it) 之后仍然 ++it。改成 while +
erase(it++),没有用 it = erase(it),因为 R190 走 C++98 标准,
C++03 的 map::erase(iterator) 返回 void。

3.5 GetSectionDraw:返回 nCount - nCoundPre(调用前减调用后),恒为 0 或负数。
改为 nCoundPre - nCount。全库调用点都忽略返回值,此前无实际故障。

3.8 copyFrom:补拷 m_bVert / m_idDash / m_idCenter。原来复制粘贴竖放阀门
会变横放,虚线与中心线的图层也丢失。

3.9 MakeBlockRefSet:判断的是累加器 ext 而不是本次的 extAdd,第一轮 ext 还是
空状态,第一个实体的范围永远加不进去;块参照分支不 continue,extAdd 会
沿用上一轮的值被重复累加。改为块参照跳过、extAdd 每轮新建并检查返回值。

3.10 byJson:br._len 是字节数,却按 new PVOID[br._len] 分配、按
sizeof(PVOID)*br._len 拷贝,源缓冲区越界读 7 倍。改为按字节分配拷贝,
并用 br._len 覆盖 m_nSize。

3.11 dwgInFieldsForXPrim:加 16MB 上限(kMaxXPrimDataSize),超限置
eInvalidInput 让整个 dwgInFields 退出;readBytes 检查返回值,失败时释放。

3.13 GetBodyBox:恒返回 TRUE,调用方无法区分是否取到几何;_ext 在循环外定义,
会把上一轮的累积结果重复并入。改为返回实际结果、每轮新建 _ext。

3.14 clearGeoBuffer:函数体只有 AssertWriteEnabled(),改完参数几何不刷新。
改为 Clean2DBuffer() + Clean3DBuffer()。

未处理,见文档 5.4:3.6 HLR_CALC 序列化(要动 AecDbObjXDataMap 公共类)、
3.7 GetInterface 数组版单位(影响 67 处调用)、3.12 mat4 双次变换(需确认是否刻意)。

3.2 subErase:sName.Find(_T("接头")) 当布尔用,找不到返回 -1 也为真, 整个条件恒成立,删除任何设备都走阀门/接头的合并管线分支。补 != -1。 3.3 DrawHandFlg:else 分支写成 sFlag == _T("Y"),液动阀(3)符号文字一直是空串。 3.4 ProcessHlrResult:遍历 map 时 erase(it) 之后仍然 ++it。改成 while + erase(it++),没有用 it = erase(it),因为 R190 走 C++98 标准, C++03 的 map::erase(iterator) 返回 void。 3.5 GetSectionDraw:返回 nCount - nCoundPre(调用前减调用后),恒为 0 或负数。 改为 nCoundPre - nCount。全库调用点都忽略返回值,此前无实际故障。 3.8 copyFrom:补拷 m_bVert / m_idDash / m_idCenter。原来复制粘贴竖放阀门 会变横放,虚线与中心线的图层也丢失。 3.9 MakeBlockRefSet:判断的是累加器 ext 而不是本次的 extAdd,第一轮 ext 还是 空状态,第一个实体的范围永远加不进去;块参照分支不 continue,extAdd 会 沿用上一轮的值被重复累加。改为块参照跳过、extAdd 每轮新建并检查返回值。 3.10 byJson:br._len 是字节数,却按 new PVOID[br._len] 分配、按 sizeof(PVOID)*br._len 拷贝,源缓冲区越界读 7 倍。改为按字节分配拷贝, 并用 br._len 覆盖 m_nSize。 3.11 dwgInFieldsForXPrim:加 16MB 上限(kMaxXPrimDataSize),超限置 eInvalidInput 让整个 dwgInFields 退出;readBytes 检查返回值,失败时释放。 3.13 GetBodyBox:恒返回 TRUE,调用方无法区分是否取到几何;_ext 在循环外定义, 会把上一轮的累积结果重复并入。改为返回实际结果、每轮新建 _ext。 3.14 clearGeoBuffer:函数体只有 AssertWriteEnabled(),改完参数几何不刷新。 改为 Clean2DBuffer() + Clean3DBuffer()。 未处理,见文档 5.4:3.6 HLR_CALC 序列化(要动 AecDbObjXDataMap 公共类)、 3.7 GetInterface 数组版单位(影响 67 处调用)、3.12 mat4 双次变换(需确认是否刻意)。
company-desktop added 1 commit 2026-10-25 11:21:24 +08:00
3.2 subErase:sName.Find(_T("接头")) 当布尔用,找不到返回 -1 也为真,
    整个条件恒成立,删除任何设备都走阀门/接头的合并管线分支。补 != -1。

3.3 DrawHandFlg:else 分支写成 sFlag == _T("Y"),液动阀(3)符号文字一直是空串。

3.4 ProcessHlrResult:遍历 map 时 erase(it) 之后仍然 ++it。改成 while +
    erase(it++),没有用 it = erase(it),因为 R190 走 C++98 标准,
    C++03 的 map::erase(iterator) 返回 void。

3.5 GetSectionDraw:返回 nCount - nCoundPre(调用前减调用后),恒为 0 或负数。
    改为 nCoundPre - nCount。全库调用点都忽略返回值,此前无实际故障。

3.8 copyFrom:补拷 m_bVert / m_idDash / m_idCenter。原来复制粘贴竖放阀门
    会变横放,虚线与中心线的图层也丢失。

3.9 MakeBlockRefSet:判断的是累加器 ext 而不是本次的 extAdd,第一轮 ext 还是
    空状态,第一个实体的范围永远加不进去;块参照分支不 continue,extAdd 会
    沿用上一轮的值被重复累加。改为块参照跳过、extAdd 每轮新建并检查返回值。

3.10 byJson:br._len 是字节数,却按 new PVOID[br._len] 分配、按
     sizeof(PVOID)*br._len 拷贝,源缓冲区越界读 7 倍。改为按字节分配拷贝,
     并用 br._len 覆盖 m_nSize。

3.11 dwgInFieldsForXPrim:加 16MB 上限(kMaxXPrimDataSize),超限置
     eInvalidInput 让整个 dwgInFields 退出;readBytes 检查返回值,失败时释放。

3.13 GetBodyBox:恒返回 TRUE,调用方无法区分是否取到几何;_ext 在循环外定义,
     会把上一轮的累积结果重复并入。改为返回实际结果、每轮新建 _ext。

3.14 clearGeoBuffer:函数体只有 AssertWriteEnabled(),改完参数几何不刷新。
     改为 Clean2DBuffer() + Clean3DBuffer()。

未处理,见文档 5.4:3.6 HLR_CALC 序列化(要动 AecDbObjXDataMap 公共类)、
3.7 GetInterface 数组版单位(影响 67 处调用)、3.12 mat4 双次变换(需确认是否刻意)。
gjm approved these changes 2026-10-25 11:42:26 +08:00
gjm merged commit cbbb7897f7 into main 2026-10-25 11:42:31 +08:00
Sign in to join this conversation.
No Reviewers
No labels
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: gjm/envi-code#52