Files
叫我小杨同学 335ddee90f fix: 全仓审计加固与死代码清理,版本 1.1.87
- 回滚/备份:空 bak 改名 .bad 跳过;升级刷新 bak 补上单数 marker 补丁;统一原子写
- 补丁命中:optional 命中不符记软失败;#42 插入型替换加探针防重复插入
- Windows:进程枚举改用 | 分隔 + UTF-8,修复中文路径换包不杀旧进程;换包失败拉起原版
- 安全:asar 解包防越界;红队路径校验 realpath 防空 symlink;更新仅 https;报告回放去换行注入
- 提示词钩子:停用后 rewriteFn 返回原装配文本并清理 assemble guard;缓存签名纳入红队/策略/override
- 红队:listEngagements 默认不算统计;listVulns/报告支持 evidenceLimit
- 子代理名额占位即时生效并回退;--apply 有失败项退出码 1
- 清理:删除 lib/mnemon-settings.js 及 13 处死代码/未使用 import;移除 test 目录与 test 脚本
2026-11-01 21:47:03 +08:00

29 lines
904 B
JavaScript

import { closeSync, fsyncSync, openSync, renameSync, unlinkSync, writeSync } from 'node:fs'
/**
* 先写临时文件、fsync、再 rename。
* 直接 writeFileSync 覆盖原文件时,写到一半崩溃会留下半截 JSON;读侧又会把解析错
* 吞成默认值,用户的设置就无声消失了。
*/
export function atomicWriteFileSync(file, text) {
const tmp = file + '.tmp-' + process.pid + '-' + Date.now().toString(36)
const fd = openSync(tmp, 'w')
try {
writeSync(fd, text)
try { fsyncSync(fd) } catch { /* 部分文件系统不支持,忽略 */ }
} catch (error) {
try { closeSync(fd) } catch { /* ignore */ }
try { unlinkSync(tmp) } catch { /* ignore */ }
throw error
}
try {
closeSync(fd)
} catch { /* ignore */ }
try {
renameSync(tmp, file)
} catch (error) {
try { unlinkSync(tmp) } catch { /* ignore */ }
throw error
}
}