All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
- Progress bar causing call graph pass to freeze on large graphs. This has been removed.
- Resource clearing was accidentally commented out in 0.3.8 - this has been addressed.
- Progress bar when logging level is
>= Level.INFO
for method related operations - Added cache2k to handle caching
CacheMetrics
to track hits and missesMETHOD_PARAMETER_IN
-PARAMETER_LINK
->METHOD_PARAMETER_OUT
edge was included
- Improved the node caching and centralized
tryGet
andgetOrMake
-style operations toDriverCache.kt
- Separated the cache and storage into
storage._Cache
classes andstorage.PlumeStorage
- Method/Local/MethodParameterIn have been created more closely to Ocular's output.
TigerGraphDriver
bug where empty strings for intentional properties would be unintentionally excluded.Member.name
andFieldIdentifier.code
properly handled- Fixed temp dir resolution issue on macOS and Windows
CONTAINS
edges are generated forMETHOD
to body vertices.ListMapper
to process Scala lists to a serialized string and back. More formally processing Scala lists to and from OverflowDB node objects.- Handle inheritance edges i.e.
TYPE_DECL -INHERITS_FROM-> TYPE
BaseCpgPass
now uses a local cache for method body nodes instead of relying solely onGlobalCache
SCPGPass
now known asDataFlowPass
as all passes now come fromdataflowengineoss
.- Added
PROGRAM_STRUCTURE
to timer keys.
IDriver::getVerticesOfType
to aid in caching from existing database vertices.- External methods signatures are parsed to figure out their method parameters.
MethodStubPass
andBaseCPGPass
now includesMETHOD_PARAM_IN
andMETHOD_PARAM_OUT
and connects them to their type.- Field accesses are now constructed as a
Call
vertex. - Plume now has a new logo and branding.
- Better logging for loaded files.
- Many of the
nodeCache
uses inIProgramPass
passes were converted to using theGlobalCache
instead. MethodStubPass
now runs in parallel if possible.
- Upped the default chunk size
DeltaGraph::toOverflowDb
can now take in an optionaloverflowdb.Graph
object to write to
- Memory leak where thread pools weren't getting shutdown
DeltaGraph
as aNewNodeBuilder
variant of ShiftLeft'sDiffGraph
.BaseCpgPass
which is a combination of theASTPass
,CFGPass
, andPDGPass
and returns aDeltaGraph
instead of directly apply changes to the driver.methodBodies
was added toGlobalCache
to save on database requests when moving toSCPGPass
afterBaseCpgPass
- Chunk size can now be configured via
ExtractorOptions::methodChunkSize
- Replaced
ASTPass
,CFGPass
, andPDGPass
withBaseCpgPass
. - Spawns a thread pool to run base CPG building in parallel and apply
DeltaGraph
s in serial. - SCPG flows are only run on new/updated method bodies since the analysis is independent of other methods.
- Types for global primitives
- Return types are now added to all types built in the CPG
- Moved the maps in
Extractor
to a dedicatedGlobalCache
object that usesConcurrentHashMap
s. - SCPG pass now concurrently pulls all methods and merges it into an input graph. This code has been moved to
passes.SCPGPass.kt
- External method stubs have call-to-returns generated i.e. (METHOD)-CFG->(RETURN)-CFG->(METHOD_RETURN)
- Better
INFO
threshold logging withinExtractor::project
.
- Combined
Extractor::project
andExtractor::postProject
intoproject
. - Deprecated
getProgramTypeData
- Changed
UNIT_GRAPH_BUILDING
toSOOT
and added the time taken on loading files into Soot, calling FastHierarchy, and using Soot's call graph.
- Method pass
MethodStubPass
- Structure pass
ExternalTypePass
,FileAndPackagePass
,MarkForRebuildPass
, andTypePass
- Type pass
GlobalTypePass
- Added
getVerticesByProperty
andgetPropertyFromVertices
toIDriver
- Graph builders are now known as "passes" to conform to how SCPG builds graphs. Each has an interface
under
IGraphPass
. graph/[AST|CFG|PDG|CallGraph]Builder
topasses/graph/[AST|CFG|PDG|CallGraph]Pass
- Deprecated
getMethodNames
- Added timer probes regarding database closer to database methods
- Duplication of files, types, namespace vertices on updates
ContainsEdgePass
added beforeReachingDefPass
PlumeTimer
to measure various intervals of the projection process- Added a filter step before
constructStructure
call inExtractor::project
as not to duplicate types
- Fixed
PlumeKeyProvider
infinite loop and added proper tests forgetNewId
- Added a check in the setter for
keyPoolSize
to not allow anything less than 1
- Added
getMethodNames
andgetProgramTypeData
toIDriver
- Used
getMethodNames
andgetProgramTypeData
to reduce the sub-graphs inExtractor::postProject
- Changed subgraph-style results to list of edge results in order to improve performance in
GremlinDriver
- Switched to using
SLF4J
as the logging API
- Fixed issue where
${sys:LOG_DIR}
is generated when there is nolog4j2
config file Call
vertices not containing consistent full names and signatures asMethod
vertices. Resolves #76.
- Log4j-Core is now only added as a
testImplementation
since this is used as a library and not an application ExtractorConst::getPlumeVersion
now used to get package versionVERSION.md
is now where the build obtains version details
code
,lineNumber
,columnNumber
toArrayInitializer
- Escape " (quotes) to fix Neo4j bug where strings containing quotes fail vertex insertion
TypeDecl
toArrayInitializer
edge warning
TigerGraphDriver::authKey
never null and now just blank if not set- Removed
log4f2.properties
under the main artifact - Made the visibility of driver constructors module specific so that users are forced to use the
DriverFactory
connect
methods on drivers now return the driver instead of nothing.
ISchemeSafeDriver
interface for drivers who can install schemas on the databaseJanusGraphDriver::buildSchema
to dynamically build and install JanusGraph schema
- Dependency
com.tigergraph.client:gsql_client
TigerGraphDriver::buildSchema
to dynamically build and install GSQL schema
- Assigned all operator calls to
io.shiftleft.codepropertygraph.generated.Operators
constants - Assigned values to
ControlStructure::controlStructureType
- Improved logging
Extractor::postProject
to add additionalio.shiftleft.semanticcpg.passes
andio.shiftleft.dataflowengineoss.passes
- Added
IDriver::getMetaData
to get theNewMetaData
vertex from the database if present
Extractor::load
andExtractor::project
now returnExtractor
instance to allow call chaining
- Graph updates would add duplicate program structure information and fail to link prior
CALL
edges - Handle the case where
NewFileBuilder#hash
is null - Where
TypeDecl
s were attempted to be duplicated ingetProgramStructure
- Fixed case where
Node
types were not handled inDiffGraphUtil::processDiffGraph
IDriver::getProgramStructure
would not return vertices with degree 0
deleteEdge
toIDriver
updateVertexProperty
toIDriver
DiffGraphUtil::processDiffGraph
to acceptDiffGraph
s and apply changes to a givenIDriver
- Modified
deleteVertex
signature to take ID and optional label
- Lifted compilation directory to $TEMP/plume/build. This is then deleted recursively after project.
- Module not found bug introduced by improper class cleanup in temp dir.
- Fixed instances where CallGraphBuilder would connect non-NewCallBuilder source nodes to methods.
- Fixed GraphML not escaping ampersands
- Support for loading JAR files via
load
function
AST
edges betweenTypeDecl
and theirModifier
sSOURCE_FILE
edges betweenTypeDecl
and theirFile
s- A
File
vertex to represent unknown files
- When Soot cannot get method data, it will log this as a warning instead of throwing a
RuntimeException
TypeDecl
are now properly generated for external types
- Replaced Plume enums with
codepropertygraph
constants
CALL
edges not created if nostatic void main
present
- Performance issues with
getProgramStructure
inOverflowDbDriver
- Replaced
PlumeGraph
withoverflowdb.Graph
. - Removed Gremlin driver transaction logic being present by default.
- Fixed
cmp
bug by adding this toExtractorConst#BIN_OPS
. - Neo4j driver now also connects in the extractor if given to extractor disconnected
- Upgraded ASM5 -> ASM8 to fix some JAR support
- Migrated to ShiftLeft's codepropertygraph domain classes
- Migrated from Neo4j Gremlin Bolt to Neo4j Java Driver (Official Driver)
- Fixed order property and got rid of old implementation
- Removed use of reflection to improve performance of serializing and deserializing
- Extractor now longer halts process if a schema violation occurs
- ShiftLeft dependencies upgraded
- Argument index was not being implemented properly, this has been fixed.
- The following additional configuration options for OverflowDB
- overflow
- heapPercentageThreshold
- serializationStatsEnabled
- The configuration option
dbfilename
changed tostorageLocation
to match OverflowDB's respective config's name. - Removed polyglot support
- All analyzed files are sent to a temp directory so there is no longer a need to specify class path in the Extractor
- Replaced REF edges between calls and methods with CALL edges.
- Broken jCenter link in README
- Support for 6 graph databases
- TinkerGraph
- OverflowDB
- JanusGraph
- TigerGraph
- Amazon Neptune
- Neo4j
- Can extract code property graphs using Soot for:
- Java class and source code
- JavaScript 170 (1.7)
- Python 2.72
- Can construct call graphs using Soot with the following algorithms:
- CHA
- SPARK