CodeQL for c/c++(十):使用范围分析
前言
范围分析库(在semmle.code.cpp.rangeanalysis.SimpleRangeAnalysis中定义)提供了一组谓词,用于确定表达式的恒定上限和下限,以及识别整数溢出。对于性能,库执行自动加宽,因此可能无法提供最严格的边界
边界谓词
upperBound
和lowerBound
谓词提供表达式的常量边界。参数的转换不包含在边界中。在您的查询需要考虑转换的常见情况下,在转换后的表单上调用它们,例如 upperBound(expr.getFullyConverted())
溢出谓词
exprMightOverflow
和相关谓词保持相关表达式是否可能溢出,这由范围分析库确定。谓词的convertedExprMightOverflow
系列将考虑转换
示例
这个查询使用upperBound
来判断snprintf
的结果在循环中使用时是否检查
1 | from FunctionCall call, DataFlow::Node source, DataFlow::Node sink, Expr convSink |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Zzer0's Blog!
评论