【问题标题】:Undefined behavior sanitizer suppression file: failed to parse suppressions未定义的行为清理程序抑制文件:无法解析抑制
【发布时间】:2016-03-04 17:55:09
【问题描述】:

使用 -fsanitize=undefined 使用 clang 3.6 编译应用程序后, 我正在尝试启动检测程序,同时使用抑制文件忽略一些错误:

UBSAN_OPTIONS="suppressions=ubsan.supp" ./app.exe

抑制文件 ubsan.supp 包含:

signed-integer-overflow:example.c

这会导致错误消息:

UndefinedBehaviorSanitizer: failed to parse suppressions

gcc 4.9 版本也会发生同样的情况。 我能找到的唯一文档是 http://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html,它适用于 clang 3.9,而我使用的是 3.6(其中不包含适用于 ubsan 的文档)。

谁能提供适用于 clang 3.6 的 ubsan 抑制文件的工作示例?

编辑:通过浏览 ubsan 的源代码,我发现唯一有效的抑制类型可能是“vptr_check”——但不知道我在看哪个版本。 谁能确认在 clang 3.9 中有更多的抑制类型可用?

【问题讨论】:

    标签: clang sanitizer ubsan


    【解决方案1】:

    我尝试过创建三个文件,compile.shmain.cppsuppressions.supp,如下所示。 unsigned-integer-overflow 不是 undefined 的一部分,这就是为什么需要特别包含它的原因。这适用于我的带有 clang-3.9 的机器。

    所以,我猜想clang-3.9 中有效的抑制类型更多。

    # compile.sh
    set -x 
    UBSAN_OPTIONS=suppressions=suppressions.supp:print_stacktrace=1 #:help=1
    export UBSAN_OPTIONS
    clang++-3.9 -g -std=c++11 -fsanitize=undefined -fno-omit-frame-pointer -fsanitize=unsigned-integer-overflow main.cpp
    ./a.out
    
    // main.cpp
    #include <bits/stdc++.h>
    #include <bits/stl_tree.h>
    using namespace std;
    int main(int argc, char **argv) {
      unsigned int k = UINT_MAX;
      k += 1;
      return 0;
    }
    
    # suppressions.supp
    unsigned-integer-overflow:main.cpp
    

    【讨论】:

      【解决方案2】:

      我没有花时间确切地找出clang-3.6 中可用的抑制,但似乎clang-3.7 中只有vptr_check 可用作抑制。从clang-3.8 开始,抑制列表是defined 成为检查的list,加上vptr_check。 在clang-3.9 中,检查available 是:

      • “未定义”
      • “空”
      • “未对齐的指针使用”
      • “对齐”
      • “对象大小”
      • “有符号整数溢出”
      • “无符号整数溢出”
      • “整数除以零”
      • “浮点除以零”
      • “班次基地”
      • “移位指数”
      • “界限”
      • “无法访问”
      • “返回”
      • “vla 绑定”
      • “浮动强制溢出”
      • “布尔”
      • “枚举”
      • “函数”
      • “返回非空属性”
      • “非空属性”
      • “vptr”
      • “cfi”
      • “vptr_check”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-02-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多