标签
John Regehr 描述了使用 tis-interpreter 在 SQLite 中搜索未定义行为,发现了其他工具遗漏的错误,如悬空指针使用和未初始化读取。
一篇博文指出,C++ 中浮点数到整数的转换在值不匹配时是未定义行为,并指出微软 GSL 库的安全窄化函数 'gsl::narrow' 也存在此未定义行为,与其文档说明相悖。
本文解释了为什么在C++中有时必须使用const_cast,特别是从std::priority_queue中移动对象时,以及如何安全地使用它。
C++26 引入了减少未定义行为的更改,特别是使删除指向不完整类型的指针成为格式错误,从而提高了程序安全性。
Reify 是一款基于语义具体化技术的开源随机 C 程序生成器,能够生成不含未定义行为的代码,专用于编译器测试。它已在 GCC 和 LLVM 中发现了 59 个 bug,并在 OpenJ9 和 Linux 的 eBPF 运行时中发现了额外的缺陷。
这是 John Regehr 的 C 语言整数测验的存档版本,使用 JavaScript 封装以实现浏览器兼容性,重点介绍了 C 代码中棘手的未定义行为和整数问题。
一位经验丰富的C++开发者认为,所有非平凡的C和C++代码都包含未定义行为,使得内存安全无法实现,并质疑这些语言在现代软件开发中的持续使用。
Bun 的 Rust 重写未通过基本 Miri 检查,在安全 Rust 中导致未定义行为,引发了严重的安全担忧。
C++26 引入了标准化的库强化机制,用于在运行时捕获常见的未定义行为(如越界访问)。基于 Google 的生产经验,此举仅带来 0.30% 的性能开销,同时将段错误减少了 30%。
分析了C/C++表达式 'a = a++ + ++a;' 在 int a=5 时的未定义行为,展示了因编译器相关的求值顺序和后置递增处理而可能出现的三种结果(11、12、13),并进行了理论和实验分析。