https://github.com/tinyobjloader/tinyobjloader 中存在基于栈的缓冲区溢出,仅影响实验性版本,可能导致意外结果。
tinyobjloader 在提交 d56555b 之前的所有版本均受影响。
修复方案已在以下位置提出:
386b73bb8c1a855236beb73b11f45f7feac4e03a仓库:
该问题可在 AddressSanitizer 下以 tinyobj_opt::LoadMtl 中的栈缓冲区溢出形式复现,其中过大的 newmtl token 被写入固定大小的局部缓冲区 。
namebuf在启用 AddressSanitizer 和 UndefinedBehaviorSanitizer 的情况下构建概念验证:
clang++ -std=c++17 -O1 -g -fsanitize=address,undefined -fno-omit-frame-pointer \
-I./tinyobjloader \
-I./tinyobjloader/experimental \
poc.cpp -o poc