Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[C++] Control Flow Influence not detected interprocedurally #18100

Open
JustusAdam opened this issue Nov 25, 2024 · 0 comments
Open

[C++] Control Flow Influence not detected interprocedurally #18100

JustusAdam opened this issue Nov 25, 2024 · 0 comments
Labels
question Further information is requested

Comments

@JustusAdam
Copy link

The controls predicate from GuardCondition does not detect influence across function boundaries. Is this intended behavior?

Here is the code for my example. Influence from condition in line 23 is detected but not from line 14.

Similarly the influence on call() in line 30 is detected but not on line 8.

#include <exception>

void call()
{
}

void call_wrapper()
{
    call(); // not detected as controlled
}

void check_condition(bool condition)
{
    if (condition) // not detected as controlling
    {
        throw std::exception();
    }
}

void my_fn(bool outer, bool condition)
{

    if (condition) // detected as controlling
    {
        throw std::exception();
    }

    check_condition(condition);

    call(); // detected as controlled

    call_wrapper();
}
import cpp
import semmle.code.cpp.controlflow.IRGuards

from Variable v, VariableAccess va, GuardCondition cond, Call c, int line
where
  c.getTarget().getName() = "call" and
  va.getTarget() = v and
  v.getName() = "condition" and
  cond.getAChild*() = va and
  cond.controls(c.getBasicBlock(), _) and
  line = va.getLocation().getStartLine()
select v, va, cond, c, line
|     v     |    va     |   cond    |      c       | line |
+-----------+-----------+-----------+--------------+------+
| condition | condition | condition | call to call |   23 |

CodeQL version: 2.19.3

@JustusAdam JustusAdam added the question Further information is requested label Nov 25, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Further information is requested
Projects
None yet
Development

No branches or pull requests

1 participant