已开启
【缺陷报告】访问未初始化的指针 - 文件memory_manager.h - 函数MemoryChunkList - 行号81 #162
zhangjunkai9创建于 9月14日
openharmony_ci
9月14日 评论:
9月14日 评论:
感谢提交Issue!关于Issue的交互操作,请访问OpenHarmony社区支持命令清单。如果有问题,请联系 [@knightaoko](https://gitcode.com/knightaoko) [@mschen7](https://gitcode.com/mschen7) [@jeff_liuwenbin](https://gitcode.com/jeff_liuwenbin) 。如果需要调整订阅PR、Issue的变更状态,请访问链接。
Thanks for submitting the issue. For more commands, please visit OpenHarmony Command List. If you have any questions, please refer to committer gitcode for help. If you need to change the subscription of a Pull Request or Issue, please visit the link.


9月14日 添加了label:waiting_for_assign
缺陷信息
缺陷描述
MemoryChunkList 构造函数(src/memory_manager.h:81-84)初始化列表仅初始化 head 与 freeList,遗漏成员 chunkNumber(src/memory_manager.h:193 声明,无默认初始化值)。构造函数体调用 AllocateChunk(),其第148行对 chunkNumber 执行 ++chunkNumber,构成对不确定值的首次读取(UB),此后 chunkNumber 恒为 不确定值+1,永远无法表达真实 chunk 数量。该类被实例化为 JSVM_Env__ 的成员 scopeMemoryManager(src/jsvm_env.h:213),随每个 JSVM 环境创建(OH_JSVM_CreateEnv / OH_JSVM_CreateEnvFromSnapshot,src/js_native_api_v8.cpp:1352/1418)必然构造,缺陷可达性完整;随后每次 CloseHandleScope / CloseEscapableHandleScope(src/js_native_api_v8.cpp:3984/4028)触发 Delete() 第116行以 chunkNumber > threshold(实例化参数 sizePerChunk=8, threshold=10)决定是否 FreeChunk,阈值判断基于不确定值,可能导致 chunk 被过早释放或永不释放,破坏 handle scope 内存池管理;FreeChunk 第185行 --chunkNumber 还可能在垃圾初值上继续运算甚至下溢。
事实核查
数据流证据
传播路径:
调用链
可达调用链1 起点:
(entry functions)→ 终点:MemoryChunkList::MemoryChunkList深度:0修复建议
MemoryChunkList() : head(nullptr), freeList(nullptr), chunkNumber(0) { AllocateChunk(); } // 或在成员声明处给默认值:size_t chunkNumber = 0;