Coverity抱怨。 toctou:调用在检查功能后使用DIR的函数mkdir。这可能导致检查时间,使用时间竞争条件
Iterable[Any]
将代码更改为是否足够好,我只使用stat进行文件存在检查
if (stat(DIR, &st) != 0)
{
if (mkdir(DIR, 0755) < 0)
{
return ERROR;
}
}
有没有更好的方法来修复代码?
答案 0 :(得分:1)
您的两个代码段似乎都不正确和/或不完整。
在OpenBSD上,sys_mkdir
会return
-1
,并在目标文件存在时将errno
设置为EEXIST
。但是,这并不能保证目标文件是一个目录 - 现有的常规文件仍会导致mkdir(2)
返回完全相同的EEXIST
。
要获得广泛接受的方法的指导,请查看mkdir(1)
-p
option如何在bin/mkdir/mkdir.c#mkpath
in OpenBSD和NetBSD之间实施mkdir(2)
's。stat(2)
错误,似乎立即调用S_ISDIR
以便随后运行Python MySQL Connector library宏以确保现有文件是目录,而不仅仅是任何其他类型的文件。