Files
hunjing/engine/fuzz/fuzz_transform.cpp
T
chenxin 127191c889 ✨ feat: 灵台引擎脾神(hj_transform)确定性 Markdown 解析器(WP-15)
- C ABI 新增 hj_transform_version / hj_transform_markdown(契约登记同步);HjBuffer 真实实现(头部+紧随数据)
- v1 解析(hunjing-markdown-v1):fenced code/mermaid 提取、独占行 $$ 块级数学、未闭合结构保持源码态、其余归并 markdown block;canonical JSON 键序确定、UTF-8 校验、1MiB/256 block/64KiB 行硬限额
- 引擎内部设施抽取(engine_internal.h:last_error/句柄表/buffer 共享)
- doctest 12 个用例(含 1 万次随机鲁棒性冒烟,固定种子可复现);libFuzzer 目标(-DHJ_BUILD_FUZZER,Apple clang 无 fuzzer 运行时,正式跑在 Linux CI)
- nm 验证 9 个导出符号全部 hj_*
2026-09-10 11:01:45 +08:00

29 lines
870 B
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// hj_transform fuzz 目标(ADR-025:libFuzzer 必测)。
// 构建:cmake -DHJ_BUILD_FUZZER=ON(需要 clang 的 -fsanitize=fuzzer)。
#include <cstdint>
#include <cstring>
#include "hunjing/lingtai.h"
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
HjEngine *engine = nullptr;
if (hj_engine_new(HJ_ABI_VERSION, &engine) != HJ_OK) {
return 0;
}
HjBuffer *buf = nullptr;
const HjStatus st = hj_transform_markdown(engine, reinterpret_cast<const char *>(data), size, &buf);
if (st == HJ_OK) {
// 输出必须可读且与声称长度一致
const void *p = hj_buffer_data(buf);
const size_t len = hj_buffer_len(buf);
if (p == nullptr || len == 0) {
hj_buffer_free(buf);
hj_engine_free(engine);
__builtin_trap();
}
hj_buffer_free(buf);
}
hj_engine_free(engine);
return 0;
}