fix(fsBridge): guard readFile against oversized files exceeding V8 string limit#1934
fix(fsBridge): guard readFile against oversized files exceeding V8 string limit#1934
Conversation
…ring limit Add file size check (256MB cap) before reading files as UTF-8 text in ipcBridge.fs.readFile to prevent RangeError: Invalid string length when users open extremely large files. Returns null (same as ENOENT) for oversized files instead of crashing with an unhandled rejection. Fixes ELECTRON-D3
f0a9358 to
b214e15
Compare
Code Review:fix(fsBridge): guard readFile against oversized files exceeding V8 string limit (#1934)变更概述本 PR 在 方案评估结论:✅ 方案合理 在 问题清单🔵 LOW — console.warn 残留在生产代码中文件: 问题代码: console.warn(`[fsBridge] File too large to read as text (${stat.size} bytes): ${filePath}`);问题说明:项目规范要求生产代码中不使用 修复建议:若项目暂无统一 logger,可直接删除该行(文件路径已在 🔵 LOW — 缺少 stat 抛出 EBUSY 时的测试用例文件: 问题说明:当前测试覆盖了 修复建议(可选,不阻塞合并): it('readFile returns null when stat throws EBUSY', async () => {
await setupProviders();
const readFileCb = providerCallbacks['readFile'] as (args: { path: string }) => Promise<string | null>;
mockStat.mockRejectedValueOnce(makeErrnoError('EBUSY', 'EBUSY: resource busy or locked'));
const result = await readFileCb({ path: '/locked/file.db' });
expect(result).toBeNull();
expect(mockReadFile).not.toHaveBeenCalled();
});汇总
结论✅ 批准合并 — 仅有两个 LOW 级问题,均不阻塞合并。实现正确、简洁,测试覆盖充分,方案与现有架构一致。 本报告由本地 CONCLUSION: APPROVED |
|
✅ 已自动 review,无阻塞性问题,正在触发自动合并。 |
Summary
fs.readFile(filePath, 'utf-8')inipcBridge.fs.readFileto preventRangeError: Invalid string lengthwhen users open extremely large filesnull(same behavior as ENOENT/EBUSY) for oversized files instead of crashing with an unhandled promise rejectionTest plan
readFile returns null for files exceeding 256MB size limitadded tofsBridge.readFile.test.tsstatcall — all 6 passfsBridge.skills.test.tsmock updated with properErrnoException.code— all 17 passbunx tsc --noEmitpassesbun run lintpasses (0 errors)