bugprone-signal-handler

查找信号处理函数中可能导致未定义行为的特定结构。C++ 语言版本之间允许的内容规则不同。

针对 C 的已检查信号处理程序规则

针对 C++14 及更早版本的已检查信号处理程序规则

在 C++17 及更高版本中,此检查被禁用。

异步安全性是通过将函数的名称与已知函数集进行比较来确定的。此外,该函数必须来自系统头文件包含,并在全局命名空间中。传递给函数的(可能的)参数不会被检查。任何无法确定为异步安全的函数,都被检查认为是非异步安全的,包括只可见声明的用户函数。对具有可见定义的用户定义函数的调用会递归地进行检查。

此检查实现了 CERT C 编码标准规则 SIG30-C。在信号处理程序中仅调用异步安全函数 和规则 MSC54-CPP。信号处理程序必须是普通旧函数。它具有别名 cert-sig30-ccert-msc54-cpp

选项

AsyncSafeFunctionSet

选择哪些函数集被认为是异步安全的(因此允许在信号处理程序中使用)。它可以设置为以下值

minimal

选择在 CERT SIG30-C 规则中定义的最小集合。并且包括函数 abort()_Exit()quick_exit()signal()

POSIX

选择一个更大的函数集,该函数集列在 POSIX.1-2017 中(有关详细信息,请参阅 此链接)。以下函数包括:_Exit_exitabortacceptaccessaio_erroraio_returnaio_suspendalarmbindcfgetispeedcfgetospeedcfsetispeedcfsetospeedchdirchmodchownclock_gettimecloseconnectcreatdupdup2execlexecleexecvexecvefaccessatfchdirfchmodfchmodatfchownfchownatfcntlfdatasyncfexecveffsforkfstatfstatatfsyncftruncatefutimensgetegidgeteuidgetgidgetgroupsgetpeernamegetpgrpgetpidgetppidgetsocknamegetsockoptgetuidhtonlhtonskilllinklinkatlistenlongjmplseeklstatmemccpymemchrmemcmpmemcpymemmovememsetmkdirmkdiratmkfifomkfifoatmknodmknodatntohlntohsopenopenatpausepipepollposix_trace_eventpselectpthread_killpthread_selfpthread_sigmaskquick_exitraisereadreadlinkreadlinkatrecvrecvfromrecvmsgrenamerenameatrmdirselectsem_postsendsendmsgsendtosetgidsetpgidsetsidsetsockoptsetuidshutdownsigactionsigaddsetsigdelsetsigemptysetsigfillsetsigismembersiglongjmpsignalsigpausesigpendingsigprocmasksigqueuesigsetsigsuspendsleepsockatmarksocketsocketpairstatstpcpystpncpystrcatstrchrstrcmpstrcpystrcspnstrlenstrncatstrncmpstrncpystrnlenstrpbrkstrrchrstrspnstrstrstrtok_rsymlinksymlinkattcdraintcflowtcflushtcgetattrtcgetpgrptcsendbreaktcsetattrtcsetpgrptimetimer_getoverruntimer_gettimetimer_settimetimesumaskunameunlinkunlinkatutimeutimensatutimeswaitwaitpidwcpcpywcpncpywcscatwcschrwcscmpwcscpywcscspnwcslenwcsncatwcsncmpwcsncpywcsnlenwcspbrkwcsrchrwcsspnwcsstrwcstokwmemchrwmemcmpwmemcpywmemmovewmemsetwrite

函数 quick_exit 未包含在 POSIX 列表中,但包含在此安全函数集中。

默认值为 POSIX