├── .gitignore ├── AUTHORS ├── LICENSE ├── README.md ├── RELEASE_NOTES ├── build.gradle ├── build.sh ├── docs ├── Makefile ├── make.bat └── source │ ├── _static │ ├── ast.svg │ ├── cfg.svg │ ├── ddgAndCfg.svg │ └── slice.svg │ ├── conf.py │ ├── databaseOverview.rst │ ├── development.rst │ ├── import.rst │ ├── index.rst │ ├── installation.rst │ ├── joerntools.rst │ ├── joerntools │ ├── apiEmbedder.rst │ ├── knn.rst │ ├── plot-proggraph.rst │ └── slice.rst │ ├── performance.rst │ ├── pythonAccess.rst │ ├── querying.rst │ ├── shell.rst │ ├── tutorials.rst │ └── tutorials │ ├── extrapolation.rst │ └── unixStyleCodeAnalysis.rst ├── eclipse └── formatter.xml ├── gremtest ├── README.md ├── gremtest ├── gremtest.groovy ├── import_testcode.sh └── test_stdlib │ ├── testdata │ ├── test_cfg.c │ ├── test_function.c │ └── test_syntax.c │ └── tests │ ├── cfg.groovy │ ├── function.groovy │ └── syntax.groovy ├── joern-parse ├── joern-server.sh ├── phpast2cpg ├── projects ├── extensions │ ├── joern-fuzzyc │ │ ├── build.gradle │ │ ├── genParsers.sh │ │ ├── rebuildTestDB.sh │ │ ├── src │ │ │ ├── main │ │ │ │ └── java │ │ │ │ │ ├── antlr │ │ │ │ │ ├── CoarseSimpleDecl.g4 │ │ │ │ │ ├── Common.g4 │ │ │ │ │ ├── Expressions.g4 │ │ │ │ │ ├── FineSimpleDecl.g4 │ │ │ │ │ ├── Function.g4 │ │ │ │ │ ├── Function.tokens │ │ │ │ │ ├── FunctionBaseListener.java │ │ │ │ │ ├── FunctionDef.g4 │ │ │ │ │ ├── FunctionLexer.java │ │ │ │ │ ├── FunctionLexer.tokens │ │ │ │ │ ├── FunctionListener.java │ │ │ │ │ ├── FunctionParser.java │ │ │ │ │ ├── Module.g4 │ │ │ │ │ ├── Module.tokens │ │ │ │ │ ├── ModuleBaseListener.java │ │ │ │ │ ├── ModuleLex.g4 │ │ │ │ │ ├── ModuleLexer.java │ │ │ │ │ ├── ModuleLexer.tokens │ │ │ │ │ ├── ModuleListener.java │ │ │ │ │ ├── ModuleParser.java │ │ │ │ │ ├── README │ │ │ │ │ └── SimpleDecl.g4 │ │ │ │ │ ├── ast │ │ │ │ │ └── c │ │ │ │ │ │ ├── expressions │ │ │ │ │ │ ├── CallExpression.java │ │ │ │ │ │ └── SizeofExpression.java │ │ │ │ │ │ ├── functionDef │ │ │ │ │ │ ├── FunctionDef.java │ │ │ │ │ │ ├── Parameter.java │ │ │ │ │ │ └── ParameterType.java │ │ │ │ │ │ └── statements │ │ │ │ │ │ └── blockstarters │ │ │ │ │ │ ├── ElseStatement.java │ │ │ │ │ │ └── IfStatement.java │ │ │ │ │ ├── cfg │ │ │ │ │ ├── CCFGFactory.java │ │ │ │ │ └── CStructuredFlowVisitor.java │ │ │ │ │ ├── ddg │ │ │ │ │ └── DefUseCFG │ │ │ │ │ │ ├── BatchInserterFactory.java │ │ │ │ │ │ ├── DatabaseDDGCreator.java │ │ │ │ │ │ └── ReadWriteDbFactory.java │ │ │ │ │ ├── neo4j │ │ │ │ │ ├── batchInserter │ │ │ │ │ │ ├── ConfigurationGenerator.java │ │ │ │ │ │ ├── GraphNodeStore.java │ │ │ │ │ │ ├── ImportedNodeListener.java │ │ │ │ │ │ ├── ImportedNodeWalker.java │ │ │ │ │ │ └── Neo4JBatchInserter.java │ │ │ │ │ ├── dbProviders │ │ │ │ │ │ ├── BatchInserterDBProvider.java │ │ │ │ │ │ ├── DBProvider.java │ │ │ │ │ │ └── ReadWriteDBProvider.java │ │ │ │ │ ├── readWriteDB │ │ │ │ │ │ ├── ConfigurationGenerator.java │ │ │ │ │ │ └── Neo4JDBInterface.java │ │ │ │ │ └── traversals │ │ │ │ │ │ ├── batchInserter │ │ │ │ │ │ ├── AST.java │ │ │ │ │ │ ├── CFG.java │ │ │ │ │ │ ├── Elementary.java │ │ │ │ │ │ └── Function.java │ │ │ │ │ │ └── readWriteDB │ │ │ │ │ │ └── Traversals.java │ │ │ │ │ ├── outputModules │ │ │ │ │ ├── csv │ │ │ │ │ │ └── exporters │ │ │ │ │ │ │ └── CCSVFunctionExporter.java │ │ │ │ │ └── neo4j │ │ │ │ │ │ ├── Neo4JASTNodeVisitor.java │ │ │ │ │ │ ├── Neo4JASTWalker.java │ │ │ │ │ │ ├── Neo4JDirectoryTreeImporter.java │ │ │ │ │ │ ├── Neo4JFunctionExporter.java │ │ │ │ │ │ ├── ParserNeo4JOutput.java │ │ │ │ │ │ └── exporters │ │ │ │ │ │ ├── Neo4JASTExporter.java │ │ │ │ │ │ ├── Neo4JASTNodeExporter.java │ │ │ │ │ │ ├── Neo4JCDGExporter.java │ │ │ │ │ │ ├── Neo4JCFGExporter.java │ │ │ │ │ │ ├── Neo4JClassDefExporter.java │ │ │ │ │ │ ├── Neo4JDDGExporter.java │ │ │ │ │ │ ├── Neo4JDOMExporter.java │ │ │ │ │ │ ├── Neo4JDeclExporter.java │ │ │ │ │ │ ├── Neo4JDeclStmtExporter.java │ │ │ │ │ │ └── Neo4JUDGExporter.java │ │ │ │ │ ├── parsing │ │ │ │ │ ├── ANTLRParserDriver.java │ │ │ │ │ ├── ASTNodeFactory.java │ │ │ │ │ ├── CodeLocationExtractor.java │ │ │ │ │ ├── CommonParserContext.java │ │ │ │ │ ├── CompoundItemAssembler.java │ │ │ │ │ ├── FunctionParser.java │ │ │ │ │ ├── Functions │ │ │ │ │ │ ├── ANTLRCFunctionParserDriver.java │ │ │ │ │ │ ├── CFunctionParseTreeListener.java │ │ │ │ │ │ └── builder │ │ │ │ │ │ │ ├── ContentBuilderStack.java │ │ │ │ │ │ │ ├── FunctionContentBuilder.java │ │ │ │ │ │ │ ├── NestingReconstructor.java │ │ │ │ │ │ │ ├── ParameterListBuilder.java │ │ │ │ │ │ │ └── ShadowStack.java │ │ │ │ │ ├── ModuleFunctionParserInterface.java │ │ │ │ │ ├── ModuleParser.java │ │ │ │ │ ├── Modules │ │ │ │ │ │ ├── ANTLRCModuleParserDriver.java │ │ │ │ │ │ ├── CModuleParserTreeListener.java │ │ │ │ │ │ └── builder │ │ │ │ │ │ │ └── FunctionDefBuilder.java │ │ │ │ │ ├── ParseTreeUtils.java │ │ │ │ │ ├── ParserException.java │ │ │ │ │ ├── Shared │ │ │ │ │ │ ├── InitDeclContextWrapper.java │ │ │ │ │ │ └── builders │ │ │ │ │ │ │ ├── ClassDefBuilder.java │ │ │ │ │ │ │ └── IdentifierDeclBuilder.java │ │ │ │ │ └── TokenSubStream.java │ │ │ │ │ ├── tools │ │ │ │ │ ├── argumentTainter │ │ │ │ │ │ ├── ArgumentTainter.java │ │ │ │ │ │ ├── ArgumentTainterMain.java │ │ │ │ │ │ ├── CallsForFunction.java │ │ │ │ │ │ ├── CommandLineInterface.java │ │ │ │ │ │ ├── DDGPatcher.java │ │ │ │ │ │ ├── DefUseCFGPatcher.java │ │ │ │ │ │ └── FunctionPatcher.java │ │ │ │ │ ├── icfg │ │ │ │ │ │ ├── CallResolver.java │ │ │ │ │ │ ├── GraphDbWalker.java │ │ │ │ │ │ ├── ICFGCommandLineInterface.java │ │ │ │ │ │ ├── ICFGListener.java │ │ │ │ │ │ └── ICFGMain.java │ │ │ │ │ └── parser │ │ │ │ │ │ ├── CParserCSVOutput.java │ │ │ │ │ │ ├── CParserNeo4JOutput.java │ │ │ │ │ │ ├── ParserCmdLineInterface.java │ │ │ │ │ │ └── ParserMain.java │ │ │ │ │ └── udg │ │ │ │ │ ├── ReadWriteDbASTProvider.java │ │ │ │ │ └── useDefAnalysis │ │ │ │ │ ├── CASTDefUseAnalyzer.java │ │ │ │ │ ├── CUseDefExpression.java │ │ │ │ │ ├── TaintSources.java │ │ │ │ │ └── environments │ │ │ │ │ ├── ArgumentEnvironment.java │ │ │ │ │ ├── ArrayIndexingEnvironment.java │ │ │ │ │ ├── AssignmentEnvironment.java │ │ │ │ │ ├── CallEnvironment.java │ │ │ │ │ ├── DeclEnvironment.java │ │ │ │ │ ├── IdentifierEnvironment.java │ │ │ │ │ ├── IncDecEnvironment.java │ │ │ │ │ ├── MemberAccessEnvironment.java │ │ │ │ │ ├── PtrMemberAccessEnvironment.java │ │ │ │ │ ├── UnaryOpEnvironment.java │ │ │ │ │ └── UseEnvironment.java │ │ │ └── test │ │ │ │ └── java │ │ │ │ └── tests │ │ │ │ ├── TestDBTestReadWriteDB.java │ │ │ │ ├── TestDBTestsBatchInserter.java │ │ │ │ ├── argumentTainter │ │ │ │ └── TestArgumentTainter.java │ │ │ │ ├── ddg │ │ │ │ └── testDDGCreator.java │ │ │ │ ├── languages │ │ │ │ └── c │ │ │ │ │ ├── antlrParsers │ │ │ │ │ ├── functionParser │ │ │ │ │ │ ├── AssignmentTests.java │ │ │ │ │ │ ├── ForLoopTests.java │ │ │ │ │ │ ├── FunctionCallTests.java │ │ │ │ │ │ ├── FunctionParserTest.java │ │ │ │ │ │ └── FunctionParserTestBase.java │ │ │ │ │ └── moduleParser │ │ │ │ │ │ ├── ClassDeclarationTest.java │ │ │ │ │ │ ├── FunctionDefinitionTests.java │ │ │ │ │ │ ├── FunctionParameterTests.java │ │ │ │ │ │ ├── FunctionReturnValueTests.java │ │ │ │ │ │ ├── OtherTests.java │ │ │ │ │ │ └── PreprocessorTests.java │ │ │ │ │ ├── cfgCreation │ │ │ │ │ ├── AssignmentTests.java │ │ │ │ │ ├── CCFGCreatorTest.java │ │ │ │ │ ├── IfBlockTests.java │ │ │ │ │ └── OtherTests.java │ │ │ │ │ └── parseTreeToAST │ │ │ │ │ ├── CodeNestingTest.java │ │ │ │ │ ├── DoWhileTests.java │ │ │ │ │ ├── ExpressionParsingTest.java │ │ │ │ │ ├── FunctionContentTestUtil.java │ │ │ │ │ ├── IfNestingTests.java │ │ │ │ │ ├── ModuleBuildersTest.java │ │ │ │ │ ├── PreprocessorTests.java │ │ │ │ │ └── TestASTWalker.java │ │ │ │ └── udg │ │ │ │ ├── CFGCreator.java │ │ │ │ └── testUseDefGraphCreator.java │ │ └── testCode │ │ │ ├── argumentTainterTest.c │ │ │ ├── cfgTest.c │ │ │ ├── ddgTest.c │ │ │ ├── joernStepsTest.c │ │ │ ├── nesting.c │ │ │ ├── parserTests.c │ │ │ ├── tryCatchTest.c │ │ │ └── udgTest.c │ ├── joern-php │ │ ├── HOWTO_PHP │ │ ├── build.gradle │ │ ├── rebuildTestCSVs.sh │ │ └── src │ │ │ ├── main │ │ │ └── java │ │ │ │ ├── ast │ │ │ │ └── php │ │ │ │ │ ├── declarations │ │ │ │ │ └── ClassDef.java │ │ │ │ │ ├── expressions │ │ │ │ │ ├── ArrayElement.java │ │ │ │ │ ├── ArrayExpression.java │ │ │ │ │ ├── AssignmentByRefExpression.java │ │ │ │ │ ├── ClassExpression.java │ │ │ │ │ ├── CloneExpression.java │ │ │ │ │ ├── ClosureExpression.java │ │ │ │ │ ├── CoalesceExpression.java │ │ │ │ │ ├── EmptyExpression.java │ │ │ │ │ ├── EncapsListExpression.java │ │ │ │ │ ├── ExitExpression.java │ │ │ │ │ ├── IncludeOrEvalExpression.java │ │ │ │ │ ├── IssetExpression.java │ │ │ │ │ ├── ListExpression.java │ │ │ │ │ ├── MagicConstant.java │ │ │ │ │ ├── MethodCallExpression.java │ │ │ │ │ ├── PrintExpression.java │ │ │ │ │ ├── ReferenceExpression.java │ │ │ │ │ ├── ShellExecExpression.java │ │ │ │ │ ├── StaticCallExpression.java │ │ │ │ │ ├── TypeHint.java │ │ │ │ │ ├── UnpackExpression.java │ │ │ │ │ ├── YieldExpression.java │ │ │ │ │ └── YieldFromExpression.java │ │ │ │ │ ├── functionDef │ │ │ │ │ ├── Closure.java │ │ │ │ │ ├── ClosureUses.java │ │ │ │ │ ├── ClosureVar.java │ │ │ │ │ ├── FunctionDef.java │ │ │ │ │ ├── Method.java │ │ │ │ │ ├── Parameter.java │ │ │ │ │ └── TopLevelFunctionDef.java │ │ │ │ │ └── statements │ │ │ │ │ ├── ClassConstantDeclaration.java │ │ │ │ │ ├── ConstantDeclaration.java │ │ │ │ │ ├── ConstantElement.java │ │ │ │ │ ├── EchoStatement.java │ │ │ │ │ ├── GlobalStatement.java │ │ │ │ │ ├── GroupUseStatement.java │ │ │ │ │ ├── HaltCompilerStatement.java │ │ │ │ │ ├── PropertyDeclaration.java │ │ │ │ │ ├── PropertyElement.java │ │ │ │ │ ├── StaticVariableDeclaration.java │ │ │ │ │ ├── UnsetStatement.java │ │ │ │ │ └── blockstarters │ │ │ │ │ ├── DeclareStatement.java │ │ │ │ │ ├── IfElement.java │ │ │ │ │ ├── IfStatement.java │ │ │ │ │ ├── SwitchCase.java │ │ │ │ │ ├── SwitchList.java │ │ │ │ │ ├── SwitchStatementPHP.java │ │ │ │ │ ├── TraitAdaptationElement.java │ │ │ │ │ ├── TraitAdaptations.java │ │ │ │ │ ├── TraitAlias.java │ │ │ │ │ ├── TraitPrecedence.java │ │ │ │ │ └── UseTrait.java │ │ │ │ ├── cfg │ │ │ │ ├── PHPCFGFactory.java │ │ │ │ └── PHPStructuredFlowVisitor.java │ │ │ │ ├── cg │ │ │ │ └── PHPCGFactory.java │ │ │ │ ├── inputModules │ │ │ │ └── csv │ │ │ │ │ ├── PHPCSVEdgeTypes.java │ │ │ │ │ ├── PHPCSVNodeTypes.java │ │ │ │ │ ├── csv2ast │ │ │ │ │ └── PHPCSV2AST.java │ │ │ │ │ └── csvFuncExtractor │ │ │ │ │ └── CSVFunctionExtractor.java │ │ │ │ ├── tools │ │ │ │ └── php │ │ │ │ │ └── ast2cpg │ │ │ │ │ ├── CommandLineInterface.java │ │ │ │ │ ├── Main.java │ │ │ │ │ ├── PHPCSVEdgeInterpreter.java │ │ │ │ │ └── PHPCSVNodeInterpreter.java │ │ │ │ └── udg │ │ │ │ └── php │ │ │ │ └── useDefAnalysis │ │ │ │ ├── PHPASTDefUseAnalyzer.java │ │ │ │ └── environments │ │ │ │ ├── ArrayIndexingEnvironment.java │ │ │ │ ├── AssignmentEnvironment.java │ │ │ │ ├── AssignmentWithOpEnvironment.java │ │ │ │ ├── CatchEnvironment.java │ │ │ │ ├── ClassConstantEnvironment.java │ │ │ │ ├── ClosureVarEnvironment.java │ │ │ │ ├── ConstantEnvironment.java │ │ │ │ ├── DoEnvironment.java │ │ │ │ ├── FieldDeclarationEnvironment.java │ │ │ │ ├── ForEachEnvironment.java │ │ │ │ ├── ForEnvironment.java │ │ │ │ ├── FunctionDefEnvironment.java │ │ │ │ ├── IfElementEnvironment.java │ │ │ │ ├── IncDecEnvironment.java │ │ │ │ ├── ParameterEnvironment.java │ │ │ │ ├── PropertyEnvironment.java │ │ │ │ ├── StaticPropertyEnvironment.java │ │ │ │ ├── StaticVariableDeclarationEnvironment.java │ │ │ │ ├── SwitchEnvironment.java │ │ │ │ ├── VariableEnvironment.java │ │ │ │ └── WhileEnvironment.java │ │ │ └── test │ │ │ └── java │ │ │ └── tests │ │ │ └── languages │ │ │ └── php │ │ │ ├── PHPCSVBasedTest.java │ │ │ ├── PHPCSVFunctionConverterBasedTest.java │ │ │ ├── PHPCSVFunctionExtractorBasedTest.java │ │ │ ├── astCreation │ │ │ ├── PHPASTCreatorTest.java │ │ │ └── PHPMinimalASTCreatorTest.java │ │ │ ├── cfgCreation │ │ │ ├── StructuredFlowTests.java │ │ │ ├── TrickyCFGTests.java │ │ │ └── UnstructuredFlowTests.java │ │ │ ├── cgCreation │ │ │ └── PHPCGCreatorTest.java │ │ │ ├── ddgCreation │ │ │ └── PHPDDGCreatorTest.java │ │ │ ├── inputModules │ │ │ ├── PHPCSV2ASTTest.java │ │ │ └── PHPCSVFunctionExtractorTest.java │ │ │ ├── samples │ │ │ ├── astCreation │ │ │ │ ├── testArray │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testArrayIndexing │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testAssign │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testAssignByRef │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testAssignWithOp │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testBinaryOperation │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testBreak │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testCall │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testCast │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testClass │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testClassConstant │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testClassConstantDeclaration │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testClone │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testClosure │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testClosureVar │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testCoalesce │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testCompoundStatement │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testConditional │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testConstant │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testConstantDeclaration │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testContinue │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testDeclare │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testDo │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testEcho │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testEmpty │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testEncapsulatedList │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testExit │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testFor │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testForEach │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testFunctionDef │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testGlobal │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testGoto │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testGroupUse │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testHaltCompiler │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testIdentifierList │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testIf │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testIncludeOrEval │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testInstanceof │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testIsset │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testList │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testMagicConstant │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testMethod │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testMethodCall │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testMinimalArgumentList │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testMinimalArray │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testMinimalBreak │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testMinimalCatchList │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testMinimalClass │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testMinimalClosure │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testMinimalCompoundStatement │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testMinimalConditional │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testMinimalContinue │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testMinimalDo │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testMinimalExit │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testMinimalFor │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testMinimalForEach │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testMinimalFunctionDef │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testMinimalIf │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testMinimalList │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testMinimalMethod │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testMinimalParameter │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testMinimalParameterList │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testMinimalReturn │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testMinimalSwitch │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testMinimalTopLevelFunc │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testMinimalTry │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testMinimalUse │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testMinimalUseTrait │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testMinimalWhile │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testMinimalYield │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testNamespace │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testNew │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testParameterList │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testPostDec │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testPostInc │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testPreDec │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testPreInc │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testPrimaryExpression │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testPrint │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testProperty │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testPropertyDeclaration │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testReference │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testReturn │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testShellExec │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testStatic │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testStaticCall │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testStaticProperty │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testSwitch │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testThrow │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testTopLevelFunc │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testTry │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testTypeHint │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testUnaryOperation │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testUnpack │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testUnset │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testUse │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testUseTrait │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testVariable │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testWhile │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testYield │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ └── testYieldFrom │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ ├── cfgCreation │ │ │ │ ├── testBreak │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testContinue │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testDo │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testFor │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testForEach │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testFuncWithParams │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testGoto │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testIf │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testParameterList │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testReturn │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testTrickyBreak │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testTrickyCoalesce │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testTrickyConditional │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testTrickyContinue │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testTrickyForEach │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testTrickySwitch │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testTrickyTry │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testTrickyYield │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testTrickyYieldFrom │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testTry │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ └── testWhile │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ ├── cgCreation │ │ │ │ ├── testAbstractMethodImplementationCall │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testGlobalAndOtherNamespaceConstructorCalls │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testGlobalAndOtherNamespaceFunctionCalls │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testGlobalAndOtherNamespaceImportFunctionCalls │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testGlobalAndOtherNamespaceNonStaticCalls │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testGlobalAndOtherNamespaceNonStaticCallsWithLessCollisions │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testGlobalAndOtherNamespaceStaticCalls │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testSimpleConstructorCalls │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testSimpleFunctionCalls │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testSimpleNonStaticCalls │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testSimpleNonStaticCallsWithNameCollision │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testSimpleStaticCalls │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testTwoFilesConstructorCalls │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foobar │ │ │ │ │ │ ├── bar.php │ │ │ │ │ │ └── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testTwoFilesFunctionCalls │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foobar │ │ │ │ │ │ ├── bar.php │ │ │ │ │ │ └── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testTwoFilesNamespaceImportFunctionCalls │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foobar │ │ │ │ │ │ ├── bar.php │ │ │ │ │ │ └── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testTwoFilesNamespacedConstructorCalls │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foobar │ │ │ │ │ │ ├── bar.php │ │ │ │ │ │ └── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testTwoFilesNamespacedFunctionCalls │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foobar │ │ │ │ │ │ ├── bar.php │ │ │ │ │ │ └── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testTwoFilesNamespacedNonStaticCalls │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foobar │ │ │ │ │ │ ├── bar.php │ │ │ │ │ │ └── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testTwoFilesNamespacedStaticCalls │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foobar │ │ │ │ │ │ ├── bar.php │ │ │ │ │ │ └── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testTwoFilesNonStaticCalls │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foobar │ │ │ │ │ │ ├── bar.php │ │ │ │ │ │ └── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ └── testTwoFilesStaticCalls │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foobar │ │ │ │ │ ├── bar.php │ │ │ │ │ └── foo.php │ │ │ │ │ └── nodes.csv │ │ │ ├── ddgCreation │ │ │ │ ├── testSimpleCompleteProgram │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testSimpleFunction │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ └── testStandaloneFlag │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ ├── funcExtraction │ │ │ │ ├── testFunctionAndTwoClassesWithMethod │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testFunctionPlusTopLevel │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testFunctionWithClosure │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testFunctionWithInnerFunction │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testSingleClass │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testSingleFunction │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testTopLevelFuncTopLevel │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testTwoFiles │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foobar │ │ │ │ │ │ ├── bar.php │ │ │ │ │ │ └── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testTwoFilesWithClassesAndMethods │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foobar │ │ │ │ │ │ ├── bar.php │ │ │ │ │ │ └── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ ├── testTwoFunctions │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ │ └── testTwoFunctionsAndInnerFunction │ │ │ │ │ ├── edges.csv │ │ │ │ │ ├── foo.php │ │ │ │ │ └── nodes.csv │ │ │ └── udgCreation │ │ │ │ ├── testArrayIndexing │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testAssignByRef │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testAssignUsingArray │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testAssignUsingArrayIndexing │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testAssignUsingClassConstants │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testAssignUsingClosureVariables │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testAssignUsingConstants │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testAssignUsingProperties │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testAssignUsingStaticProperties │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testAssignUsingVariables │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testAssignWithOp │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testCall │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testCatch │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testClassConstant │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testClone │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testClosure │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testClosureVariable │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testConstant │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testConstantElement │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testDo │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testEcho │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testEmpty │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testExit │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testFor │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testForEach │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testFunctionDef │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testGlobal │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testIf │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testIncludeOrEval │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testIsset │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testMethod │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testMethodCall │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testNew │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testPostDec │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testPostInc │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testPreDec │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testPreInc │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testPrint │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testProperty │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testPropertyElement │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testReturn │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testShellExec │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testStaticCall │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testStaticProperty │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testStaticVariable │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testSwitch │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testThrow │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testUnset │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testVariable │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testWhile │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ ├── testYield │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ │ └── testYieldFrom │ │ │ │ ├── edges.csv │ │ │ │ ├── foo.php │ │ │ │ └── nodes.csv │ │ │ └── udgCreation │ │ │ ├── PHPASTDefUseAnalyzerTest.java │ │ │ └── PHPUDGCreatorTest.java │ ├── joern │ │ ├── build.gradle │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── joern │ │ │ └── api │ │ │ ├── JoernProject.java │ │ │ ├── connectors │ │ │ └── JoernProjectConnector.java │ │ │ └── plugintypes │ │ │ ├── JoernPlugin.java │ │ │ └── JoernProjectPlugin.java │ └── jpanlib │ │ ├── .gitrepo │ │ ├── AUTHORS │ │ ├── LICENSE │ │ ├── build.gradle │ │ └── src │ │ ├── main │ │ └── java │ │ │ ├── ast │ │ │ ├── ASTNode.java │ │ │ ├── ASTNodeBuilder.java │ │ │ ├── ASTNodeProperties.java │ │ │ ├── CodeLocation.java │ │ │ ├── DummyIdentifierNode.java │ │ │ ├── NullNode.java │ │ │ ├── declarations │ │ │ │ ├── ClassDefStatement.java │ │ │ │ ├── IdentifierDecl.java │ │ │ │ └── IdentifierDeclType.java │ │ │ ├── expressions │ │ │ │ ├── AdditiveExpression.java │ │ │ │ ├── AndExpression.java │ │ │ │ ├── Argument.java │ │ │ │ ├── ArgumentList.java │ │ │ │ ├── ArrayIndexing.java │ │ │ │ ├── AssignmentExpression.java │ │ │ │ ├── AssignmentWithOpExpression.java │ │ │ │ ├── BinaryExpression.java │ │ │ │ ├── BinaryOperationExpression.java │ │ │ │ ├── BitAndExpression.java │ │ │ │ ├── CallExpressionBase.java │ │ │ │ ├── Callee.java │ │ │ │ ├── CastExpression.java │ │ │ │ ├── CastTarget.java │ │ │ │ ├── ClassConstantExpression.java │ │ │ │ ├── ConditionalExpression.java │ │ │ │ ├── Constant.java │ │ │ │ ├── DoubleExpression.java │ │ │ │ ├── EqualityExpression.java │ │ │ │ ├── ExclusiveOrExpression.java │ │ │ │ ├── Expression.java │ │ │ │ ├── ExpressionList.java │ │ │ │ ├── ForInit.java │ │ │ │ ├── Identifier.java │ │ │ │ ├── IdentifierList.java │ │ │ │ ├── IncDec.java │ │ │ │ ├── InclusiveOrExpression.java │ │ │ │ ├── InitializerList.java │ │ │ │ ├── InstanceofExpression.java │ │ │ │ ├── IntegerExpression.java │ │ │ │ ├── MemberAccess.java │ │ │ │ ├── MultiplicativeExpression.java │ │ │ │ ├── NewExpression.java │ │ │ │ ├── OrExpression.java │ │ │ │ ├── PostDecOperationExpression.java │ │ │ │ ├── PostIncDecOperationExpression.java │ │ │ │ ├── PostIncOperationExpression.java │ │ │ │ ├── PostfixExpression.java │ │ │ │ ├── PreDecOperationExpression.java │ │ │ │ ├── PreIncDecOperationExpression.java │ │ │ │ ├── PreIncOperationExpression.java │ │ │ │ ├── PrefixExpression.java │ │ │ │ ├── PrimaryExpression.java │ │ │ │ ├── PropertyExpression.java │ │ │ │ ├── PtrMemberAccess.java │ │ │ │ ├── RelationalExpression.java │ │ │ │ ├── ShiftExpression.java │ │ │ │ ├── Sizeof.java │ │ │ │ ├── SizeofOperand.java │ │ │ │ ├── StaticPropertyExpression.java │ │ │ │ ├── StringExpression.java │ │ │ │ ├── UnaryExpression.java │ │ │ │ ├── UnaryOperationExpression.java │ │ │ │ ├── UnaryOperator.java │ │ │ │ └── Variable.java │ │ │ ├── functionDef │ │ │ │ ├── FunctionDefBase.java │ │ │ │ ├── ParameterBase.java │ │ │ │ ├── ParameterList.java │ │ │ │ └── ReturnType.java │ │ │ ├── logical │ │ │ │ └── statements │ │ │ │ │ ├── BlockCloser.java │ │ │ │ │ ├── BlockStarter.java │ │ │ │ │ ├── BlockStarterWithStmtAndCnd.java │ │ │ │ │ ├── BreakOrContinueStatement.java │ │ │ │ │ ├── CompoundStatement.java │ │ │ │ │ ├── Condition.java │ │ │ │ │ ├── JumpStatement.java │ │ │ │ │ ├── Label.java │ │ │ │ │ └── Statement.java │ │ │ ├── statements │ │ │ │ ├── ExpressionHolder.java │ │ │ │ ├── ExpressionHolderStatement.java │ │ │ │ ├── ExpressionStatement.java │ │ │ │ ├── IdentifierDeclStatement.java │ │ │ │ ├── UseElement.java │ │ │ │ ├── UseStatement.java │ │ │ │ ├── blockstarters │ │ │ │ │ ├── CatchList.java │ │ │ │ │ ├── CatchStatement.java │ │ │ │ │ ├── DoStatement.java │ │ │ │ │ ├── ForEachCondition.java │ │ │ │ │ ├── ForEachStatement.java │ │ │ │ │ ├── ForStatement.java │ │ │ │ │ ├── IfStatementBase.java │ │ │ │ │ ├── MethodReference.java │ │ │ │ │ ├── NamespaceStatement.java │ │ │ │ │ ├── SwitchStatement.java │ │ │ │ │ ├── TryStatement.java │ │ │ │ │ └── WhileStatement.java │ │ │ │ └── jump │ │ │ │ │ ├── BreakStatement.java │ │ │ │ │ ├── ContinueStatement.java │ │ │ │ │ ├── GotoStatement.java │ │ │ │ │ ├── ReturnStatement.java │ │ │ │ │ └── ThrowStatement.java │ │ │ └── walking │ │ │ │ ├── ASTNodeVisitor.java │ │ │ │ ├── ASTWalker.java │ │ │ │ ├── ASTWalkerEvent.java │ │ │ │ └── FunctionNodeVisitor.java │ │ │ ├── cdg │ │ │ ├── CDG.java │ │ │ ├── CDGCreator.java │ │ │ └── CDGEdge.java │ │ │ ├── cfg │ │ │ ├── ASTToCFGConverter.java │ │ │ ├── CFG.java │ │ │ ├── CFGEdge.java │ │ │ ├── CFGFactory.java │ │ │ ├── StructuredFlowVisitor.java │ │ │ └── nodes │ │ │ │ ├── ASTNodeContainer.java │ │ │ │ ├── AbstractCFGNode.java │ │ │ │ ├── CFGEntryNode.java │ │ │ │ ├── CFGErrorNode.java │ │ │ │ ├── CFGExceptionNode.java │ │ │ │ ├── CFGExitNode.java │ │ │ │ ├── CFGNode.java │ │ │ │ ├── EmptyBlock.java │ │ │ │ └── InfiniteForNode.java │ │ │ ├── cg │ │ │ ├── CG.java │ │ │ ├── CGEdge.java │ │ │ └── CGNode.java │ │ │ ├── databaseNodes │ │ │ ├── ASTDatabaseNode.java │ │ │ ├── ClassDefDatabaseNode.java │ │ │ ├── DatabaseNode.java │ │ │ ├── DeclDatabaseNode.java │ │ │ ├── DeclStmtDatabaseNode.java │ │ │ ├── EdgeKeys.java │ │ │ ├── EdgeTypes.java │ │ │ ├── EmptyCFGDatabaseNode.java │ │ │ ├── FileDatabaseNode.java │ │ │ ├── FunctionDatabaseNode.java │ │ │ └── NodeKeys.java │ │ │ ├── ddg │ │ │ ├── CFGAndUDGToDefUseCFG.java │ │ │ ├── DDGCreator.java │ │ │ ├── DataDependenceGraph │ │ │ │ ├── DDG.java │ │ │ │ ├── DDGDifference.java │ │ │ │ └── DefUseRelation.java │ │ │ └── DefUseCFG │ │ │ │ ├── DefUseCFG.java │ │ │ │ └── DefUseCFGFactory.java │ │ │ ├── dom │ │ │ └── DominatorTree.java │ │ │ ├── fileWalker │ │ │ ├── FileNameMatcher.java │ │ │ ├── OrderedWalker.java │ │ │ ├── SourceFileListener.java │ │ │ ├── SourceFileWalker.java │ │ │ ├── UnorderedFileWalkerImpl.java │ │ │ └── UnorderedWalker.java │ │ │ ├── graphutils │ │ │ ├── Edge.java │ │ │ └── IncidenceListGraph.java │ │ │ ├── inputModules │ │ │ └── csv │ │ │ │ ├── KeyedCSV │ │ │ │ ├── CSVKey.java │ │ │ │ ├── KeyedCSVReader.java │ │ │ │ ├── KeyedCSVRow.java │ │ │ │ └── exceptions │ │ │ │ │ └── InvalidCSVFile.java │ │ │ │ ├── csv2ast │ │ │ │ ├── ASTUnderConstruction.java │ │ │ │ ├── CSV2AST.java │ │ │ │ ├── CSVAST.java │ │ │ │ ├── CSVASTNodeFactory.java │ │ │ │ └── CSVRowInterpreter.java │ │ │ │ └── csvFuncExtractor │ │ │ │ ├── FilteredKeyedCSVReader.java │ │ │ │ ├── Range.java │ │ │ │ └── RowFilter.java │ │ │ ├── misc │ │ │ ├── HashMapOfSets.java │ │ │ ├── MultiHashMap.java │ │ │ └── Pair.java │ │ │ ├── outputModules │ │ │ ├── CSVASTWalker.java │ │ │ ├── common │ │ │ │ ├── ASTExporter.java │ │ │ │ ├── ASTNodeExporter.java │ │ │ │ ├── CDGExporter.java │ │ │ │ ├── CFGExporter.java │ │ │ │ ├── CGExporter.java │ │ │ │ ├── ClassDefExporter.java │ │ │ │ ├── DDGExporter.java │ │ │ │ ├── DOMExporter.java │ │ │ │ ├── DeclStmtExporter.java │ │ │ │ ├── DirectoryTreeImporter.java │ │ │ │ ├── FunctionExporter.java │ │ │ │ ├── OutModASTNodeVisitor.java │ │ │ │ ├── UDGExporter.java │ │ │ │ ├── Writer.java │ │ │ │ └── WriterImpl.java │ │ │ ├── csv │ │ │ │ ├── CSVASTNodeVisitor.java │ │ │ │ ├── CSVWriterImpl.java │ │ │ │ ├── MultiDirCSVDirectoryTreeImporter.java │ │ │ │ ├── MultiPairCSVWriterImpl.java │ │ │ │ ├── ParserCSVOutput.java │ │ │ │ ├── SingleDirCSVDirectoryTreeImporter.java │ │ │ │ ├── SinglePairCSVWriterImpl.java │ │ │ │ └── exporters │ │ │ │ │ ├── CSVASTExporter.java │ │ │ │ │ ├── CSVASTNodeExporter.java │ │ │ │ │ ├── CSVCDGExporter.java │ │ │ │ │ ├── CSVCFGExporter.java │ │ │ │ │ ├── CSVCGExporter.java │ │ │ │ │ ├── CSVClassDefExporter.java │ │ │ │ │ ├── CSVDDGExporter.java │ │ │ │ │ ├── CSVDOMExporter.java │ │ │ │ │ ├── CSVDeclExporter.java │ │ │ │ │ ├── CSVDeclStmtExporter.java │ │ │ │ │ ├── CSVFunctionExporter.java │ │ │ │ │ └── CSVUDGExporter.java │ │ │ └── parser │ │ │ │ ├── Parser.java │ │ │ │ ├── ParserASTWalker.java │ │ │ │ └── ParserState.java │ │ │ ├── tools │ │ │ ├── CommonCommandLineInterface.java │ │ │ └── UtilCommandLineInterface.java │ │ │ └── udg │ │ │ ├── ASTNodeASTProvider.java │ │ │ ├── ASTProvider.java │ │ │ ├── CFGToUDGConverter.java │ │ │ ├── useDefAnalysis │ │ │ ├── ASTDefUseAnalyzer.java │ │ │ └── environments │ │ │ │ ├── EmitDefAndUseEnvironment.java │ │ │ │ ├── EmitDefEnvironment.java │ │ │ │ ├── EmitUseEnvironment.java │ │ │ │ └── UseDefEnvironment.java │ │ │ └── useDefGraph │ │ │ ├── UseDefGraph.java │ │ │ ├── UseOrDef.java │ │ │ └── UseOrDefRecord.java │ │ └── test │ │ └── java │ │ └── tests │ │ ├── CodebaseWalkerTest.java │ │ ├── FilenameAggregator.java │ │ ├── inputModules │ │ ├── TestCSVKey.java │ │ ├── TestFilteredKeyedCSVReader.java │ │ └── TestKeyedCSVReader.java │ │ └── samples │ │ ├── subdir │ │ └── test.c │ │ ├── test.c │ │ └── tiff.cpp ├── languages │ └── joern-lang │ │ ├── build.gradle │ │ └── src │ │ └── main │ │ └── groovy │ │ ├── _constants.groovy │ │ ├── cfg.groovy │ │ ├── composition.groovy │ │ ├── function.groovy │ │ ├── info.groovy │ │ ├── learning │ │ └── neighborhoodHash.groovy │ │ ├── lookup.groovy │ │ ├── misc.groovy │ │ ├── slice.groovy │ │ ├── symbolGraph.groovy │ │ ├── syntax │ │ ├── assignment.groovy │ │ ├── ast.groovy │ │ ├── call.groovy │ │ ├── match.groovy │ │ └── params.groovy │ │ └── taintTracking │ │ ├── dataflow.groovy │ │ ├── initGraphs │ │ ├── asts.groovy │ │ ├── conditions.groovy │ │ ├── creation.groovy │ │ ├── decompression.groovy │ │ ├── defStmtsPerArg.groovy │ │ └── localDefTree.groovy │ │ ├── interproc.groovy │ │ ├── queryTemplate.groovy │ │ └── taintedArgs_.groovy ├── octopus │ ├── .gitrepo │ ├── AUTHORS │ ├── LICENSE │ ├── README.md │ ├── build.gradle │ ├── extensions │ │ └── README │ ├── languages │ │ ├── README │ │ └── octopus │ │ │ ├── exampleStep.groovy │ │ │ └── lookup.groovy │ ├── octopus-server.sh │ ├── plugins │ │ └── README │ ├── python │ │ ├── octopus-mlutils │ │ │ ├── .gitignore │ │ │ ├── .gitrepo │ │ │ ├── AUTHORS │ │ │ ├── LICENSE │ │ │ ├── octopus │ │ │ │ ├── __init__.py │ │ │ │ ├── importer │ │ │ │ │ ├── OctopusImporter.py │ │ │ │ │ └── __init__.py │ │ │ │ ├── plugins │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── plugin.py │ │ │ │ ├── server │ │ │ │ │ ├── DBInterface.py │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── plugin_executor.py │ │ │ │ │ ├── project_manager.py │ │ │ │ │ ├── python_shell_interface.py │ │ │ │ │ ├── server_command.py │ │ │ │ │ └── shell_manager.py │ │ │ │ ├── shell │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── completer │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ └── octopus_rlcompleter.py │ │ │ │ │ ├── config │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ ├── config.py │ │ │ │ │ │ └── data │ │ │ │ │ │ │ └── octopus_shell.ini │ │ │ │ │ ├── data │ │ │ │ │ │ └── banner.txt │ │ │ │ │ ├── octopus_console.py │ │ │ │ │ ├── octopus_shell.py │ │ │ │ │ ├── octopus_shell_utils.py │ │ │ │ │ └── onlinehelp │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ └── online_help.py │ │ │ │ └── shelltool │ │ │ │ │ ├── ChunkStartTool.py │ │ │ │ │ ├── CmdLineTool.py │ │ │ │ │ ├── DemuxTool.py │ │ │ │ │ ├── GraphvizTool.py │ │ │ │ │ ├── PipeTool.py │ │ │ │ │ ├── StartTool.py │ │ │ │ │ └── __init__.py │ │ │ ├── scripts │ │ │ │ ├── octopus-csvimport │ │ │ │ ├── octopus-plugin │ │ │ │ ├── octopus-project │ │ │ │ └── octopus-shell │ │ │ ├── setup.py │ │ │ └── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── orientdb_server_command.py │ │ │ │ ├── orientdb_shell_manager.py │ │ │ │ └── python_shell_interface.py │ │ └── octopus-tools │ │ │ ├── .gitignore │ │ │ ├── .gitrepo │ │ │ ├── AUTHORS │ │ │ ├── LICENSE │ │ │ ├── octopus │ │ │ ├── __init__.py │ │ │ ├── importer │ │ │ │ ├── OctopusImporter.py │ │ │ │ └── __init__.py │ │ │ ├── plugins │ │ │ │ ├── __init__.py │ │ │ │ └── plugin.py │ │ │ ├── server │ │ │ │ ├── DBInterface.py │ │ │ │ ├── __init__.py │ │ │ │ ├── plugin_executor.py │ │ │ │ ├── project_manager.py │ │ │ │ ├── python_shell_interface.py │ │ │ │ ├── server_command.py │ │ │ │ └── shell_manager.py │ │ │ ├── shell │ │ │ │ ├── __init__.py │ │ │ │ ├── completer │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── octopus_rlcompleter.py │ │ │ │ ├── config │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── config.py │ │ │ │ │ └── data │ │ │ │ │ │ └── octopus_shell.ini │ │ │ │ ├── data │ │ │ │ │ └── banner.txt │ │ │ │ ├── octopus_console.py │ │ │ │ ├── octopus_shell.py │ │ │ │ ├── octopus_shell_utils.py │ │ │ │ └── onlinehelp │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── online_help.py │ │ │ └── shelltool │ │ │ │ ├── ChunkStartTool.py │ │ │ │ ├── CmdLineTool.py │ │ │ │ ├── DemuxTool.py │ │ │ │ ├── GraphvizTool.py │ │ │ │ ├── PipeTool.py │ │ │ │ ├── ResultProcessor.py │ │ │ │ ├── StartTool.py │ │ │ │ └── __init__.py │ │ │ ├── scripts │ │ │ ├── octopus-csvimport │ │ │ ├── octopus-dgsimport │ │ │ ├── octopus-plugin │ │ │ ├── octopus-project │ │ │ └── octopus-shell │ │ │ ├── setup.py │ │ │ └── tests │ │ │ ├── __init__.py │ │ │ ├── orientdb_server_command.py │ │ │ ├── orientdb_shell_manager.py │ │ │ └── python_shell_interface.py │ └── src │ │ └── main │ │ ├── java │ │ └── octopus │ │ │ ├── OctopusEnvironment.java │ │ │ ├── OctopusMain.java │ │ │ ├── api │ │ │ ├── GraphOperations.java │ │ │ ├── OctopusPlainProject.java │ │ │ ├── csvImporter │ │ │ │ └── CSVImporter.java │ │ │ ├── database │ │ │ │ ├── Database.java │ │ │ │ └── DatabaseManager.java │ │ │ ├── decompressor │ │ │ │ └── Decompressor.java │ │ │ ├── graphstreamImporter │ │ │ │ └── GraphstreamImporter.java │ │ │ ├── plugin │ │ │ │ ├── Plugin.java │ │ │ │ ├── PluginExecutor.java │ │ │ │ ├── connectors │ │ │ │ │ └── OctopusProjectConnector.java │ │ │ │ └── types │ │ │ │ │ └── OctopusProjectPlugin.java │ │ │ ├── projects │ │ │ │ ├── OctopusProject.java │ │ │ │ ├── OctopusProjectWrapper.java │ │ │ │ └── ProjectManager.java │ │ │ ├── shell │ │ │ │ └── ShellManager.java │ │ │ └── structures │ │ │ │ ├── OctopusNode.java │ │ │ │ └── OctopusNodeProperties.java │ │ │ ├── plugins │ │ │ ├── csvimporter │ │ │ │ └── CSVImporterPlugin.java │ │ │ └── graphstreamimporter │ │ │ │ └── GraphstreamImporterPlugin.java │ │ │ └── server │ │ │ ├── database │ │ │ └── titan │ │ │ │ ├── TitanLocalDatabase.java │ │ │ │ └── TitanLocalDatabaseManager.java │ │ │ ├── decompressor │ │ │ └── TarballDecompressor.java │ │ │ ├── ftpserver │ │ │ └── OctopusFTPServer.java │ │ │ ├── gremlinShell │ │ │ ├── GroovyFileLoader.java │ │ │ ├── OctopusCompilerConfiguration.java │ │ │ ├── OctopusGremlinShell.java │ │ │ ├── OctopusScriptBase.java │ │ │ ├── ShellRunnable.java │ │ │ ├── fileWalker │ │ │ │ ├── FileNameMatcher.java │ │ │ │ ├── OrderedWalker.java │ │ │ │ ├── SourceFileListener.java │ │ │ │ ├── SourceFileWalker.java │ │ │ │ ├── UnorderedFileWalkerImpl.java │ │ │ │ └── UnorderedWalker.java │ │ │ └── io │ │ │ │ ├── OctopusClientReader.java │ │ │ │ └── OctopusClientWriter.java │ │ │ ├── importer │ │ │ ├── csv │ │ │ │ ├── ImportCSVRunnable.java │ │ │ │ ├── ImportJob.java │ │ │ │ └── titan │ │ │ │ │ ├── CSVCommands.java │ │ │ │ │ ├── CSVFile.java │ │ │ │ │ ├── CSVImporter.java │ │ │ │ │ ├── Constants.java │ │ │ │ │ ├── EdgeFile.java │ │ │ │ │ └── NodeFile.java │ │ │ └── graphstream │ │ │ │ ├── ImportGraphstreamRunnable.java │ │ │ │ ├── ImportJob.java │ │ │ │ └── titan │ │ │ │ └── GraphstreamImporter.java │ │ │ ├── pluginInterface │ │ │ ├── PluginClassLoader.java │ │ │ └── PluginLoader.java │ │ │ ├── projectmanager │ │ │ └── OctopusProjectManager.java │ │ │ ├── restServer │ │ │ ├── OctopusRestHandler.java │ │ │ ├── OctopusRestServer.java │ │ │ └── handlers │ │ │ │ ├── CreateProjectHandler.java │ │ │ │ ├── CreateShellHandler.java │ │ │ │ ├── DeleteProjectHandler.java │ │ │ │ ├── ExecutePluginHandler.java │ │ │ │ ├── ImportCSVHandler.java │ │ │ │ ├── ImportGraphstreamHandler.java │ │ │ │ ├── ListProjectsHandler.java │ │ │ │ ├── ListShellsHandler.java │ │ │ │ └── ResetDatabaseHandler.java │ │ │ └── shellmanager │ │ │ └── OctopusShellManager.java │ │ └── resources │ │ └── logback.xml └── plugins │ ├── README.md │ ├── dummy │ ├── build.gradle │ ├── execute_dummy.py │ └── src │ │ └── main │ │ └── java │ │ └── joern │ │ └── plugins │ │ └── dummy │ │ └── DummyPlugin.java │ └── importer │ ├── build.gradle │ └── src │ └── main │ └── java │ └── joern │ └── plugins │ └── importer │ ├── CParserWrapper.java │ ├── ImporterListener.java │ └── JoernImporter.java ├── python ├── examples │ ├── chunking.py │ └── dummy.py └── joern-tools │ ├── .gitignore │ ├── .gitrepo │ ├── AUTHORS │ ├── LICENSE │ ├── README.md │ ├── examples │ ├── apiEmbed.sh │ ├── knn.sh │ ├── memcpyCallers.sh │ └── subtreeEmbed.sh │ ├── joern │ ├── APIEmbedder.py │ ├── MLDataDirCreator.py │ ├── SimplifiedAPIEmbedder.py │ ├── __init__.py │ ├── csvAST │ │ ├── ASTPrinter.py │ │ ├── CSVProcessor.py │ │ ├── CSVRowAccessors.py │ │ ├── CSVToPythonAST.py │ │ ├── PythonASTProcessor.py │ │ ├── PythonASTToPrunedAST.py │ │ ├── PythonASTTreeNode.py │ │ ├── README.md │ │ └── __init__.py │ ├── misc │ │ ├── __init__.py │ │ └── launch.py │ ├── shelltool │ │ ├── AccTool.py │ │ ├── JoernHide.py │ │ ├── JoernTag.py │ │ ├── JoernTool.py │ │ ├── LookupTool.py │ │ ├── PlotConfiguration.py │ │ ├── PlotResult.py │ │ ├── TestPlotConfiguration.py │ │ ├── TraversalTool.py │ │ └── __init__.py │ └── view │ │ ├── ParseLocationString.py │ │ └── __init__.py │ ├── scripts │ ├── exploration │ │ ├── joern-list-files │ │ └── joern-list-funcs │ ├── lowLevel │ │ ├── joern-code │ │ ├── joern-edge │ │ ├── joern-editor │ │ ├── joern-hide │ │ ├── joern-import │ │ ├── joern-location │ │ ├── joern-lookup │ │ ├── joern-slice │ │ ├── joern-tag │ │ ├── joern-transform │ │ └── joern-unhide │ ├── ml │ │ ├── joern-apiembedder │ │ ├── joern-ast2features │ │ ├── joern-astlabel │ │ ├── joern-cluster │ │ ├── joern-demux │ │ ├── joern-knn │ │ ├── joern-regex │ │ ├── joern-stmt-embedder │ │ └── joern-stream-apiembedder │ └── plotting │ │ ├── data │ │ └── plotconfig.cfg │ │ ├── joern-plot-proggraph │ │ └── joern-plot-slice │ └── setup.py └── settings.gradle /AUTHORS: -------------------------------------------------------------------------------- 1 | Contributors: 2 | 3 | Fabian Yamaguchi (main developer) 4 | Alwin Maier 5 | Malte Skoruppa (php support) 6 | -------------------------------------------------------------------------------- /build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | gradle deploy -x test 4 | -------------------------------------------------------------------------------- /docs/source/joerntools.rst: -------------------------------------------------------------------------------- 1 | Joern-tools 2 | =========== 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | joerntools/slice 8 | joerntools/apiEmbedder 9 | joerntools/knn 10 | joerntools/plot-proggraph 11 | 12 | 13 | -------------------------------------------------------------------------------- /docs/source/tutorials.rst: -------------------------------------------------------------------------------- 1 | Tutorials 2 | ========= 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | tutorials/unixStyleCodeAnalysis 8 | tutorials/extrapolation 9 | 10 | Articles 11 | ========= 12 | 13 | `Why You Should Add Joern to Your Source Code Audit Toolkit (by Kelby Ludwig) `_ 14 | -------------------------------------------------------------------------------- /gremtest/import_testcode.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | # Usage: 4 | # 5 | # import_testcode.sh /path/to/testcodedir 6 | # 7 | 8 | codedir_parent=`dirname "$1"` 9 | project_name=`basename "$1"` 10 | 11 | tar -zcvf "$project_name".tar.gz -C "$codedir_parent" "$project_name" && \ 12 | octopus-project delete "$project_name".tar.gz && \ 13 | joern-import "$project_name".tar.gz && \ 14 | rm "$project_name".tar.gz 15 | 16 | -------------------------------------------------------------------------------- /gremtest/test_stdlib/testdata/test_cfg.c: -------------------------------------------------------------------------------- 1 | void popa_ex_2_5 () 2 | { 3 | x = a+b; 4 | y = a+b; 5 | while (y>a+b) { 6 | a = a + 1; 7 | x = a + b; 8 | } 9 | } 10 | 11 | void popa_ex_2_6 () 12 | { 13 | x = 5; 14 | y = 1; 15 | while (x>1) { 16 | y = x*y; 17 | x = x-1; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /gremtest/test_stdlib/testdata/test_function.c: -------------------------------------------------------------------------------- 1 | 2 | void function_location_1() { 3 | printf("Hello"); 4 | } 5 | 6 | void function_with_loop_1 () { 7 | int x = 1; 8 | while (x < 100) { 9 | while (x < 50) { 10 | x = x+1; 11 | } 12 | x = x + 1; 13 | } 14 | print(x); 15 | } 16 | -------------------------------------------------------------------------------- /gremtest/test_stdlib/testdata/test_syntax.c: -------------------------------------------------------------------------------- 1 | void test_astnodes () 2 | { 3 | x = 8 * ++a - b; 4 | } 5 | 6 | void test_funccall (char *name) 7 | { 8 | fprintf(STDERR, "Hello %s!\n", name); 9 | } 10 | 11 | void test_funccall_from_assignment () 12 | { 13 | x = 45 + 2*sqrt(9); 14 | } 15 | 16 | void test_funccall_from_nested_assignment () 17 | { 18 | x = 45 + (a = 5 + sqrt(9)); 19 | } 20 | 21 | int declared_function(char *, int); 22 | 23 | -------------------------------------------------------------------------------- /joern-parse: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | BASEDIR=$(dirname "$0") 4 | 5 | java -cp "$BASEDIR/projects/extensions/joern-fuzzyc/build/libs/joern-fuzzyc.jar:$BASEDIR/projects/extensions/jpanlib/build/libs/jpanlib.jar:$BASEDIR/projects/octopus/lib/*" tools.parser.ParserMain -outformat csv -outdir parsed $@ 6 | -------------------------------------------------------------------------------- /joern-server.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | ./projects/octopus/octopus-server.sh 3 | -------------------------------------------------------------------------------- /phpast2cpg: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | BASEDIR=$(dirname "$0") 4 | 5 | java -cp "$BASEDIR/projects/extensions/joern-php/build/libs/joern-php.jar:$BASEDIR/projects/extensions/jpanlib/build/libs/jpanlib.jar:$BASEDIR/projects/octopus/lib/*" tools.php.ast2cpg.Main $@ 6 | -------------------------------------------------------------------------------- /projects/extensions/joern-fuzzyc/genParsers.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | antlr4='java -jar ./antlr4-4.5.4-SNAPSHOT-complete.jar' 3 | 4 | $antlr4 src/main/java/antlr/Module.g4 5 | $antlr4 src/main/java/antlr/Function.g4 6 | -------------------------------------------------------------------------------- /projects/extensions/joern-fuzzyc/src/main/java/antlr/README: -------------------------------------------------------------------------------- 1 | .g4-files are grammar definitions. All .java and .token files in this directory are generated from these grammar definitions. -------------------------------------------------------------------------------- /projects/extensions/joern-fuzzyc/src/main/java/ast/c/expressions/SizeofExpression.java: -------------------------------------------------------------------------------- 1 | package ast.c.expressions; 2 | 3 | import ast.expressions.Expression; 4 | import ast.walking.ASTNodeVisitor; 5 | 6 | public class SizeofExpression extends Expression 7 | { 8 | public void accept(ASTNodeVisitor visitor) 9 | { 10 | visitor.visit(this); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /projects/extensions/joern-fuzzyc/src/main/java/ast/c/statements/blockstarters/ElseStatement.java: -------------------------------------------------------------------------------- 1 | package ast.c.statements.blockstarters; 2 | 3 | import ast.logical.statements.BlockStarterWithStmtAndCnd; 4 | 5 | public class ElseStatement extends BlockStarterWithStmtAndCnd 6 | { 7 | 8 | 9 | 10 | } 11 | -------------------------------------------------------------------------------- /projects/extensions/joern-fuzzyc/src/main/java/neo4j/batchInserter/ImportedNodeListener.java: -------------------------------------------------------------------------------- 1 | package neo4j.batchInserter; 2 | 3 | public abstract class ImportedNodeListener 4 | { 5 | 6 | abstract public void visitNode(Long funcId); 7 | 8 | } 9 | -------------------------------------------------------------------------------- /projects/extensions/joern-fuzzyc/src/main/java/outputModules/csv/exporters/CCSVFunctionExporter.java: -------------------------------------------------------------------------------- 1 | package outputModules.csv.exporters; 2 | 3 | import cfg.CCFGFactory; 4 | import udg.useDefAnalysis.CASTDefUseAnalyzer; 5 | 6 | public class CCSVFunctionExporter extends CSVFunctionExporter { 7 | 8 | public CCSVFunctionExporter() 9 | { 10 | super(); 11 | analyzer = new CASTDefUseAnalyzer(); 12 | cfgFactory = new CCFGFactory(); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /projects/extensions/joern-fuzzyc/src/main/java/outputModules/neo4j/Neo4JASTWalker.java: -------------------------------------------------------------------------------- 1 | package outputModules.neo4j; 2 | 3 | import outputModules.parser.ParserASTWalker; 4 | 5 | public class Neo4JASTWalker extends ParserASTWalker 6 | { 7 | Neo4JASTWalker() 8 | { 9 | astVisitor = new Neo4JASTNodeVisitor(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /projects/extensions/joern-fuzzyc/src/main/java/outputModules/neo4j/exporters/Neo4JDeclExporter.java: -------------------------------------------------------------------------------- 1 | package outputModules.neo4j.exporters; 2 | 3 | import ast.ASTNode; 4 | import databaseNodes.DeclDatabaseNode; 5 | 6 | public class Neo4JDeclExporter extends Neo4JASTNodeExporter 7 | { 8 | 9 | @Override 10 | public void addToDatabaseSafe(ASTNode node) 11 | { 12 | DeclDatabaseNode dbNode = new DeclDatabaseNode(); 13 | dbNode.initialize(node); 14 | addMainNode(dbNode); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /projects/extensions/joern-fuzzyc/src/main/java/parsing/CommonParserContext.java: -------------------------------------------------------------------------------- 1 | package parsing; 2 | 3 | public class CommonParserContext 4 | { 5 | public String filename; 6 | public TokenSubStream stream; 7 | } 8 | -------------------------------------------------------------------------------- /projects/extensions/joern-fuzzyc/src/main/java/parsing/ParserException.java: -------------------------------------------------------------------------------- 1 | package parsing; 2 | 3 | public class ParserException extends RuntimeException 4 | { 5 | private static final long serialVersionUID = 1L; 6 | } 7 | -------------------------------------------------------------------------------- /projects/extensions/joern-fuzzyc/src/main/java/tools/argumentTainter/CallsForFunction.java: -------------------------------------------------------------------------------- 1 | package tools.argumentTainter; 2 | 3 | import java.util.LinkedList; 4 | import java.util.List; 5 | 6 | public class CallsForFunction 7 | { 8 | 9 | List blocksCallingSource = new LinkedList(); 10 | List symbolsUsed = new LinkedList(); 11 | 12 | public CallsForFunction() 13 | { 14 | } 15 | }; 16 | -------------------------------------------------------------------------------- /projects/extensions/joern-fuzzyc/src/main/java/tools/icfg/ICFGCommandLineInterface.java: -------------------------------------------------------------------------------- 1 | package tools.icfg; 2 | 3 | import tools.UtilCommandLineInterface; 4 | 5 | public class ICFGCommandLineInterface extends UtilCommandLineInterface 6 | { 7 | 8 | public void printHelp() 9 | { 10 | formatter.printHelp("icfg", options); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /projects/extensions/joern-fuzzyc/src/main/java/udg/useDefAnalysis/CUseDefExpression.java: -------------------------------------------------------------------------------- 1 | package udg.useDefAnalysis; 2 | 3 | public class CUseDefExpression { 4 | /** 5 | * Eliminate redundant "& * " and "* & " patterns that can occur in 6 | * dynamically generated UseDef references. 7 | */ 8 | public static String simplify(String expr) 9 | { 10 | return expr.replace("& * ", "").replace("* & ", ""); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /projects/extensions/joern-fuzzyc/testCode/ddgTest.c: -------------------------------------------------------------------------------- 1 | 2 | 3 | int ddg_simplest_test() 4 | { 5 | // Make sure x propagates to foo 6 | int x = 0; 7 | foo(x); 8 | } 9 | 10 | 11 | int ddg_test_struct() 12 | { 13 | struct my_struct foo; 14 | foo.bar = 10; 15 | copy_somehwere(foo); 16 | } 17 | -------------------------------------------------------------------------------- /projects/extensions/joern-fuzzyc/testCode/nesting.c: -------------------------------------------------------------------------------- 1 | u_char * foo(u_char *data) 2 | { 3 | if(foo1) 4 | bar1(); 5 | else if(foo2) 6 | bar2(); 7 | else if(foo3) 8 | bar3(); 9 | } 10 | 11 | 12 | -------------------------------------------------------------------------------- /projects/extensions/joern-fuzzyc/testCode/parserTests.c: -------------------------------------------------------------------------------- 1 | void new_operator_test() 2 | { 3 | long *buffer; 4 | size_t num_elements; 5 | buffer = new long[num_elements]; 6 | } 7 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/build.gradle: -------------------------------------------------------------------------------- 1 | 2 | dependencies{ 3 | compile project(':projects:extensions:jpanlib') 4 | 5 | compile group: 'commons-cli', name: 'commons-cli', version: '1.2' 6 | compile group: 'junit', name: 'junit', version: '4.12' 7 | } 8 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/main/java/ast/php/expressions/AssignmentByRefExpression.java: -------------------------------------------------------------------------------- 1 | package ast.php.expressions; 2 | 3 | import ast.expressions.AssignmentExpression; 4 | 5 | public class AssignmentByRefExpression extends AssignmentExpression 6 | { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/main/java/ast/php/expressions/CloneExpression.java: -------------------------------------------------------------------------------- 1 | package ast.php.expressions; 2 | 3 | import ast.expressions.UnaryExpression; 4 | 5 | public class CloneExpression extends UnaryExpression 6 | { 7 | } 8 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/main/java/ast/php/expressions/CoalesceExpression.java: -------------------------------------------------------------------------------- 1 | package ast.php.expressions; 2 | 3 | import ast.expressions.BinaryExpression; 4 | 5 | public class CoalesceExpression extends BinaryExpression 6 | { 7 | } 8 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/main/java/ast/php/expressions/EmptyExpression.java: -------------------------------------------------------------------------------- 1 | package ast.php.expressions; 2 | 3 | import ast.expressions.UnaryExpression; 4 | 5 | public class EmptyExpression extends UnaryExpression 6 | { 7 | } 8 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/main/java/ast/php/expressions/ExitExpression.java: -------------------------------------------------------------------------------- 1 | package ast.php.expressions; 2 | 3 | import ast.expressions.UnaryExpression; 4 | 5 | public class ExitExpression extends UnaryExpression 6 | { 7 | } 8 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/main/java/ast/php/expressions/IncludeOrEvalExpression.java: -------------------------------------------------------------------------------- 1 | package ast.php.expressions; 2 | 3 | import ast.expressions.Expression; 4 | import ast.expressions.UnaryExpression; 5 | 6 | public class IncludeOrEvalExpression extends UnaryExpression 7 | { 8 | public Expression getIncludeOrEvalExpression() { 9 | return super.getExpression(); 10 | } 11 | 12 | public void setIncludeOrEvalExpression(Expression variable) { 13 | super.setExpression(variable); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/main/java/ast/php/expressions/IssetExpression.java: -------------------------------------------------------------------------------- 1 | package ast.php.expressions; 2 | 3 | import ast.expressions.Expression; 4 | import ast.expressions.UnaryExpression; 5 | 6 | public class IssetExpression extends UnaryExpression 7 | { 8 | public Expression getVariableExpression() { 9 | return super.getExpression(); 10 | } 11 | 12 | public void setVariableExpression(Expression variable) { 13 | super.setExpression(variable); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/main/java/ast/php/expressions/MagicConstant.java: -------------------------------------------------------------------------------- 1 | package ast.php.expressions; 2 | 3 | import ast.expressions.Expression; 4 | 5 | public class MagicConstant extends Expression 6 | { 7 | } 8 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/main/java/ast/php/expressions/PrintExpression.java: -------------------------------------------------------------------------------- 1 | package ast.php.expressions; 2 | 3 | import ast.expressions.UnaryExpression; 4 | 5 | public class PrintExpression extends UnaryExpression 6 | { 7 | } 8 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/main/java/ast/php/expressions/ShellExecExpression.java: -------------------------------------------------------------------------------- 1 | package ast.php.expressions; 2 | 3 | import ast.expressions.Expression; 4 | import ast.expressions.UnaryExpression; 5 | 6 | public class ShellExecExpression extends UnaryExpression 7 | { 8 | public Expression getShellCommand() { 9 | return super.getExpression(); 10 | } 11 | 12 | public void setShellCommand(Expression variable) { 13 | super.setExpression(variable); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/main/java/ast/php/expressions/TypeHint.java: -------------------------------------------------------------------------------- 1 | package ast.php.expressions; 2 | 3 | import ast.expressions.Identifier; 4 | 5 | public class TypeHint extends Identifier 6 | { 7 | } 8 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/main/java/ast/php/expressions/UnpackExpression.java: -------------------------------------------------------------------------------- 1 | package ast.php.expressions; 2 | 3 | import ast.expressions.UnaryExpression; 4 | 5 | public class UnpackExpression extends UnaryExpression 6 | { 7 | } 8 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/main/java/ast/php/functionDef/ClosureVar.java: -------------------------------------------------------------------------------- 1 | package ast.php.functionDef; 2 | 3 | import ast.ASTNode; 4 | import ast.expressions.StringExpression; 5 | 6 | public class ClosureVar extends ASTNode 7 | { 8 | private StringExpression name = null; 9 | 10 | public void setNameChild(StringExpression name) { 11 | this.name = name; 12 | super.addChild(name); 13 | } 14 | 15 | public StringExpression getNameChild() { 16 | return this.name; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/main/java/ast/php/functionDef/Method.java: -------------------------------------------------------------------------------- 1 | package ast.php.functionDef; 2 | 3 | import ast.ASTNodeProperties; 4 | 5 | public class Method extends FunctionDef 6 | { 7 | public String getEnclosingClass() { 8 | return getProperty(ASTNodeProperties.CLASSNAME); 9 | } 10 | 11 | public void setEnclosingClass(String classname) { 12 | setProperty(ASTNodeProperties.CLASSNAME, classname); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/main/java/ast/php/statements/GlobalStatement.java: -------------------------------------------------------------------------------- 1 | package ast.php.statements; 2 | 3 | import ast.expressions.Variable; 4 | import ast.logical.statements.Statement; 5 | 6 | public class GlobalStatement extends Statement 7 | { 8 | private Variable variable = null; 9 | 10 | public Variable getVariable() 11 | { 12 | return this.variable; 13 | } 14 | 15 | public void setVariable(Variable variable) 16 | { 17 | this.variable = variable; 18 | super.addChild(variable); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/main/java/ast/php/statements/blockstarters/IfElement.java: -------------------------------------------------------------------------------- 1 | package ast.php.statements.blockstarters; 2 | 3 | import ast.logical.statements.BlockStarter; 4 | 5 | public class IfElement extends BlockStarter 6 | { 7 | } 8 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/main/java/ast/php/statements/blockstarters/SwitchCase.java: -------------------------------------------------------------------------------- 1 | package ast.php.statements.blockstarters; 2 | 3 | import ast.expressions.Expression; 4 | import ast.logical.statements.BlockStarter; 5 | 6 | public class SwitchCase extends BlockStarter 7 | { 8 | private Expression value = null; 9 | 10 | public Expression getValue() 11 | { 12 | return this.value; 13 | } 14 | 15 | public void setValue(Expression value) 16 | { 17 | this.value = value; 18 | super.addChild(value); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/main/java/ast/php/statements/blockstarters/TraitAlias.java: -------------------------------------------------------------------------------- 1 | package ast.php.statements.blockstarters; 2 | 3 | import ast.expressions.StringExpression; 4 | 5 | public class TraitAlias extends TraitAdaptationElement 6 | { 7 | private StringExpression alias = null; 8 | 9 | public StringExpression getAlias() 10 | { 11 | return this.alias; 12 | } 13 | 14 | public void setAlias(StringExpression alias) 15 | { 16 | this.alias = alias; 17 | super.addChild(alias); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/test/java/tests/languages/php/samples/astCreation/testArray/foo.php: -------------------------------------------------------------------------------- 1 | 42, 4 | 2 => "foo", 5 | aconst => $bar, 6 | buz()); 7 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/test/java/tests/languages/php/samples/astCreation/testArrayIndexing/foo.php: -------------------------------------------------------------------------------- 1 | qux = SOMECONST; 6 | Buz::$qux = somecall(); 7 | list($a) = [3]; 8 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/test/java/tests/languages/php/samples/astCreation/testAssignByRef/foo.php: -------------------------------------------------------------------------------- 1 | qux =& $buz->somecall(); 6 | Buz::$qux =& Buz::somestaticcall(); 7 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/test/java/tests/languages/php/samples/astCreation/testAssignWithOp/edges.csv: -------------------------------------------------------------------------------- 1 | start end type 2 | 2 3 ENTRY 3 | 2 4 EXIT 4 | 7 8 PARENT_OF 5 | 6 7 PARENT_OF 6 | 6 9 PARENT_OF 7 | 5 6 PARENT_OF 8 | 11 12 PARENT_OF 9 | 10 11 PARENT_OF 10 | 10 13 PARENT_OF 11 | 5 10 PARENT_OF 12 | 15 16 PARENT_OF 13 | 14 15 PARENT_OF 14 | 17 18 PARENT_OF 15 | 14 17 PARENT_OF 16 | 5 14 PARENT_OF 17 | 2 5 PARENT_OF 18 | 1 2 FILE_OF 19 | 0 1 DIRECTORY_OF 20 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/test/java/tests/languages/php/samples/astCreation/testAssignWithOp/foo.php: -------------------------------------------------------------------------------- 1 | qux}!"; 4 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/test/java/tests/languages/php/samples/astCreation/testExit/edges.csv: -------------------------------------------------------------------------------- 1 | start end type 2 | 2 3 ENTRY 3 | 2 4 EXIT 4 | 7 8 PARENT_OF 5 | 6 7 PARENT_OF 6 | 5 6 PARENT_OF 7 | 11 12 PARENT_OF 8 | 10 11 PARENT_OF 9 | 10 13 PARENT_OF 10 | 9 10 PARENT_OF 11 | 5 9 PARENT_OF 12 | 2 5 PARENT_OF 13 | 1 2 FILE_OF 14 | 0 1 DIRECTORY_OF 15 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/test/java/tests/languages/php/samples/astCreation/testExit/foo.php: -------------------------------------------------------------------------------- 1 | $buz) {} 5 | foreach ($someobj->qux as $someobj->norf => $someobj->nicknack) {} 6 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/test/java/tests/languages/php/samples/astCreation/testFunctionDef/edges.csv: -------------------------------------------------------------------------------- 1 | start end type 2 | 2 3 ENTRY 3 | 2 4 EXIT 4 | 6 7 ENTRY 5 | 6 8 EXIT 6 | 6 9 PARENT_OF 7 | 6 10 PARENT_OF 8 | 6 11 PARENT_OF 9 | 12 13 PARENT_OF 10 | 6 12 PARENT_OF 11 | 5 6 PARENT_OF 12 | 2 5 PARENT_OF 13 | 1 2 FILE_OF 14 | 0 1 DIRECTORY_OF 15 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/test/java/tests/languages/php/samples/astCreation/testFunctionDef/foo.php: -------------------------------------------------------------------------------- 1 | buz); 5 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/test/java/tests/languages/php/samples/astCreation/testList/foo.php: -------------------------------------------------------------------------------- 1 | foo($bar, "yabadabadoo"); 4 | buz()->$foo($bar, "yabadabadoo"); 5 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/test/java/tests/languages/php/samples/astCreation/testMinimalArgumentList/edges.csv: -------------------------------------------------------------------------------- 1 | start end type 2 | 2 3 ENTRY 3 | 2 4 EXIT 4 | 7 8 PARENT_OF 5 | 6 7 PARENT_OF 6 | 6 9 PARENT_OF 7 | 5 6 PARENT_OF 8 | 2 5 PARENT_OF 9 | 1 2 FILE_OF 10 | 0 1 DIRECTORY_OF 11 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/test/java/tests/languages/php/samples/astCreation/testMinimalArgumentList/foo.php: -------------------------------------------------------------------------------- 1 | bar; 4 | buz()->$qux; 5 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/test/java/tests/languages/php/samples/astCreation/testPropertyDeclaration/foo.php: -------------------------------------------------------------------------------- 1 | &$someval) {} 4 | foreach( $iterable as $somekey => &$obj->someval) {} 5 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/test/java/tests/languages/php/samples/astCreation/testReturn/edges.csv: -------------------------------------------------------------------------------- 1 | start end type 2 | 2 3 ENTRY 3 | 2 4 EXIT 4 | 6 7 ENTRY 5 | 6 8 EXIT 6 | 6 9 PARENT_OF 7 | 6 10 PARENT_OF 8 | 12 13 PARENT_OF 9 | 11 12 PARENT_OF 10 | 6 11 PARENT_OF 11 | 14 15 PARENT_OF 12 | 6 14 PARENT_OF 13 | 5 6 PARENT_OF 14 | 2 5 PARENT_OF 15 | 1 2 FILE_OF 16 | 0 1 DIRECTORY_OF 17 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/test/java/tests/languages/php/samples/astCreation/testReturn/foo.php: -------------------------------------------------------------------------------- 1 | buz,$qux[42]); 4 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/test/java/tests/languages/php/samples/astCreation/testUse/edges.csv: -------------------------------------------------------------------------------- 1 | start end type 2 | 2 3 ENTRY 3 | 2 4 EXIT 4 | 7 8 PARENT_OF 5 | 7 9 PARENT_OF 6 | 6 7 PARENT_OF 7 | 10 11 PARENT_OF 8 | 10 12 PARENT_OF 9 | 6 10 PARENT_OF 10 | 5 6 PARENT_OF 11 | 2 5 PARENT_OF 12 | 1 2 FILE_OF 13 | 0 1 DIRECTORY_OF 14 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/test/java/tests/languages/php/samples/astCreation/testUse/foo.php: -------------------------------------------------------------------------------- 1 | bar(); 6 | } 7 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/test/java/tests/languages/php/samples/astCreation/testYieldFrom/foo.php: -------------------------------------------------------------------------------- 1 | $buz) {} 5 | foreach ($someobj->qux as $someobj->norf => $someobj->nicknack) {} 6 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/test/java/tests/languages/php/samples/cfgCreation/testFuncWithParams/edges.csv: -------------------------------------------------------------------------------- 1 | start end type 2 | 2 3 ENTRY 3 | 2 4 EXIT 4 | 6 7 ENTRY 5 | 6 8 EXIT 6 | 10 11 PARENT_OF 7 | 10 12 PARENT_OF 8 | 10 13 PARENT_OF 9 | 9 10 PARENT_OF 10 | 6 9 PARENT_OF 11 | 6 14 PARENT_OF 12 | 18 19 PARENT_OF 13 | 17 18 PARENT_OF 14 | 17 20 PARENT_OF 15 | 16 17 PARENT_OF 16 | 15 16 PARENT_OF 17 | 6 15 PARENT_OF 18 | 6 21 PARENT_OF 19 | 5 6 PARENT_OF 20 | 2 5 PARENT_OF 21 | 1 2 FILE_OF 22 | 0 1 DIRECTORY_OF 23 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/test/java/tests/languages/php/samples/cfgCreation/testFuncWithParams/foo.php: -------------------------------------------------------------------------------- 1 | bar(); 6 | buz(); 7 | } 8 | 9 | foo(); 10 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/test/java/tests/languages/php/samples/cfgCreation/testTrickyYieldFrom/foo.php: -------------------------------------------------------------------------------- 1 | foo(); 10 | } 11 | } 12 | 13 | $b = new B(); 14 | $b->foo(); 15 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/test/java/tests/languages/php/samples/cgCreation/testSimpleConstructorCalls/foo.php: -------------------------------------------------------------------------------- 1 | foo(); 12 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/test/java/tests/languages/php/samples/cgCreation/testTwoFilesNamespacedNonStaticCalls/foobar/foo.php: -------------------------------------------------------------------------------- 1 | bar(); 12 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/test/java/tests/languages/php/samples/cgCreation/testTwoFilesNamespacedStaticCalls/foobar/bar.php: -------------------------------------------------------------------------------- 1 | foo(); 11 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/test/java/tests/languages/php/samples/cgCreation/testTwoFilesNonStaticCalls/foobar/foo.php: -------------------------------------------------------------------------------- 1 | bar(); 11 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/test/java/tests/languages/php/samples/cgCreation/testTwoFilesStaticCalls/foobar/bar.php: -------------------------------------------------------------------------------- 1 | slurp]; 5 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/test/java/tests/languages/php/samples/udgCreation/testAssignUsingClassConstants/foo.php: -------------------------------------------------------------------------------- 1 | bar = $buz->qux + $$norf->nicknack; 4 | $someobj->arrr = somecall()->aye; 5 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/test/java/tests/languages/php/samples/udgCreation/testAssignUsingStaticProperties/foo.php: -------------------------------------------------------------------------------- 1 | norf; 4 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/test/java/tests/languages/php/samples/udgCreation/testDo/foo.php: -------------------------------------------------------------------------------- 1 | $buz) {} 5 | foreach ($someobj->qux as $someobj->norf => $someobj->nicknack) {} 6 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/test/java/tests/languages/php/samples/udgCreation/testFunctionDef/edges.csv: -------------------------------------------------------------------------------- 1 | start end type 2 | 2 3 ENTRY 3 | 2 4 EXIT 4 | 6 7 ENTRY 5 | 6 8 EXIT 6 | 10 11 PARENT_OF 7 | 10 12 PARENT_OF 8 | 10 13 PARENT_OF 9 | 9 10 PARENT_OF 10 | 14 15 PARENT_OF 11 | 14 16 PARENT_OF 12 | 14 17 PARENT_OF 13 | 9 14 PARENT_OF 14 | 6 9 PARENT_OF 15 | 6 18 PARENT_OF 16 | 6 19 PARENT_OF 17 | 6 20 PARENT_OF 18 | 5 6 PARENT_OF 19 | 2 5 PARENT_OF 20 | 1 2 FILE_OF 21 | 0 1 DIRECTORY_OF 22 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/test/java/tests/languages/php/samples/udgCreation/testFunctionDef/foo.php: -------------------------------------------------------------------------------- 1 | buz); 5 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/test/java/tests/languages/php/samples/udgCreation/testMethod/foo.php: -------------------------------------------------------------------------------- 1 | foo($bar, "yabadabadoo"); 4 | buz()->$foo($bar, "yabadabadoo"); 5 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/test/java/tests/languages/php/samples/udgCreation/testNew/foo.php: -------------------------------------------------------------------------------- 1 | bar; 4 | buz()->$qux; 5 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/test/java/tests/languages/php/samples/udgCreation/testPropertyElement/foo.php: -------------------------------------------------------------------------------- 1 | norf; 5 | } 6 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/test/java/tests/languages/php/samples/udgCreation/testReturn/foo.php: -------------------------------------------------------------------------------- 1 | norf; 5 | } 6 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/test/java/tests/languages/php/samples/udgCreation/testSwitch/foo.php: -------------------------------------------------------------------------------- 1 | buz,$qux[42]); 4 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/test/java/tests/languages/php/samples/udgCreation/testVariable/edges.csv: -------------------------------------------------------------------------------- 1 | start end type 2 | 2 3 ENTRY 3 | 2 4 EXIT 4 | 6 7 PARENT_OF 5 | 5 6 PARENT_OF 6 | 9 10 PARENT_OF 7 | 8 9 PARENT_OF 8 | 5 8 PARENT_OF 9 | 2 5 PARENT_OF 10 | 1 2 FILE_OF 11 | 0 1 DIRECTORY_OF 12 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/test/java/tests/languages/php/samples/udgCreation/testVariable/foo.php: -------------------------------------------------------------------------------- 1 | $value) 5 | yield $index => $value; 6 | } 7 | -------------------------------------------------------------------------------- /projects/extensions/joern-php/src/test/java/tests/languages/php/samples/udgCreation/testYieldFrom/foo.php: -------------------------------------------------------------------------------- 1 | (main author) 4 | Alwin Maier 5 | Malte Skoruppa 6 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/build.gradle: -------------------------------------------------------------------------------- 1 | 2 | apply plugin:'java' 3 | repositories { mavenCentral() } 4 | 5 | dependencies{ 6 | compile group: 'com.tunnelvisionlabs', name: 'antlr4-runtime', version: '4.5.3' 7 | compile group: 'commons-cli', name: 'commons-cli', version: '1.2' 8 | compile group: 'org.apache.commons', name: 'commons-csv', version: '1.2' 9 | compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.4' 10 | compile group: 'junit', name: 'junit', version: '4.12' 11 | } 12 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/ASTNodeBuilder.java: -------------------------------------------------------------------------------- 1 | package ast; 2 | 3 | import org.antlr.v4.runtime.ParserRuleContext; 4 | 5 | abstract public class ASTNodeBuilder 6 | { 7 | protected ASTNode item; 8 | 9 | public ASTNode getItem() 10 | { 11 | return item; 12 | } 13 | 14 | abstract public void createNew(ParserRuleContext ctx); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/ASTNodeProperties.java: -------------------------------------------------------------------------------- 1 | package ast; 2 | 3 | public class ASTNodeProperties 4 | { 5 | public static final String NODE_ID = "id"; 6 | public static final String FLAGS = "flags"; 7 | public static final String NAMESPACE = "namespace"; 8 | public static final String CLASSNAME = "classname"; 9 | public static final String DOCCOMMENT = "doccomment"; 10 | public static final String CODE = "code"; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/CodeLocation.java: -------------------------------------------------------------------------------- 1 | package ast; 2 | 3 | public class CodeLocation 4 | { 5 | 6 | final public static int NOT_SET = -1; 7 | 8 | public int startLine = NOT_SET; 9 | public int endLine = NOT_SET; 10 | public int startPos = NOT_SET; 11 | public int startIndex = NOT_SET; 12 | public int stopIndex = NOT_SET; 13 | 14 | @Override 15 | public String toString() 16 | { 17 | return String.format("%d:%d:%d:%d", startLine, startPos, startIndex, 18 | stopIndex); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/DummyIdentifierNode.java: -------------------------------------------------------------------------------- 1 | package ast; 2 | 3 | import ast.expressions.Identifier; 4 | 5 | public class DummyIdentifierNode extends Identifier 6 | { 7 | public DummyIdentifierNode() 8 | { 9 | super(); 10 | } 11 | 12 | public String getEscapedCodeStr() 13 | { 14 | return ""; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/NullNode.java: -------------------------------------------------------------------------------- 1 | package ast; 2 | 3 | /* 4 | * This is a dummy "placeholder" node. 5 | * It is mainly used as dummy child for nodes with a fixed number of children 6 | * that do not need a certain child in a given context, to keep 7 | * the number of their children constant 8 | * (e.g., a function node that does not specify its return type in 9 | * its declaration; see TestPHPCSVASTBuilderMinimal for more examples.) 10 | */ 11 | public class NullNode extends ASTNode 12 | { 13 | } 14 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/declarations/IdentifierDeclType.java: -------------------------------------------------------------------------------- 1 | package ast.declarations; 2 | 3 | import ast.ASTNode; 4 | 5 | public class IdentifierDeclType extends ASTNode 6 | { 7 | public String baseType; 8 | public String completeType; 9 | 10 | public String getEscapedCodeStr() 11 | { 12 | return completeType; 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/expressions/AdditiveExpression.java: -------------------------------------------------------------------------------- 1 | package ast.expressions; 2 | 3 | public class AdditiveExpression extends BinaryOperationExpression 4 | { 5 | } 6 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/expressions/AndExpression.java: -------------------------------------------------------------------------------- 1 | package ast.expressions; 2 | 3 | public class AndExpression extends BinaryOperationExpression 4 | { 5 | } 6 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/expressions/Argument.java: -------------------------------------------------------------------------------- 1 | package ast.expressions; 2 | 3 | import ast.statements.ExpressionHolder; 4 | import ast.walking.ASTNodeVisitor; 5 | 6 | public class Argument extends ExpressionHolder 7 | { 8 | public void accept(ASTNodeVisitor visitor) 9 | { 10 | visitor.visit(this); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/expressions/AssignmentExpression.java: -------------------------------------------------------------------------------- 1 | package ast.expressions; 2 | 3 | public class AssignmentExpression extends BinaryExpression 4 | { 5 | } 6 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/expressions/AssignmentWithOpExpression.java: -------------------------------------------------------------------------------- 1 | package ast.expressions; 2 | 3 | public class AssignmentWithOpExpression extends AssignmentExpression 4 | { 5 | 6 | } 7 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/expressions/BinaryOperationExpression.java: -------------------------------------------------------------------------------- 1 | package ast.expressions; 2 | 3 | public class BinaryOperationExpression extends BinaryExpression 4 | { 5 | } 6 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/expressions/BitAndExpression.java: -------------------------------------------------------------------------------- 1 | package ast.expressions; 2 | 3 | public class BitAndExpression extends BinaryOperationExpression 4 | { 5 | } 6 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/expressions/Callee.java: -------------------------------------------------------------------------------- 1 | package ast.expressions; 2 | 3 | import ast.statements.ExpressionHolder; 4 | 5 | // Pseudo node 6 | public class Callee extends ExpressionHolder 7 | { 8 | } 9 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/expressions/CastTarget.java: -------------------------------------------------------------------------------- 1 | package ast.expressions; 2 | 3 | public class CastTarget extends Expression 4 | { 5 | } 6 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/expressions/Constant.java: -------------------------------------------------------------------------------- 1 | package ast.expressions; 2 | 3 | public class Constant extends Expression 4 | { 5 | private Identifier identifier = null; 6 | 7 | public void setIdentifier(Identifier identifier) { 8 | this.identifier = identifier; 9 | super.addChild(identifier); 10 | } 11 | 12 | public Identifier getIdentifier() { 13 | return this.identifier; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/expressions/DoubleExpression.java: -------------------------------------------------------------------------------- 1 | package ast.expressions; 2 | 3 | public class DoubleExpression extends PrimaryExpression 4 | { 5 | } 6 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/expressions/EqualityExpression.java: -------------------------------------------------------------------------------- 1 | package ast.expressions; 2 | 3 | public class EqualityExpression extends BinaryOperationExpression 4 | { 5 | } 6 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/expressions/ExclusiveOrExpression.java: -------------------------------------------------------------------------------- 1 | package ast.expressions; 2 | 3 | public class ExclusiveOrExpression extends BinaryOperationExpression 4 | { 5 | } 6 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/expressions/ForInit.java: -------------------------------------------------------------------------------- 1 | package ast.expressions; 2 | 3 | public class ForInit extends Expression 4 | { 5 | } 6 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/expressions/IncDec.java: -------------------------------------------------------------------------------- 1 | package ast.expressions; 2 | 3 | // This isn't nice because an operator is 4 | // not a standalone expression and can't 5 | // be evaluated. 6 | 7 | public class IncDec extends Expression 8 | { 9 | } 10 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/expressions/InclusiveOrExpression.java: -------------------------------------------------------------------------------- 1 | package ast.expressions; 2 | 3 | public class InclusiveOrExpression extends BinaryOperationExpression 4 | { 5 | } 6 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/expressions/InitializerList.java: -------------------------------------------------------------------------------- 1 | package ast.expressions; 2 | 3 | import ast.statements.ExpressionHolder; 4 | 5 | public class InitializerList extends ExpressionHolder 6 | { 7 | } 8 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/expressions/MemberAccess.java: -------------------------------------------------------------------------------- 1 | package ast.expressions; 2 | 3 | import ast.walking.ASTNodeVisitor; 4 | 5 | public class MemberAccess extends PostfixExpression 6 | { 7 | public void accept(ASTNodeVisitor visitor) 8 | { 9 | visitor.visit(this); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/expressions/MultiplicativeExpression.java: -------------------------------------------------------------------------------- 1 | package ast.expressions; 2 | 3 | public class MultiplicativeExpression extends BinaryOperationExpression 4 | { 5 | } 6 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/expressions/NewExpression.java: -------------------------------------------------------------------------------- 1 | package ast.expressions; 2 | 3 | public class NewExpression extends CallExpressionBase 4 | { 5 | private Expression targetClass = null; 6 | 7 | public Expression getTargetClass() 8 | { 9 | return this.targetClass; 10 | } 11 | 12 | public void setTargetClass(Expression targetClass) 13 | { 14 | this.targetClass = targetClass; 15 | super.addChild(targetClass); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/expressions/OrExpression.java: -------------------------------------------------------------------------------- 1 | package ast.expressions; 2 | 3 | public class OrExpression extends BinaryOperationExpression 4 | { 5 | } 6 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/expressions/PostDecOperationExpression.java: -------------------------------------------------------------------------------- 1 | package ast.expressions; 2 | 3 | public class PostDecOperationExpression extends PostIncDecOperationExpression 4 | { 5 | } 6 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/expressions/PostIncOperationExpression.java: -------------------------------------------------------------------------------- 1 | package ast.expressions; 2 | 3 | public class PostIncOperationExpression extends PostIncDecOperationExpression 4 | { 5 | } 6 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/expressions/PostfixExpression.java: -------------------------------------------------------------------------------- 1 | package ast.expressions; 2 | 3 | public class PostfixExpression extends Expression 4 | { 5 | } 6 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/expressions/PreDecOperationExpression.java: -------------------------------------------------------------------------------- 1 | package ast.expressions; 2 | 3 | public class PreDecOperationExpression extends PreIncDecOperationExpression 4 | { 5 | } 6 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/expressions/PreIncOperationExpression.java: -------------------------------------------------------------------------------- 1 | package ast.expressions; 2 | 3 | public class PreIncOperationExpression extends PreIncDecOperationExpression 4 | { 5 | } 6 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/expressions/PrefixExpression.java: -------------------------------------------------------------------------------- 1 | package ast.expressions; 2 | 3 | public class PrefixExpression extends Expression 4 | { 5 | } 6 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/expressions/PrimaryExpression.java: -------------------------------------------------------------------------------- 1 | package ast.expressions; 2 | 3 | import ast.walking.ASTNodeVisitor; 4 | 5 | public class PrimaryExpression extends Expression 6 | { 7 | public void accept(ASTNodeVisitor visitor) 8 | { 9 | visitor.visit(this); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/expressions/PtrMemberAccess.java: -------------------------------------------------------------------------------- 1 | package ast.expressions; 2 | 3 | import ast.walking.ASTNodeVisitor; 4 | 5 | public class PtrMemberAccess extends PostfixExpression 6 | { 7 | public void accept(ASTNodeVisitor visitor) 8 | { 9 | visitor.visit(this); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/expressions/RelationalExpression.java: -------------------------------------------------------------------------------- 1 | package ast.expressions; 2 | 3 | public class RelationalExpression extends BinaryOperationExpression 4 | { 5 | } 6 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/expressions/ShiftExpression.java: -------------------------------------------------------------------------------- 1 | package ast.expressions; 2 | 3 | public class ShiftExpression extends BinaryOperationExpression 4 | { 5 | } 6 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/expressions/Sizeof.java: -------------------------------------------------------------------------------- 1 | package ast.expressions; 2 | 3 | public class Sizeof extends Expression 4 | { 5 | 6 | } 7 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/expressions/SizeofOperand.java: -------------------------------------------------------------------------------- 1 | package ast.expressions; 2 | 3 | public class SizeofOperand extends Expression 4 | { 5 | 6 | } 7 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/expressions/StringExpression.java: -------------------------------------------------------------------------------- 1 | package ast.expressions; 2 | 3 | public class StringExpression extends PrimaryExpression 4 | { 5 | } 6 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/expressions/UnaryOperationExpression.java: -------------------------------------------------------------------------------- 1 | package ast.expressions; 2 | 3 | import ast.walking.ASTNodeVisitor; 4 | 5 | public class UnaryOperationExpression extends UnaryExpression 6 | { 7 | public void accept(ASTNodeVisitor visitor) 8 | { 9 | visitor.visit(this); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/expressions/UnaryOperator.java: -------------------------------------------------------------------------------- 1 | package ast.expressions; 2 | 3 | import ast.walking.ASTNodeVisitor; 4 | 5 | public class UnaryOperator extends Expression 6 | { 7 | 8 | public void accept(ASTNodeVisitor visitor) 9 | { 10 | visitor.visit(this); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/expressions/Variable.java: -------------------------------------------------------------------------------- 1 | package ast.expressions; 2 | 3 | public class Variable extends Expression 4 | { 5 | private Expression name = null; 6 | 7 | public void setNameExpression(Expression name) { 8 | this.name = name; 9 | super.addChild(name); 10 | } 11 | 12 | public Expression getNameExpression() { 13 | return this.name; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/functionDef/ParameterBase.java: -------------------------------------------------------------------------------- 1 | package ast.functionDef; 2 | 3 | import ast.ASTNode; 4 | import ast.walking.ASTNodeVisitor; 5 | 6 | public abstract class ParameterBase extends ASTNode 7 | { 8 | public abstract ASTNode getType(); 9 | 10 | public abstract String getName(); 11 | 12 | @Override 13 | public void accept(ASTNodeVisitor visitor) 14 | { 15 | visitor.visit(this); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/functionDef/ReturnType.java: -------------------------------------------------------------------------------- 1 | package ast.functionDef; 2 | 3 | import ast.ASTNode; 4 | 5 | public class ReturnType extends ASTNode 6 | { 7 | String completeType; 8 | String baseType; 9 | 10 | public void setCompleteType(String aCompleteType) 11 | { 12 | completeType = aCompleteType; 13 | } 14 | 15 | public void setBaseType(String aBaseType) 16 | { 17 | baseType = aBaseType; 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/logical/statements/BlockCloser.java: -------------------------------------------------------------------------------- 1 | package ast.logical.statements; 2 | 3 | public class BlockCloser extends Statement 4 | { 5 | } 6 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/logical/statements/BlockStarterWithStmtAndCnd.java: -------------------------------------------------------------------------------- 1 | package ast.logical.statements; 2 | 3 | import ast.ASTNode; 4 | 5 | public class BlockStarterWithStmtAndCnd extends BlockStarter { 6 | 7 | @Override 8 | public void addChild(ASTNode node) 9 | { 10 | if (node instanceof Condition) 11 | setCondition((Condition) node); 12 | else if (node instanceof Statement) 13 | setStatement((Statement) node); 14 | else 15 | super.addChild(node); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/logical/statements/Condition.java: -------------------------------------------------------------------------------- 1 | package ast.logical.statements; 2 | 3 | import ast.statements.ExpressionHolder; 4 | import ast.walking.ASTNodeVisitor; 5 | 6 | public class Condition extends ExpressionHolder 7 | { 8 | public void accept(ASTNodeVisitor visitor) 9 | { 10 | visitor.visit(this); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/logical/statements/JumpStatement.java: -------------------------------------------------------------------------------- 1 | package ast.logical.statements; 2 | 3 | public class JumpStatement extends Statement 4 | { 5 | 6 | } 7 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/logical/statements/Statement.java: -------------------------------------------------------------------------------- 1 | package ast.logical.statements; 2 | 3 | import ast.ASTNode; 4 | 5 | public class Statement extends ASTNode 6 | { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/statements/ExpressionStatement.java: -------------------------------------------------------------------------------- 1 | package ast.statements; 2 | 3 | public class ExpressionStatement extends ExpressionHolderStatement 4 | { 5 | } 6 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/statements/blockstarters/DoStatement.java: -------------------------------------------------------------------------------- 1 | package ast.statements.blockstarters; 2 | 3 | import ast.logical.statements.BlockStarterWithStmtAndCnd; 4 | import ast.walking.ASTNodeVisitor; 5 | 6 | public class DoStatement extends BlockStarterWithStmtAndCnd 7 | { 8 | @Override 9 | public void accept(ASTNodeVisitor visitor) 10 | { 11 | visitor.visit(this); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/statements/blockstarters/IfStatementBase.java: -------------------------------------------------------------------------------- 1 | package ast.statements.blockstarters; 2 | 3 | import ast.logical.statements.BlockStarterWithStmtAndCnd; 4 | import ast.walking.ASTNodeVisitor; 5 | 6 | public abstract class IfStatementBase extends BlockStarterWithStmtAndCnd 7 | { 8 | public void accept(ASTNodeVisitor visitor) 9 | { 10 | visitor.visit(this); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/statements/blockstarters/SwitchStatement.java: -------------------------------------------------------------------------------- 1 | package ast.statements.blockstarters; 2 | 3 | import ast.logical.statements.BlockStarterWithStmtAndCnd; 4 | import ast.walking.ASTNodeVisitor; 5 | 6 | public class SwitchStatement extends BlockStarterWithStmtAndCnd 7 | { 8 | public void accept(ASTNodeVisitor visitor) 9 | { 10 | visitor.visit(this); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/statements/blockstarters/WhileStatement.java: -------------------------------------------------------------------------------- 1 | package ast.statements.blockstarters; 2 | 3 | import ast.logical.statements.BlockStarterWithStmtAndCnd; 4 | import ast.walking.ASTNodeVisitor; 5 | 6 | public class WhileStatement extends BlockStarterWithStmtAndCnd 7 | { 8 | @Override 9 | public void accept(ASTNodeVisitor visitor) 10 | { 11 | visitor.visit(this); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/statements/jump/BreakStatement.java: -------------------------------------------------------------------------------- 1 | package ast.statements.jump; 2 | 3 | import ast.logical.statements.BreakOrContinueStatement; 4 | import ast.walking.ASTNodeVisitor; 5 | 6 | public class BreakStatement extends BreakOrContinueStatement 7 | { 8 | 9 | @Override 10 | public void accept(ASTNodeVisitor visitor) 11 | { 12 | visitor.visit(this); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ast/statements/jump/ContinueStatement.java: -------------------------------------------------------------------------------- 1 | package ast.statements.jump; 2 | 3 | import ast.logical.statements.BreakOrContinueStatement; 4 | import ast.walking.ASTNodeVisitor; 5 | 6 | public class ContinueStatement extends BreakOrContinueStatement 7 | { 8 | 9 | @Override 10 | public void accept(ASTNodeVisitor visitor) 11 | { 12 | visitor.visit(this); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/cdg/CDG.java: -------------------------------------------------------------------------------- 1 | package cdg; 2 | 3 | import graphutils.IncidenceListGraph; 4 | import cfg.nodes.CFGNode; 5 | 6 | public class CDG extends IncidenceListGraph 7 | { 8 | 9 | void addEdge(CFGNode source, CFGNode destination) 10 | { 11 | addEdge(new CDGEdge(source, destination)); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/cdg/CDGEdge.java: -------------------------------------------------------------------------------- 1 | package cdg; 2 | 3 | import java.util.Map; 4 | 5 | import cfg.nodes.CFGNode; 6 | import graphutils.Edge; 7 | 8 | public class CDGEdge extends Edge 9 | { 10 | 11 | public CDGEdge(CFGNode source, CFGNode destination) 12 | { 13 | super(source, destination); 14 | } 15 | 16 | @Override 17 | public Map getProperties() 18 | { 19 | return null; 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/cfg/nodes/CFGNode.java: -------------------------------------------------------------------------------- 1 | package cfg.nodes; 2 | 3 | import java.util.Map; 4 | 5 | public interface CFGNode 6 | { 7 | public Map getProperties(); 8 | } 9 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/cg/CGEdge.java: -------------------------------------------------------------------------------- 1 | package cg; 2 | 3 | import graphutils.Edge; 4 | 5 | public class CGEdge extends Edge { 6 | 7 | private static final String DEFAULT_LABEL = "CALL"; 8 | 9 | public CGEdge(CGNode source, CGNode destination) { 10 | super(source, destination); 11 | } 12 | 13 | @Override 14 | public String toString() { 15 | return getSource() + " ==[" + DEFAULT_LABEL + "]==> " + getDestination(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/databaseNodes/DatabaseNode.java: -------------------------------------------------------------------------------- 1 | package databaseNodes; 2 | 3 | import java.util.Map; 4 | 5 | public abstract class DatabaseNode 6 | { 7 | 8 | abstract public void initialize(Object obj); 9 | 10 | abstract public Map createProperties(); 11 | } 12 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/databaseNodes/EdgeKeys.java: -------------------------------------------------------------------------------- 1 | package databaseNodes; 2 | 3 | public class EdgeKeys { 4 | 5 | // symbol for reaching definitions (EdgeTypes.REACHES) 6 | public static final String VAR = "var"; 7 | } 8 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/ddg/DefUseCFG/DefUseCFGFactory.java: -------------------------------------------------------------------------------- 1 | package ddg.DefUseCFG; 2 | 3 | public abstract class DefUseCFGFactory 4 | { 5 | 6 | public abstract DefUseCFG create(Long funcId); 7 | 8 | } 9 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/inputModules/csv/KeyedCSV/exceptions/InvalidCSVFile.java: -------------------------------------------------------------------------------- 1 | package inputModules.csv.KeyedCSV.exceptions; 2 | 3 | public class InvalidCSVFile extends Exception 4 | { 5 | 6 | private static final long serialVersionUID = -7279016694374921095L; 7 | 8 | public InvalidCSVFile(String message) { 9 | super(message); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/inputModules/csv/csv2ast/CSVASTNodeFactory.java: -------------------------------------------------------------------------------- 1 | package inputModules.csv.csv2ast; 2 | 3 | import ast.ASTNode; 4 | import inputModules.csv.KeyedCSV.KeyedCSVRow; 5 | 6 | public class CSVASTNodeFactory 7 | { 8 | 9 | public ASTNode createNode(KeyedCSVRow keyedRow) 10 | { 11 | return null; 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/inputModules/csv/csv2ast/CSVRowInterpreter.java: -------------------------------------------------------------------------------- 1 | package inputModules.csv.csv2ast; 2 | 3 | import inputModules.csv.KeyedCSV.KeyedCSVRow; 4 | import inputModules.csv.KeyedCSV.exceptions.InvalidCSVFile; 5 | 6 | public interface CSVRowInterpreter 7 | { 8 | public long handle(KeyedCSVRow row, ASTUnderConstruction ast) throws InvalidCSVFile; 9 | } 10 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/inputModules/csv/csvFuncExtractor/Range.java: -------------------------------------------------------------------------------- 1 | package inputModules.csv.csvFuncExtractor; 2 | 3 | class Range 4 | { 5 | public Range(int startNo, int endNo) 6 | { 7 | this.startNo = startNo; 8 | this.endNo = endNo; 9 | } 10 | 11 | int startNo; 12 | int endNo; 13 | 14 | public boolean contains(int lineNo) 15 | { 16 | return (lineNo >= startNo && lineNo <= endNo); 17 | } 18 | } -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/misc/Pair.java: -------------------------------------------------------------------------------- 1 | package misc; 2 | 3 | public class Pair 4 | { 5 | private L l; 6 | private R r; 7 | 8 | public Pair(L l, R r) 9 | { 10 | this.l = l; 11 | this.r = r; 12 | } 13 | 14 | public L getL() 15 | { 16 | return l; 17 | } 18 | 19 | public R getR() 20 | { 21 | return r; 22 | } 23 | 24 | public void setL(L l) 25 | { 26 | this.l = l; 27 | } 28 | 29 | public void setR(R r) 30 | { 31 | this.r = r; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/outputModules/CSVASTWalker.java: -------------------------------------------------------------------------------- 1 | package outputModules; 2 | 3 | import outputModules.csv.CSVASTNodeVisitor; 4 | import outputModules.csv.exporters.CSVFunctionExporter; 5 | import outputModules.parser.ParserASTWalker; 6 | 7 | public class CSVASTWalker extends ParserASTWalker 8 | { 9 | public CSVASTWalker(CSVFunctionExporter functionExporter) 10 | { 11 | astVisitor = new CSVASTNodeVisitor(); 12 | ((CSVASTNodeVisitor) astVisitor).setFunctionExporter(functionExporter); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/outputModules/common/CGExporter.java: -------------------------------------------------------------------------------- 1 | package outputModules.common; 2 | 3 | import java.util.Map; 4 | 5 | import cg.CGEdge; 6 | 7 | public abstract class CGExporter { 8 | 9 | protected abstract void addCGEdge(CGEdge cgEdge, Map properties); 10 | } 11 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/outputModules/common/WriterImpl.java: -------------------------------------------------------------------------------- 1 | package outputModules.common; 2 | 3 | import java.util.Map; 4 | 5 | public interface WriterImpl 6 | { 7 | 8 | public long writeNode(Object node, Map properties); 9 | 10 | public void writeEdge(long srcId, long dstId, 11 | Map properties, String edgeType); 12 | 13 | public void changeOutputDir(String dirNameForFileNode); 14 | 15 | public void shutdown(); 16 | 17 | } 18 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/outputModules/csv/MultiPairCSVWriterImpl.java: -------------------------------------------------------------------------------- 1 | package outputModules.csv; 2 | 3 | public class MultiPairCSVWriterImpl extends CSVWriterImpl 4 | { 5 | 6 | @Override 7 | public void changeOutputDir(String dirNameForFileNode) 8 | { 9 | closeEdgeFile(); 10 | closeNodeFile(); 11 | openNodeFile(dirNameForFileNode); 12 | openEdgeFile(dirNameForFileNode); 13 | } 14 | 15 | @Override 16 | public void shutdown() 17 | { 18 | closeEdgeFile(); 19 | closeNodeFile(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/outputModules/csv/exporters/CSVDeclExporter.java: -------------------------------------------------------------------------------- 1 | package outputModules.csv.exporters; 2 | 3 | import ast.ASTNode; 4 | import databaseNodes.DeclDatabaseNode; 5 | 6 | public class CSVDeclExporter extends CSVASTNodeExporter 7 | { 8 | 9 | @Override 10 | public void addToDatabaseSafe(ASTNode node) 11 | { 12 | DeclDatabaseNode dbNode = new DeclDatabaseNode(); 13 | dbNode.initialize(node); 14 | addMainNode(dbNode); 15 | 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/main/java/udg/ASTProvider.java: -------------------------------------------------------------------------------- 1 | package udg; 2 | 3 | public abstract class ASTProvider 4 | { 5 | 6 | public abstract String getTypeAsString(); 7 | 8 | public abstract ASTProvider getChild(int i); 9 | 10 | public abstract int getChildCount(); 11 | 12 | public abstract String getEscapedCodeStr(); 13 | 14 | public abstract int getChildNumber(); 15 | 16 | public abstract String getOperatorCode(); 17 | 18 | } 19 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/test/java/tests/samples/subdir/test.c: -------------------------------------------------------------------------------- 1 | 2 | int foo(){} 3 | -------------------------------------------------------------------------------- /projects/extensions/jpanlib/src/test/java/tests/samples/tiff.cpp: -------------------------------------------------------------------------------- 1 | TiffStream::TiffStream() 2 | { 3 | m_tif = NULL; 4 | 5 | 6 | m_inStream = NULL; 7 | m_outStream = NULL; 8 | m_ioStream = NULL; 9 | 10 | m_streamLength = 0; 11 | 12 | m_this = reinterpret_cast(this); 13 | } 14 | -------------------------------------------------------------------------------- /projects/languages/joern-lang/build.gradle: -------------------------------------------------------------------------------- 1 | task copyLang(type:Copy) { 2 | from "${project.projectDir}/src/main/groovy/" 3 | into "${project.projectDir}/../../octopus/languages/joern/" 4 | } 5 | 6 | build.dependsOn copyLang 7 | -------------------------------------------------------------------------------- /projects/languages/joern-lang/src/main/groovy/syntax/assignment.groovy: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | (Optimized) Match-traversals for assignments 4 | */ 5 | 6 | addStep("lval", { 7 | delegate.out(AST_EDGE).has(NODE_CHILDNUM, '0') 8 | }) 9 | 10 | addStep("rval", { 11 | delegate.out(AST_EDGE).has(NODE_CHILDNUM, '1') 12 | }) 13 | -------------------------------------------------------------------------------- /projects/languages/joern-lang/src/main/groovy/syntax/params.groovy: -------------------------------------------------------------------------------- 1 | 2 | addStep("paramsToNames", { 3 | delegate.children().not(has('type','ParameterType')) 4 | }) 5 | 6 | addStep("paramsToTypes", { 7 | delegate.children().has('type','ParameterType') 8 | }) 9 | -------------------------------------------------------------------------------- /projects/octopus/.gitrepo: -------------------------------------------------------------------------------- 1 | ; DO NOT EDIT (unless you know what you are doing) 2 | ; 3 | ; This subdirectory is a git "subrepo", and this file is maintained by the 4 | ; git-subrepo command. See https://github.com/git-commands/git-subrepo#readme 5 | ; 6 | [subrepo] 7 | remote = git@github.com:octopus-platform/octopus.git 8 | branch = master 9 | commit = beb124eb72df6c2a1a142b89ee9d04f1913e7a2f 10 | parent = f59279852be62e1a2bf4ceac2577aa4d71be0c55 11 | cmdver = 0.3.0 12 | -------------------------------------------------------------------------------- /projects/octopus/AUTHORS: -------------------------------------------------------------------------------- 1 | Fabian Yamaguchi 2 | Alwin Maier 3 | -------------------------------------------------------------------------------- /projects/octopus/extensions/README: -------------------------------------------------------------------------------- 1 | Place your extension JARs here. -------------------------------------------------------------------------------- /projects/octopus/languages/README: -------------------------------------------------------------------------------- 1 | Place your languages here. 2 | -------------------------------------------------------------------------------- /projects/octopus/languages/octopus/exampleStep.groovy: -------------------------------------------------------------------------------- 1 | GraphTraversal.metaClass.exStep = { delegate.values("nodeType") } 2 | -------------------------------------------------------------------------------- /projects/octopus/languages/octopus/lookup.groovy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/octopus-platform/joern/fd9d01cea4b891c174c37d92a0bc8c3d003bc696/projects/octopus/languages/octopus/lookup.groovy -------------------------------------------------------------------------------- /projects/octopus/plugins/README: -------------------------------------------------------------------------------- 1 | Place your plugins here. 2 | -------------------------------------------------------------------------------- /projects/octopus/python/octopus-mlutils/.gitignore: -------------------------------------------------------------------------------- 1 | build/ 2 | 3 | .idea 4 | -------------------------------------------------------------------------------- /projects/octopus/python/octopus-mlutils/.gitrepo: -------------------------------------------------------------------------------- 1 | ; DO NOT EDIT (unless you know what you are doing) 2 | ; 3 | ; This subdirectory is a git "subrepo", and this file is maintained by the 4 | ; git-subrepo command. See https://github.com/git-commands/git-subrepo#readme 5 | ; 6 | [subrepo] 7 | remote = git@github.com:octopus-platform/octopus-tools.git 8 | branch = master 9 | commit = 1a3bfe1e435df081d77b66a8e023a1edfe5619e6 10 | parent = 2cedb970d4e31b3c46003534412783346be79045 11 | cmdver = 0.3.0 12 | -------------------------------------------------------------------------------- /projects/octopus/python/octopus-mlutils/AUTHORS: -------------------------------------------------------------------------------- 1 | Fabian Yamaguchi 2 | Alwin Maier 3 | -------------------------------------------------------------------------------- /projects/octopus/python/octopus-mlutils/octopus/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/octopus-platform/joern/fd9d01cea4b891c174c37d92a0bc8c3d003bc696/projects/octopus/python/octopus-mlutils/octopus/__init__.py -------------------------------------------------------------------------------- /projects/octopus/python/octopus-mlutils/octopus/importer/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/octopus-platform/joern/fd9d01cea4b891c174c37d92a0bc8c3d003bc696/projects/octopus/python/octopus-mlutils/octopus/importer/__init__.py -------------------------------------------------------------------------------- /projects/octopus/python/octopus-mlutils/octopus/plugins/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/octopus-platform/joern/fd9d01cea4b891c174c37d92a0bc8c3d003bc696/projects/octopus/python/octopus-mlutils/octopus/plugins/__init__.py -------------------------------------------------------------------------------- /projects/octopus/python/octopus-mlutils/octopus/plugins/plugin.py: -------------------------------------------------------------------------------- 1 | class OctopusPlugin(object): 2 | def __init__(self, executor): 3 | self._executer = executor 4 | self._pluginname = None 5 | self._classname = None 6 | self._settings = {} 7 | 8 | def execute(self): 9 | return self._executer.execute(self._pluginname, self._classname, self._settings) 10 | -------------------------------------------------------------------------------- /projects/octopus/python/octopus-mlutils/octopus/server/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/octopus-platform/joern/fd9d01cea4b891c174c37d92a0bc8c3d003bc696/projects/octopus/python/octopus-mlutils/octopus/server/__init__.py -------------------------------------------------------------------------------- /projects/octopus/python/octopus-mlutils/octopus/shell/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/octopus-platform/joern/fd9d01cea4b891c174c37d92a0bc8c3d003bc696/projects/octopus/python/octopus-mlutils/octopus/shell/__init__.py -------------------------------------------------------------------------------- /projects/octopus/python/octopus-mlutils/octopus/shell/completer/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/octopus-platform/joern/fd9d01cea4b891c174c37d92a0bc8c3d003bc696/projects/octopus/python/octopus-mlutils/octopus/shell/completer/__init__.py -------------------------------------------------------------------------------- /projects/octopus/python/octopus-mlutils/octopus/shell/config/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/octopus-platform/joern/fd9d01cea4b891c174c37d92a0bc8c3d003bc696/projects/octopus/python/octopus-mlutils/octopus/shell/config/__init__.py -------------------------------------------------------------------------------- /projects/octopus/python/octopus-mlutils/octopus/shell/config/config.py: -------------------------------------------------------------------------------- 1 | import configparser 2 | import os 3 | 4 | USER_CONFIG_FILE = os.path.expanduser('~/.octopus_shell.ini') 5 | GLOBAL_CONFIG_FILE = os.path.join(os.path.dirname(__file__), 'data', 'octopus_shell.ini') 6 | 7 | config = configparser.ConfigParser() 8 | config.read([GLOBAL_CONFIG_FILE, USER_CONFIG_FILE]) 9 | -------------------------------------------------------------------------------- /projects/octopus/python/octopus-mlutils/octopus/shell/config/data/octopus_shell.ini: -------------------------------------------------------------------------------- 1 | [octopus] 2 | port = 2480 3 | host = localhost 4 | 5 | [steps] 6 | dir = steps 7 | 8 | [readline] 9 | init = ~/.octopus_shell_inputrc 10 | hist = ~/.octopus_shell_history -------------------------------------------------------------------------------- /projects/octopus/python/octopus-mlutils/octopus/shell/data/banner.txt: -------------------------------------------------------------------------------- 1 | ___ _ 2 | / _ \ ___| |_ ___ _ __ _ _ ___ 3 | | | | |/ __| __/ _ \| '_ \| | | / __| 4 | | |_| | (__| || (_) | |_) | |_| \__ \ 5 | \___/ \___|\__\___/| .__/ \__,_|___/ 6 | |_| Octopus shell 7 | -------------------------------------------------------------------------------- /projects/octopus/python/octopus-mlutils/octopus/shell/onlinehelp/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/octopus-platform/joern/fd9d01cea4b891c174c37d92a0bc8c3d003bc696/projects/octopus/python/octopus-mlutils/octopus/shell/onlinehelp/__init__.py -------------------------------------------------------------------------------- /projects/octopus/python/octopus-mlutils/octopus/shelltool/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/octopus-platform/joern/fd9d01cea4b891c174c37d92a0bc8c3d003bc696/projects/octopus/python/octopus-mlutils/octopus/shelltool/__init__.py -------------------------------------------------------------------------------- /projects/octopus/python/octopus-mlutils/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/octopus-platform/joern/fd9d01cea4b891c174c37d92a0bc8c3d003bc696/projects/octopus/python/octopus-mlutils/tests/__init__.py -------------------------------------------------------------------------------- /projects/octopus/python/octopus-mlutils/tests/orientdb_server_command.py: -------------------------------------------------------------------------------- 1 | import unittest 2 | 3 | from octopus.server.server_command import ServerCommand 4 | 5 | class TestServerCommand(unittest.TestCase): 6 | 7 | def testUnreachableServer(self): 8 | 9 | self.hostname = 'localhost' 10 | self.port = '1337' 11 | 12 | cmd = ServerCommand(self.hostname, self.port) 13 | self.assertRaises(ConnectionRefusedError, cmd.execute_get_command, "foo") 14 | -------------------------------------------------------------------------------- /projects/octopus/python/octopus-mlutils/tests/orientdb_shell_manager.py: -------------------------------------------------------------------------------- 1 | import unittest 2 | 3 | from octopus.server.shell_mananger import ShellManager 4 | 5 | 6 | class TestShellManager(unittest.TestCase): 7 | def testUnreachableServer(self): 8 | self.hostname = 'localhost' 9 | self.port = '1337' 10 | 11 | shell_manager = ShellManager(self.hostname, self.port) 12 | shells = shell_manager.list() 13 | self.assertRaises(ConnectionRefusedError, list, shells) 14 | -------------------------------------------------------------------------------- /projects/octopus/python/octopus-tools/.gitignore: -------------------------------------------------------------------------------- 1 | build/ 2 | 3 | .idea 4 | -------------------------------------------------------------------------------- /projects/octopus/python/octopus-tools/.gitrepo: -------------------------------------------------------------------------------- 1 | ; DO NOT EDIT (unless you know what you are doing) 2 | ; 3 | ; This subdirectory is a git "subrepo", and this file is maintained by the 4 | ; git-subrepo command. See https://github.com/git-commands/git-subrepo#readme 5 | ; 6 | [subrepo] 7 | remote = git@github.com:octopus-platform/octopus-tools.git 8 | branch = master 9 | commit = 1a3bfe1e435df081d77b66a8e023a1edfe5619e6 10 | parent = 727e3687965539072e0bca4fe9ea4dbd38c1899f 11 | cmdver = 0.3.0 12 | -------------------------------------------------------------------------------- /projects/octopus/python/octopus-tools/AUTHORS: -------------------------------------------------------------------------------- 1 | Fabian Yamaguchi 2 | Alwin Maier 3 | -------------------------------------------------------------------------------- /projects/octopus/python/octopus-tools/octopus/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/octopus-platform/joern/fd9d01cea4b891c174c37d92a0bc8c3d003bc696/projects/octopus/python/octopus-tools/octopus/__init__.py -------------------------------------------------------------------------------- /projects/octopus/python/octopus-tools/octopus/importer/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/octopus-platform/joern/fd9d01cea4b891c174c37d92a0bc8c3d003bc696/projects/octopus/python/octopus-tools/octopus/importer/__init__.py -------------------------------------------------------------------------------- /projects/octopus/python/octopus-tools/octopus/plugins/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/octopus-platform/joern/fd9d01cea4b891c174c37d92a0bc8c3d003bc696/projects/octopus/python/octopus-tools/octopus/plugins/__init__.py -------------------------------------------------------------------------------- /projects/octopus/python/octopus-tools/octopus/plugins/plugin.py: -------------------------------------------------------------------------------- 1 | class OctopusPlugin(object): 2 | def __init__(self, executor): 3 | self._executer = executor 4 | self._pluginname = None 5 | self._classname = None 6 | self._settings = {} 7 | 8 | def execute(self): 9 | return self._executer.execute(self._pluginname, self._classname, self._settings) 10 | -------------------------------------------------------------------------------- /projects/octopus/python/octopus-tools/octopus/server/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/octopus-platform/joern/fd9d01cea4b891c174c37d92a0bc8c3d003bc696/projects/octopus/python/octopus-tools/octopus/server/__init__.py -------------------------------------------------------------------------------- /projects/octopus/python/octopus-tools/octopus/shell/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/octopus-platform/joern/fd9d01cea4b891c174c37d92a0bc8c3d003bc696/projects/octopus/python/octopus-tools/octopus/shell/__init__.py -------------------------------------------------------------------------------- /projects/octopus/python/octopus-tools/octopus/shell/completer/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/octopus-platform/joern/fd9d01cea4b891c174c37d92a0bc8c3d003bc696/projects/octopus/python/octopus-tools/octopus/shell/completer/__init__.py -------------------------------------------------------------------------------- /projects/octopus/python/octopus-tools/octopus/shell/config/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/octopus-platform/joern/fd9d01cea4b891c174c37d92a0bc8c3d003bc696/projects/octopus/python/octopus-tools/octopus/shell/config/__init__.py -------------------------------------------------------------------------------- /projects/octopus/python/octopus-tools/octopus/shell/config/config.py: -------------------------------------------------------------------------------- 1 | import configparser 2 | import os 3 | 4 | USER_CONFIG_FILE = os.path.expanduser('~/.octopus_shell.ini') 5 | GLOBAL_CONFIG_FILE = os.path.join(os.path.dirname(__file__), 'data', 'octopus_shell.ini') 6 | 7 | config = configparser.ConfigParser() 8 | config.read([GLOBAL_CONFIG_FILE, USER_CONFIG_FILE]) 9 | -------------------------------------------------------------------------------- /projects/octopus/python/octopus-tools/octopus/shell/config/data/octopus_shell.ini: -------------------------------------------------------------------------------- 1 | [octopus] 2 | port = 2480 3 | host = localhost 4 | 5 | [steps] 6 | dir = steps 7 | 8 | [readline] 9 | init = ~/.octopus_shell_inputrc 10 | hist = ~/.octopus_shell_history -------------------------------------------------------------------------------- /projects/octopus/python/octopus-tools/octopus/shell/data/banner.txt: -------------------------------------------------------------------------------- 1 | ___ _ 2 | / _ \ ___| |_ ___ _ __ _ _ ___ 3 | | | | |/ __| __/ _ \| '_ \| | | / __| 4 | | |_| | (__| || (_) | |_) | |_| \__ \ 5 | \___/ \___|\__\___/| .__/ \__,_|___/ 6 | |_| Octopus shell 7 | -------------------------------------------------------------------------------- /projects/octopus/python/octopus-tools/octopus/shell/onlinehelp/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/octopus-platform/joern/fd9d01cea4b891c174c37d92a0bc8c3d003bc696/projects/octopus/python/octopus-tools/octopus/shell/onlinehelp/__init__.py -------------------------------------------------------------------------------- /projects/octopus/python/octopus-tools/octopus/shelltool/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/octopus-platform/joern/fd9d01cea4b891c174c37d92a0bc8c3d003bc696/projects/octopus/python/octopus-tools/octopus/shelltool/__init__.py -------------------------------------------------------------------------------- /projects/octopus/python/octopus-tools/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/octopus-platform/joern/fd9d01cea4b891c174c37d92a0bc8c3d003bc696/projects/octopus/python/octopus-tools/tests/__init__.py -------------------------------------------------------------------------------- /projects/octopus/python/octopus-tools/tests/orientdb_server_command.py: -------------------------------------------------------------------------------- 1 | import unittest 2 | 3 | from octopus.server.server_command import ServerCommand 4 | 5 | class TestServerCommand(unittest.TestCase): 6 | 7 | def testUnreachableServer(self): 8 | 9 | self.hostname = 'localhost' 10 | self.port = '1337' 11 | 12 | cmd = ServerCommand(self.hostname, self.port) 13 | self.assertRaises(ConnectionRefusedError, cmd.execute_get_command, "foo") 14 | -------------------------------------------------------------------------------- /projects/octopus/python/octopus-tools/tests/orientdb_shell_manager.py: -------------------------------------------------------------------------------- 1 | import unittest 2 | 3 | from octopus.server.shell_mananger import ShellManager 4 | 5 | 6 | class TestShellManager(unittest.TestCase): 7 | def testUnreachableServer(self): 8 | self.hostname = 'localhost' 9 | self.port = '1337' 10 | 11 | shell_manager = ShellManager(self.hostname, self.port) 12 | shells = shell_manager.list() 13 | self.assertRaises(ConnectionRefusedError, list, shells) 14 | -------------------------------------------------------------------------------- /projects/octopus/src/main/java/octopus/api/OctopusPlainProject.java: -------------------------------------------------------------------------------- 1 | package octopus.api; 2 | 3 | import octopus.api.projects.OctopusProjectWrapper; 4 | 5 | public class OctopusPlainProject extends OctopusProjectWrapper { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /projects/octopus/src/main/java/octopus/api/csvImporter/CSVImporter.java: -------------------------------------------------------------------------------- 1 | package octopus.api.csvImporter; 2 | 3 | import octopus.server.importer.csv.ImportCSVRunnable; 4 | import octopus.server.importer.csv.ImportJob; 5 | 6 | public class CSVImporter { 7 | 8 | public void importCSV(ImportJob job) 9 | { 10 | (new ImportCSVRunnable(job)).run(); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /projects/octopus/src/main/java/octopus/api/database/Database.java: -------------------------------------------------------------------------------- 1 | package octopus.api.database; 2 | 3 | import org.apache.tinkerpop.gremlin.structure.Graph; 4 | 5 | public interface Database { 6 | 7 | 8 | /** 9 | * Return a tinkerpop3 graph instance 10 | * */ 11 | 12 | public Graph getGraph(); 13 | 14 | public void closeInstance(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /projects/octopus/src/main/java/octopus/api/graphstreamImporter/GraphstreamImporter.java: -------------------------------------------------------------------------------- 1 | package octopus.api.graphstreamImporter; 2 | 3 | import octopus.server.importer.graphstream.ImportGraphstreamRunnable; 4 | import octopus.server.importer.graphstream.ImportJob; 5 | 6 | public class GraphstreamImporter { 7 | 8 | public void importGraphstream(ImportJob job) 9 | { 10 | (new ImportGraphstreamRunnable(job)).run(); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /projects/octopus/src/main/java/octopus/api/plugin/Plugin.java: -------------------------------------------------------------------------------- 1 | package octopus.api.plugin; 2 | 3 | import org.json.JSONObject; 4 | 5 | public interface Plugin 6 | { 7 | void configure(JSONObject settings); 8 | 9 | void execute() throws Exception; 10 | 11 | default void beforeExecution() throws Exception {} 12 | 13 | default void afterExecution() throws Exception {} 14 | 15 | default Object result() 16 | { 17 | return null; 18 | } 19 | } -------------------------------------------------------------------------------- /projects/octopus/src/main/java/octopus/api/structures/OctopusNodeProperties.java: -------------------------------------------------------------------------------- 1 | package octopus.api.structures; 2 | 3 | public class OctopusNodeProperties { 4 | 5 | public static final String TYPE = "type"; 6 | public static final String SUBTYPE = "subType"; 7 | public static final String KEY = "key"; 8 | 9 | } 10 | -------------------------------------------------------------------------------- /projects/octopus/src/main/java/octopus/server/importer/csv/titan/CSVCommands.java: -------------------------------------------------------------------------------- 1 | package octopus.server.importer.csv.titan; 2 | 3 | public class CSVCommands { 4 | 5 | public static final String ADD = "A"; 6 | public static final String ADD_NO_REPLACE = "ANR"; 7 | 8 | } 9 | -------------------------------------------------------------------------------- /projects/octopus/src/main/java/octopus/server/importer/csv/titan/Constants.java: -------------------------------------------------------------------------------- 1 | package octopus.server.importer.csv.titan; 2 | 3 | 4 | public class Constants 5 | { 6 | 7 | public static final String DEFAULT_DB_NAME = "bjoernDB"; 8 | 9 | public static final String DB_USERNAME = "root"; 10 | public static final String DB_PASSWORD = "admin"; 11 | 12 | public static final int MAX_NODES_FOR_KEY = 128; 13 | 14 | } 15 | -------------------------------------------------------------------------------- /projects/plugins/README.md: -------------------------------------------------------------------------------- 1 | This is a bit of a misnomer. "joern-octopus-plugins" would be correct, but it's too long. -------------------------------------------------------------------------------- /projects/plugins/dummy/build.gradle: -------------------------------------------------------------------------------- 1 | 2 | dependencies { 3 | compile project(':projects:extensions:joern') 4 | } 5 | -------------------------------------------------------------------------------- /projects/plugins/dummy/src/main/java/joern/plugins/dummy/DummyPlugin.java: -------------------------------------------------------------------------------- 1 | package joern.plugins.dummy; 2 | 3 | import joern.api.plugintypes.JoernPlugin; 4 | 5 | public class DummyPlugin extends JoernPlugin 6 | { 7 | 8 | @Override 9 | public void execute() throws Exception 10 | { 11 | 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /projects/plugins/importer/build.gradle: -------------------------------------------------------------------------------- 1 | 2 | dependencies { 3 | compile project(':projects:extensions:jpanlib') 4 | compile project(':projects:extensions:joern-fuzzyc') 5 | compile project(':projects:extensions:joern') 6 | } 7 | -------------------------------------------------------------------------------- /python/examples/chunking.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | from octopus.server.DBInterface import DBInterface 4 | 5 | projectName = 'testCode.tar.gz' 6 | query = "queryNodeIndex('type:Function').id" 7 | 8 | db = DBInterface() 9 | db.connectToDatabase(projectName) 10 | 11 | ids = db.runGremlinQuery(query) 12 | 13 | CHUNK_SIZE = 256 14 | for chunk in db.chunks(ids, CHUNK_SIZE): 15 | 16 | query = """ idListToNodes(%s).astNodes().id """ % (chunk) 17 | for r in db.runGremlinQuery(query): 18 | print(r) 19 | -------------------------------------------------------------------------------- /python/examples/dummy.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | from octopus.server.DBInterface import DBInterface 4 | 5 | projectName = 'coreutils.tar.gz' 6 | query = "queryNodeIndex('type:Function').name" 7 | 8 | db = DBInterface() 9 | db.connectToDatabase(projectName) 10 | 11 | result = db.runGremlinQuery(query) 12 | for x in result: 13 | print(x) 14 | -------------------------------------------------------------------------------- /python/joern-tools/.gitignore: -------------------------------------------------------------------------------- 1 | *.py[cod] 2 | 3 | # C extensions 4 | *.so 5 | 6 | # Packages 7 | *.egg 8 | *.egg-info 9 | dist 10 | build 11 | eggs 12 | parts 13 | bin 14 | var 15 | sdist 16 | develop-eggs 17 | .installed.cfg 18 | lib 19 | lib64 20 | __pycache__ 21 | 22 | # Installer logs 23 | pip-log.txt 24 | 25 | # Unit test / coverage reports 26 | .coverage 27 | .tox 28 | nosetests.xml 29 | 30 | # Translations 31 | *.mo 32 | 33 | # Mr Developer 34 | .mr.developer.cfg 35 | .project 36 | .pydevproject 37 | -------------------------------------------------------------------------------- /python/joern-tools/.gitrepo: -------------------------------------------------------------------------------- 1 | ; DO NOT EDIT (unless you know what you are doing) 2 | ; 3 | ; This subdirectory is a git "subrepo", and this file is maintained by the 4 | ; git-subrepo command. See https://github.com/git-commands/git-subrepo#readme 5 | ; 6 | [subrepo] 7 | remote = git@github.com:octopus-platform/joern-tools.git 8 | branch = octopusport 9 | commit = f615e818bebfbb1715968ca9d302099b2ede4986 10 | parent = fc1643ac6011d34d9843f0dd5f0a6c1ccae78cba 11 | cmdver = 0.3.0 12 | -------------------------------------------------------------------------------- /python/joern-tools/AUTHORS: -------------------------------------------------------------------------------- 1 | Fabian Yamaguchi 2 | Alwin Maier 3 | -------------------------------------------------------------------------------- /python/joern-tools/README.md: -------------------------------------------------------------------------------- 1 | joern-tools 2 | =========== 3 | 4 | Some simple code analysis tools build on top of joern 5 | 6 | Installation 7 | === 8 | 9 | See the installation instructions [here](http://joern.readthedocs.org/en/latest/installation.html#installing-joern-tools). 10 | -------------------------------------------------------------------------------- /python/joern-tools/examples/knn.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Get k nearest neighbors for second entry in the TOC and output code 3 | 4 | sed -n '2p' ./bagOfWords/TOC | ./knn.py --dirname bagOfWords/ | ./location.py 5 | -------------------------------------------------------------------------------- /python/joern-tools/examples/memcpyCallers.sh: -------------------------------------------------------------------------------- 1 | echo 'type:Callee AND code:memcpy' | lookup.py -a functionId | awk '{split($2,a,":"); print a[2]; }' 2 | -------------------------------------------------------------------------------- /python/joern-tools/examples/subtreeEmbed.sh: -------------------------------------------------------------------------------- 1 | echo 'type:Symbol' | ./lookup.py --attributes functionId | head -n 10 | awk '{split($2,a,":"); print a[2]}' | ./getAst.py | ./astlabel.py | ./ast2features.py | ./demux.py 2 | 3 | sally -n 1 --input_format=dir out/data/ out/embedding.libsvm --hash_file out/feats.gz --vect_embed=tfidf 4 | -------------------------------------------------------------------------------- /python/joern-tools/joern/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/octopus-platform/joern/fd9d01cea4b891c174c37d92a0bc8c3d003bc696/python/joern-tools/joern/__init__.py -------------------------------------------------------------------------------- /python/joern-tools/joern/csvAST/ASTPrinter.py: -------------------------------------------------------------------------------- 1 | 2 | from joern.csvAST.PythonASTProcessor import PythonASTProcessor 3 | 4 | class ASTPrinter(PythonASTProcessor): 5 | 6 | def __init__(self): 7 | self.output = [] 8 | 9 | def nodeHandler(self, node): 10 | self.output.append(str(node)) 11 | return True 12 | 13 | def getOutput(self): 14 | return self.output 15 | -------------------------------------------------------------------------------- /python/joern-tools/joern/csvAST/CSVRowAccessors.py: -------------------------------------------------------------------------------- 1 | # TODO: adapt to output of subTree.py 2 | 3 | ID = 0 4 | NODE_ID = 1 5 | LEVEL = 2 6 | ROW_TYPE = 3 7 | CODE = 4 8 | 9 | def getCSVRowType(row): 10 | return row[ROW_TYPE] 11 | 12 | def getCSVRowStartPos(row): 13 | return row[START_POS].split(':') 14 | 15 | def getCSVRowEndPos(row): 16 | return row[END_POS].split(':') 17 | 18 | def getCSVRowLevel(row): 19 | return row[LEVEL] 20 | 21 | -------------------------------------------------------------------------------- /python/joern-tools/joern/csvAST/README.md: -------------------------------------------------------------------------------- 1 | CSV based representation of abstract syntax trees, filtering and 2 | serialization (see 3 | http://user.informatik.uni-goettingen.de/~krieck/docs/2012-acsac.pdf). 4 | -------------------------------------------------------------------------------- /python/joern-tools/joern/csvAST/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/octopus-platform/joern/fd9d01cea4b891c174c37d92a0bc8c3d003bc696/python/joern-tools/joern/csvAST/__init__.py -------------------------------------------------------------------------------- /python/joern-tools/joern/misc/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/octopus-platform/joern/fd9d01cea4b891c174c37d92a0bc8c3d003bc696/python/joern-tools/joern/misc/__init__.py -------------------------------------------------------------------------------- /python/joern-tools/joern/misc/launch.py: -------------------------------------------------------------------------------- 1 | 2 | import subprocess 3 | import os 4 | 5 | def launch(cmd): 6 | """ 7 | Run the shell command `cmd` and return an iterator 8 | for stdout. 9 | """ 10 | 11 | proc = subprocess.Popen(cmd,stdout=subprocess.PIPE, shell=True) 12 | return proc.stdout 13 | 14 | def runUntilCompletion(cmd): 15 | os.system(cmd) 16 | -------------------------------------------------------------------------------- /python/joern-tools/joern/shelltool/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/octopus-platform/joern/fd9d01cea4b891c174c37d92a0bc8c3d003bc696/python/joern-tools/joern/shelltool/__init__.py -------------------------------------------------------------------------------- /python/joern-tools/joern/view/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/octopus-platform/joern/fd9d01cea4b891c174c37d92a0bc8c3d003bc696/python/joern-tools/joern/view/__init__.py -------------------------------------------------------------------------------- /python/joern-tools/scripts/lowLevel/joern-hide: -------------------------------------------------------------------------------- 1 | 2 | from joern.shelltool.JoernHide import JoernHide 3 | 4 | DESCRIPTION = """ Hide all nodes beneath directories""" 5 | 6 | if __name__ == '__main__': 7 | 8 | tool = JoernHide(DESCRIPTION) 9 | tool.run() 10 | -------------------------------------------------------------------------------- /python/joern-tools/scripts/lowLevel/joern-lookup: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | from joern.shelltool.LookupTool import LookupTool 4 | 5 | DESCRIPTION = """Lookup nodes using lucene queries and output one row 6 | for each matching node. Rows are in the format functionId TAB 7 | attributeKey:attributeValue TAB ...' 8 | """ 9 | 10 | if __name__ == '__main__': 11 | tool = LookupTool(DESCRIPTION) 12 | tool.run() 13 | -------------------------------------------------------------------------------- /python/joern-tools/scripts/lowLevel/joern-tag: -------------------------------------------------------------------------------- 1 | 2 | from joern.shelltool.JoernTag import JoernTag 3 | 4 | DESCRIPTION = """ 5 | Adds attributes to nodes. Lines of "nodeId \t tag-value" 6 | are expected as input. 7 | """ 8 | 9 | if __name__ == '__main__': 10 | tool = JoernTag(DESCRIPTION) 11 | tool.run() 12 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | 2 | include 'projects:octopus' 3 | 4 | include 'projects:extensions:joern' 5 | include 'projects:extensions:jpanlib' 6 | include 'projects:extensions:joern-fuzzyc' 7 | include 'projects:extensions:joern-php' 8 | 9 | include 'projects:plugins:importer' 10 | include 'projects:plugins:dummy' 11 | 12 | include 'projects:languages:joern-lang' 13 | --------------------------------------------------------------------------------