Z__PROPERTY_OFFSET_* 中的未定义行为
作者: 2rr0r4o3创建于 2026年8月24日更新于 2026年8月24日
总结
DTO_FIELD 宏通过声明一个原始 char 缓冲区,将其强制转换为 DTO 类型,并通过该指针获取成员的地址来计算每个字段的偏移量。缓冲区中从未构造对象,因此没有写入 vptr,但每个 DTO 都是多态的。UBSan 的 vptr 检查将其报告为 dynamic-type-mismatch。每个 DTO 的每个字段都会调用这些函数之一,它们在构建该 DTO 类型的第一次构造时运行,因此任何声明 DTO 的应用程序都会执行此操作。计算的偏移量在每个主流 ABI 中都是预期值,但它在其他任何操作之前执行,并且在 -fno-sanitize-recover 下会终止进程。它掩盖了此库中的所有其他内存安全发现。
内容来源: oatpp/oatpp