✨ 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_*
This commit is contained in:
1 parent
d3c8df79a8
commit
127191c889
10 files changed
+565
-26
No files matched your search
@@ -0,0 +1,28 @@
|
||||
// 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;
|
||||
}
|
||||
Reference in new issue
Block a user