Unix.malloc静态分析的Clang Annotations

问题描述 投票:0回答:1

我有C代码,如下所示。已知函数takeString()取得其malloc-ed指针参数的所有权。 Clang静态分析仪会抱怨stringreturn 0main()潜在的内存泄漏。严格来说,对于C代码,我可以应用什么注释,理想情况是在takeString()的声明中,这将通知Clang静态分析器string不会被泄露?

#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。怎么在Xcode中完成?但是,当前版本的Xcode似乎不包括unix.MallocWithAnnotations

xcode annotations clang static-analysis clang-static-analyzer
1个回答
0
投票

通过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的最新版本中。

要启用/禁用检查器,并设置选项:(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

© www.soinside.com 2019 - 2024. All rights reserved.