代码之家  ›  专栏  ›  技术社区  ›  GoZoner

用于Unix.malloc静态分析的Clang注释

  •  0
  • GoZoner  · 技术社区  · 7 年前

    我有如下的C代码。功能 takeString() string 是否存在潜在的内存泄漏 return 0 在里面 main() takeString() ,这将通知Clang静态分析器 一串

    #define OwnershipTaken(type)        type
    
    void takeString (OwnershipTaken(char *) string) {
      // ... eventually frees
    }
    
    int main(int argc, const char * argv[]) {
      char *string = strdup ("This is a string");
      takeString (string);
    
      return 0;
    }
    

    一个更普遍的问题是,在哪里可以看到Clang静态分析器可以理解的所有可能注释的列表?

    我试过使用如下注释 void __attribute((ownership_takes(malloc, 1))) takeString(char *); 但这似乎并没有改变结果。这个 answer 注意到 unix.MallocWithAnnotations unix.MallocWithAnnotations注释

    0 回复  |  直到 7 年前
        1
  •  0
  •   l'L'l    7 年前

    为了达到我所相信的目的,你可以通过 analyzer_noreturn 属性。

    #ifndef CLANG_ANALYZER_RELEASED
    #if __has_feature(attribute_analyzer_noreturn)
    #define CLANG_ANALYZER_RELEASED __attribute__((analyzer_noreturn))
    #else
    #define CLANG_ANALYZER_RELEASED
    #endif
    #endif
    
    // suppress the leak warning for `string`.
    
    void takeString(char *) CLANG_ANALYZER_RELEASED;
    

    要查看clang静态分析器检查程序的完整列表:

    $ clang -cc1 -analyzer-checker-help
    

    alpha.unix.MallocWithAnnotations 在最新版本的llvm中似乎不存在。

    要启用/禁用checkers,并设置选项:(Xcode Build Settings > Other C Flags

    OTHER_CFLAGS = -D__clang_analyzer__ -Xclang -analyzer-output=plist-html -Xclang -analyzer-config -Xclang path-diagnostics-alternate=true -Xclang -analyzer-config -Xclang report-in-main-source-file=true -Xclang -analyzer-config -Xclang mode=shallow -Xclang -analyzer-config -Xclang osx.NumberObjectConversion:Pedantic=true -Xclang -analyzer-checker -Xclang security.insecureAPI.UncheckedReturn -Xclang -analyzer-checker -Xclang security.insecureAPI.getpw -Xclang -analyzer-checker -Xclang security.insecureAPI.gets -Xclang -analyzer-checker -Xclang security.insecureAPI.mkstemp -Xclang -analyzer-checker -Xclang security.insecureAPI.mktemp -Xclang -analyzer-disable-checker -Xclang security.insecureAPI.rand -Xclang -analyzer-disable-checker -Xclang security.insecureAPI.strcpy -Xclang -analyzer-checker -Xclang security.insecureAPI.vfork -Xclang -analyzer-checker -Xclang osx.cocoa.RetainCount -Xclang -analyzer-checker -Xclang osx.cocoa.Dealloc
    

    Clang static analyzer checkers not present in Xcode 10