【问题标题】:Coverity ignoring return statementCoverity 忽略 return 声明
【发布时间】:2018-05-18 10:55:43
【问题描述】:

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

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]

【问题讨论】:

  • 这里 !pHost 为 false,表示指针非空,不采用返回路径。之后很大程度上取决于 Coverity 是否可以确定指针的值是否可以改变。
  • 你说得对——我很困惑,这意味着它走的是pHost是真正的路径。

标签: coverity


【解决方案1】:

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

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

您可能需要查看 dockWindowConsoleMap.value() 的源代码以了解其返回值与可选的第二个参数的关系,并查看 setMiniConsoleFont 以了解它如何取消引用其输入。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-21
    • 2023-03-11
    • 1970-01-01
    • 2018-02-23
    • 2017-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多