io.joern.x2cpg.passes.frontend

Members list

Concise view

Type members

Classlikes

case class CallAlias(identifier: String) extends LocalKey

A name that refers to some kind of callee.

A name that refers to some kind of callee.

Attributes

Graph
Supertypes
trait Serializable
trait Product
trait Equals
class LocalKey
class SBKey
class Object
trait Matchable
class Any
case class FieldVar(compUnitFullName: String, identifier: String) extends GlobalKey

Represents a field identifier at its declared computational unit.

Represents a field identifier at its declared computational unit.

Attributes

compUnitFullName

the computational unit's full name.

identifier

the canonical name.

Graph
Supertypes
trait Serializable
trait Product
trait Equals
class GlobalKey
class SBKey
class Object
trait Matchable
class Any
sealed class GlobalKey extends SBKey

Represents an identifier of some AST node at an interprocedural scope.

Represents an identifier of some AST node at an interprocedural scope.

Attributes

Graph
Supertypes
class SBKey
class Object
trait Matchable
class Any
Known subtypes
class FieldVar
class JavascriptCallLinker(cpg: Cpg) extends CpgPass

The Javascript specific call linker links static call sites (by full name) and call sites to methods in the same file (by name).

The Javascript specific call linker links static call sites (by full name) and call sites to methods in the same file (by name).

Attributes

Graph
Supertypes
class CpgPass
class ForkJoinParallelCpgPass[AnyRef]
class NewStyleCpgPassBase[AnyRef]
trait CpgPassBase
class Object
trait Matchable
class Any
sealed class LocalKey extends SBKey

Represents an identifier of some AST node at an intraprocedural scope.

Represents an identifier of some AST node at an intraprocedural scope.

Attributes

Graph
Supertypes
class SBKey
class Object
trait Matchable
class Any
Known subtypes
class CallAlias
class LocalVar
case class LocalVar(identifier: String) extends LocalKey

A variable that holds data within an intraprocedural scope.

A variable that holds data within an intraprocedural scope.

Attributes

Graph
Supertypes
trait Serializable
trait Product
trait Equals
class LocalKey
class SBKey
class Object
trait Matchable
class Any
class MetaDataPass(cpg: Cpg, language: String, root: String) extends CpgPass

A pass that creates a MetaData node, specifying that this is a CPG for language, and a NamespaceBlock for anything that cannot be assigned to any other namespace.

A pass that creates a MetaData node, specifying that this is a CPG for language, and a NamespaceBlock for anything that cannot be assigned to any other namespace.

Attributes

Companion:
object
Graph
Supertypes
class CpgPass
class ForkJoinParallelCpgPass[AnyRef]
class NewStyleCpgPassBase[AnyRef]
trait CpgPassBase
class Object
trait Matchable
class Any

Attributes

Companion:
class
Graph
Supertypes
class Object
trait Matchable
class Any
Self type
abstract class RecoverForXCompilationUnit[ComputationalUnit <: AstNode](cu: ComputationalUnit, builder: DiffGraphBuilder, globalTable: SymbolTable[GlobalKey]) extends RecursiveTask[Unit]

Performs type recovery from the root of a compilation unit level

Performs type recovery from the root of a compilation unit level

Attributes

ComputationalUnit

the AstNode type used to represent a computational unit of the language.

builder

the graph builder

cu

a compilation unit, e.g. file, procedure, type, etc.

Graph
Supertypes
class RecursiveTask[Unit]
class ForkJoinTask[Unit]
trait Serializable
trait Future[Unit]
class Object
trait Matchable
class Any
abstract class SBKey

Represents an identifier of some AST node at a specific scope.

Represents an identifier of some AST node at a specific scope.

Attributes

Companion:
object
Graph
Supertypes
class Object
trait Matchable
class Any
Known subtypes
class GlobalKey
class FieldVar
class LocalKey
class CallAlias
class LocalVar
object SBKey

Attributes

Companion:
class
Graph
Supertypes
class Object
trait Matchable
class Any
Self type
SBKey.type
abstract class ScopedXProcedure(val callingName: String, val fullName: String, val isConstructor: Boolean)

Defines how a procedure is available to be called in the current scope either by it being defined in this module or being imported.

Defines how a procedure is available to be called in the current scope either by it being defined in this module or being imported.

Attributes

callingName

how this procedure is to be called, i.e., alias name, name with path, etc.

fullName

the full name to where this method is defined.

Graph
Supertypes
class Object
trait Matchable
class Any
abstract class SetXProcedureDefTask(node: CfgNode) extends RecursiveTask[Unit]

Tasks responsible for populating the symbol table with import data.

Tasks responsible for populating the symbol table with import data.

Attributes

node

a node that references import information.

Graph
Supertypes
class RecursiveTask[Unit]
class ForkJoinTask[Unit]
trait Serializable
trait Future[Unit]
class Object
trait Matchable
class Any
class SymbolTable[K <: SBKey](fromNode: AstNode => K)

A thread-safe symbol table that can represent multiple types per symbol. Each node in an AST gets converted to an SBKey which gives contextual information to identify an AST entity. Each value in this table represents a set of types that the key could be in a flow-insensitive manner.

A thread-safe symbol table that can represent multiple types per symbol. Each node in an AST gets converted to an SBKey which gives contextual information to identify an AST entity. Each value in this table represents a set of types that the key could be in a flow-insensitive manner.

The SymbolTable operates like a map with a few convenient methods that are designed for this structure's purpose.

Attributes

Graph
Supertypes
class Object
trait Matchable
class Any
class TypeNodePass(usedTypes: List[String], cpg: Cpg, keyPool: Option[KeyPool]) extends CpgPass

Creates a TYPE node for each type in usedTypes

Creates a TYPE node for each type in usedTypes

Attributes

Companion:
object
Graph
Supertypes
class CpgPass
class ForkJoinParallelCpgPass[AnyRef]
class NewStyleCpgPassBase[AnyRef]
trait CpgPassBase
class Object
trait Matchable
class Any

Attributes

Companion:
class
Graph
Supertypes
class Object
trait Matchable
class Any
Self type
abstract class XTypeHintCallLinker(cpg: Cpg) extends CpgPass

Attempts to set the methodFullName and link to callees using the recovered type information from XTypeRecovery. Note that some methods may not be present as they could be external and have been dynamically discovered, thus the io.joern.x2cpg.passes.base.MethodStubCreator would have missed it.

Attempts to set the methodFullName and link to callees using the recovered type information from XTypeRecovery. Note that some methods may not be present as they could be external and have been dynamically discovered, thus the io.joern.x2cpg.passes.base.MethodStubCreator would have missed it.

Attributes

cpg

the target code property graph.

Graph
Supertypes
class CpgPass
class ForkJoinParallelCpgPass[AnyRef]
class NewStyleCpgPassBase[AnyRef]
trait CpgPassBase
class Object
trait Matchable
class Any
abstract class XTypeRecovery[ComputationalUnit <: AstNode](cpg: Cpg, iterations: Int) extends CpgPass

Based on a flow-insensitive symbol-table-style approach. This pass aims to be fast and deterministic and does not try to converge to some fixed point but rather iterates a fixed number of times. This will help recover:

Based on a flow-insensitive symbol-table-style approach. This pass aims to be fast and deterministic and does not try to converge to some fixed point but rather iterates a fixed number of times. This will help recover:

  • Imported call signatures from external dependencies
  • Dynamic type hints for mutable variables in a computational unit.

The algorithm flows roughly as follows:

  • Scan for method signatures of methods for each compilation unit, either by internally defined methods or by reading import signatures. This includes looking for aliases, e.g. import foo as bar.
  • (Optionally) Prune these method signatures by checking their validity against the CPG.
  • Visit assignments to populate where variables are assigned a value to extrapolate its type. Store these values in a local symbol table. If a field is assigned a value, store this in the global table
  • Find instances of where these fields and variables are used and update their type information.
  • If this variable is the receiver of a call, make sure to set the type of the call accordingly.

In order to propagate types across computational units, but avoid the poor scalability of a fixed-point algorithm, the number of iterations can be configured using the iterations parameter. Note that iterations < 2 will not provide any interprocedural type recovery capabilities.

The symbol tables use the SymbolTable class to track possible type information.
Note: Local symbols are cleared once a compilation unit is complete. This is to keep memory usage down while maximizing concurrency.

Attributes

ComputationalUnit

the AstNode type used to represent a computational unit of the language.

cpg

the CPG to recovery types for.

iterations

the total number of iterations through which types are to be propagated. At least 2 are recommended in order to propagate interprocedural types. Think of this as similar to the dataflowengineoss' 'maxCallDepth'.

Graph
Supertypes
class CpgPass
class ForkJoinParallelCpgPass[AnyRef]
class NewStyleCpgPassBase[AnyRef]
trait CpgPassBase
class Object
trait Matchable
class Any