Coverity 忽略 return 语句

Coverity ignoring return statement

我怎样才能让 Coverity 知道由于 return 语句,不应进一步评估条件 !pHost?

bool mudlet::setWindowFont(Host* pHost, const QString& window, const QString& font)
1359{
    1. Condition !pHost, taking false branch.
1360    if (!pHost) {
1361        return false;
1362    }
1363
1364    QMap<QString, TConsole*>& dockWindowConsoleMap = mHostConsoleMap[pHost];
1365
    2. Condition dockWindowConsoleMap->contains(window), taking true branch.
1366    if (dockWindowConsoleMap.contains(window)) {
    3. assign_zero: Assigning: <temporary> = NULL.
    4. identity_transfer: Passing TConsole * const(NULL) as argument 2 to member function value, which returns that argument.
    5. alias_transfer: Assigning: pC = dockWindowConsoleMap->value(window, TConsole * const(NULL)).
1367        TConsole* pC = dockWindowConsoleMap.value(window);
    CID 1468654 (#1 of 1): Explicit null dereferenced (FORWARD_NULL)6. var_deref_model: Passing null pointer pC to setMiniConsoleFont, which dereferences it. [show details]

我不认为 Coverity 是在抱怨 pHost 为空。我认为它只是告诉你它在 !pHost 为假的情况下分析了函数的其余部分。

Coverity 似乎在告诉您调用 dockWindowConsoleMap.value() 后指针 pC 将为空,因为该函数 return 是第二个参数(默认为空,因为您没有不提供)。然后 Coverity 认为您正在使用 pC 作为 setMiniConsoleFont 的输入,这将取消引用它。

您可能想查看 dockWindowConsoleMap.value() 的源代码以了解它的 return 值如何与可选的第二个参数相关,还可以查看 setMiniConsoleFont 以了解它如何取消引用其输入。