chore: 规范标点

This commit is contained in:
pluv committed 2026-10-03 14:56:56 +08:00
1 parent 15e79887fa
commit 3dd2231c70
81 files changed
+1751 -1751

No files matched your search

+13 -13
View File
@@ -1,19 +1,19 @@
/* fuzz.c - 对抗性模糊测试:JSON 解析器 + Markdown 渲染器
/* fuzz.c - 对抗性模糊测试: JSON 解析器 + Markdown 渲染器
*
* 这两个模块是"解析不可信输入"的地方 (服务端响应、模型输出),
* 也是最可能出崩溃/越界/泄漏的地方. 所以用随机输入去砸它们.
*
* 检查的不变量:
* 检查的不变量:
* JSON
* 1. 任何输入都不能崩溃、不能泄漏 (靠 ASan/UBSan/LeakSanitizer)
* 2. 解析成功 => dump 再 parse 再 dump, 两次 dump 必须一致 (幂等)
* 3. 随机生成的合法 JSON 必须解析成功并完整往返
* Markdown
* 4. 任何输入都不能崩溃、不能泄漏
* 5. 分片不变性:一次性喂 与 任意分片喂 的输出必须逐字节一致
* 5. 分片不变性: 一次性喂 与 任意分片喂 的输出必须逐字节一致
* 6. 不含任何元字符的输入必须原样输出
*
* 用法: fuzz [迭代次数] [随机种子]
* 用法: fuzz [迭代次数] [随机种子]
*/
#include "json.h"
#include "markdown.h"
@@ -104,7 +104,7 @@ static int fuzz_json_once(char *err, size_t errlen)
int mutate = (int)rnd_below(2);
if (mutate) {
/* 变异模式:先造合法 JSON, 再随机破坏 */
/* 变异模式: 先造合法 JSON, 再随机破坏 */
gen_json(&sb, 0);
size_t n = sb.len;
if (n == 0) { sb_free(&sb); return 0; }
@@ -156,7 +156,7 @@ static int fuzz_json_once(char *err, size_t errlen)
/* 交给解析器的必须是真正 NUL 结尾的缓冲区 */
if (strlen(input) != inlen) {
snprintf(err, errlen, "测试器自身出错:缓冲区未正确结尾");
snprintf(err, errlen, "测试器自身出错: 缓冲区未正确结尾");
sb_free(&sb);
return 1;
}
@@ -167,7 +167,7 @@ static int fuzz_json_once(char *err, size_t errlen)
char *d2 = NULL;
JsonValue *v2 = json_parse(d1, err, errlen);
if (!v2) {
snprintf(err, errlen, "解析成功的 JSON 却无法重新解析:%.120s", d1);
snprintf(err, errlen, "解析成功的 JSON 却无法重新解析: %.120s", d1);
free(d1);
json_free(v);
sb_free(&sb);
@@ -175,7 +175,7 @@ static int fuzz_json_once(char *err, size_t errlen)
}
d2 = json_dump(v2);
if (strcmp(d1, d2) != 0) {
snprintf(err, errlen, "dump 不幂等:\n 输入 %.200s\n 一次 %.200s\n 二次 %.200s",
snprintf(err, errlen, "dump 不幂等: \n 输入 %.200s\n 一次 %.200s\n 二次 %.200s",
input, d1, d2);
free(d1); free(d2);
json_free(v); json_free(v2);
@@ -264,7 +264,7 @@ static int fuzz_md_once(char *err, size_t errlen)
char *whole = md_render(src, len, 0);
if (!whole) { sb_free(&sb); return 0; }
if (strlen(whole) > MD_RENDER_LIMIT * 4) {
snprintf(err, errlen, "输出异常膨胀:输入 %zu 字节 => %zu 字节",
snprintf(err, errlen, "输出异常膨胀: 输入 %zu 字节 => %zu 字节",
len, strlen(whole));
free(whole); sb_free(&sb);
return 1;
@@ -292,7 +292,7 @@ static int fuzz_md_once(char *err, size_t errlen)
/* 无元字符 => 必须逐字节原样 */
if (pure) {
if (strcmp(whole, src) != 0) {
snprintf(err, errlen, "纯净文本被改写了:\n 输入 %.300s\n 输出 %.300s",
snprintf(err, errlen, "纯净文本被改写了: \n 输入 %.300s\n 输出 %.300s",
src, whole);
free(whole); sb_free(&sb);
return 1;
@@ -315,13 +315,13 @@ int main(int argc, char **argv)
char err[512];
long json_fail = 0, md_fail = 0;
printf("模糊测试:JSON %ld 轮 + Markdown %ld 轮 (种子 %llu)\n",
printf("模糊测试: JSON %ld 轮 + Markdown %ld 轮 (种子 %llu)\n",
iters, iters, (unsigned long long)RNG);
for (long i = 0; i < iters; i++) {
err[0] = '\0';
if (fuzz_json_once(err, sizeof err)) {
printf(" ✗ JSON 第 %ld 轮失败:%s\n", i, err);
printf(" ✗ JSON 第 %ld 轮失败: %s\n", i, err);
if (++json_fail >= 3) break;
}
}
@@ -330,7 +330,7 @@ int main(int argc, char **argv)
for (long i = 0; i < iters; i++) {
err[0] = '\0';
if (fuzz_md_once(err, sizeof err)) {
printf(" ✗ Markdown 第 %ld 轮失败:%s\n", i, err);
printf(" ✗ Markdown 第 %ld 轮失败: %s\n", i, err);
if (++md_fail >= 3) break;
}
}