Skip to content

Commit af659e0

Browse files
Use new script manager. (#178)
* Update gitignore to ignore preprocessor. * Update Joern to use the latest script manager. * Remove unused project. * Symlink to scripts folder. * Run scalafmt.
1 parent 2d103c1 commit af659e0

File tree

29 files changed

+101
-121
lines changed

29 files changed

+101
-121
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ fuzzyc2cpg
99
.idea/
1010
joern-cli.zip
1111
joern-server.zip
12-
fuzzyppcli-dist
12+
fuzzyppcli/
1313
cpg.bin.zip
1414

1515

build.sbt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ name := "joern"
44
organization := "io.shiftleft"
55
ThisBuild / scalaVersion := "2.12.8"
66

7-
val cpgVersion = "0.10.126"
8-
val fuzzyc2cpgVersion = "1.1.12"
7+
val cpgVersion = "0.10.131"
8+
val fuzzyc2cpgVersion = "1.1.13"
99

1010
ThisBuild / resolvers += Resolver.mavenLocal
1111

fuzzyppcli/fuzzyppcli

-2.71 MB
Binary file not shown.

joern-cli/build.sbt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import java.io.FilenameFilter
2-
31
enablePlugins(JavaAppPackaging)
42
enablePlugins(UniversalPlugin)
53

File renamed without changes.

scripts/ast-for-funcs-dump/ast-for-funcs-dump.scala renamed to joern-cli/src/main/resources/scripts/ast-for-funcs-dump.sc

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -72,19 +72,19 @@
7272
// ...
7373
*/
7474

75-
import java.io._
76-
77-
import scala.collection.JavaConverters._
78-
79-
import io.circe.syntax._
75+
import gremlin.scala._
8076
import io.circe.generic.semiauto._
77+
import io.circe.syntax._
8178
import io.circe.{Encoder, Json}
79+
import org.apache.tinkerpop.gremlin.structure.{Edge, VertexProperty}
8280

8381
import io.shiftleft.codepropertygraph.generated.nodes.AstNode
82+
import io.shiftleft.joern.console.Console.cpg
83+
import io.shiftleft.semanticcpg.language._
8484

85-
import gremlin.scala._
86-
import org.apache.tinkerpop.gremlin.structure.Edge
87-
import org.apache.tinkerpop.gremlin.structure.VertexProperty
85+
import java.io._
86+
87+
import scala.collection.JavaConverters._
8888

8989
final case class AstForFuncsFunction(function: String, id: String, AST: List[AstNode])
9090

scripts/ast-for-funcs/ast-for-funcs.scala renamed to joern-cli/src/main/resources/scripts/ast-for-funcs.sc

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -71,17 +71,17 @@
7171
// ...
7272
*/
7373

74-
import scala.collection.JavaConverters._
75-
76-
import io.circe.syntax._
74+
import gremlin.scala._
7775
import io.circe.generic.semiauto._
76+
import io.circe.syntax._
7877
import io.circe.{Encoder, Json}
78+
import org.apache.tinkerpop.gremlin.structure.{Edge, VertexProperty}
7979

8080
import io.shiftleft.codepropertygraph.generated.nodes.AstNode
81+
import io.shiftleft.joern.console.Console.cpg
82+
import io.shiftleft.semanticcpg.language._
8183

82-
import gremlin.scala._
83-
import org.apache.tinkerpop.gremlin.structure.Edge
84-
import org.apache.tinkerpop.gremlin.structure.VertexProperty
84+
import scala.collection.JavaConverters._
8585

8686
final case class AstForFuncsFunction(function: String, id: String, AST: List[AstNode])
8787
final case class AstForFuncsResult(functions: List[AstForFuncsFunction])

scripts/cfg-for-funcs-dump/cfg-for-funcs-dump.scala renamed to joern-cli/src/main/resources/scripts/cfg-for-funcs-dump.sc

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -68,20 +68,20 @@
6868
// ...
6969
*/
7070

71-
import java.io._
72-
73-
import scala.collection.JavaConverters._
74-
import io.circe.syntax._
71+
import gremlin.scala._
7572
import io.circe.generic.semiauto._
73+
import io.circe.syntax._
7674
import io.circe.{Encoder, Json}
75+
import org.apache.tinkerpop.gremlin.structure.{Edge, VertexProperty}
7776

77+
import io.shiftleft.codepropertygraph.generated.{EdgeTypes, nodes}
78+
import io.shiftleft.joern.console.Console.cpg
79+
import io.shiftleft.semanticcpg.language._
7880
import io.shiftleft.semanticcpg.language.types.expressions.generalizations.CfgNode
79-
import io.shiftleft.codepropertygraph.generated.EdgeTypes
80-
import io.shiftleft.codepropertygraph.generated.nodes
8181

82-
import gremlin.scala._
83-
import org.apache.tinkerpop.gremlin.structure.Edge
84-
import org.apache.tinkerpop.gremlin.structure.VertexProperty
82+
import java.io._
83+
84+
import scala.collection.JavaConverters._
8585

8686
final case class CfgForFuncsFunction(function: String, id: String, CFG: List[nodes.CfgNode])
8787

scripts/cfg-for-funcs/cfg-for-funcs.scala renamed to joern-cli/src/main/resources/scripts/cfg-for-funcs.sc

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -68,19 +68,18 @@
6868
// ...
6969
*/
7070

71-
import scala.collection.JavaConverters._
72-
73-
import io.circe.syntax._
71+
import gremlin.scala._
7472
import io.circe.generic.semiauto._
73+
import io.circe.syntax._
7574
import io.circe.{Encoder, Json}
75+
import org.apache.tinkerpop.gremlin.structure.{Edge, VertexProperty}
7676

77+
import io.shiftleft.codepropertygraph.generated.{EdgeTypes, nodes}
78+
import io.shiftleft.joern.console.Console.cpg
79+
import io.shiftleft.semanticcpg.language._
7780
import io.shiftleft.semanticcpg.language.types.expressions.generalizations.CfgNode
78-
import io.shiftleft.codepropertygraph.generated.EdgeTypes
79-
import io.shiftleft.codepropertygraph.generated.nodes
8081

81-
import gremlin.scala._
82-
import org.apache.tinkerpop.gremlin.structure.Edge
83-
import org.apache.tinkerpop.gremlin.structure.VertexProperty
82+
import scala.collection.JavaConverters._
8483

8584
final case class CfgForFuncsFunction(function: String, id: String, CFG: List[nodes.CfgNode])
8685
final case class CfgForFuncsResult(functions: List[CfgForFuncsFunction])

scripts/cfgToDot/cfgToDot.scala renamed to joern-cli/src/main/resources/scripts/cfgToDot.sc

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,14 @@
3434
}
3535
*/
3636

37-
import java.nio.file.Paths
38-
3937
import gremlin.scala._
40-
import io.shiftleft.codepropertygraph.generated._
41-
import io.shiftleft.semanticcpg.utils.ExpandTo
4238
import org.apache.tinkerpop.gremlin.structure.Direction
39+
4340
import io.shiftleft.Implicits.JavaIteratorDeco
41+
import io.shiftleft.codepropertygraph.generated._
42+
import io.shiftleft.joern.console.Console.cpg
43+
44+
import java.nio.file.Paths
4445

4546
/** Some helper functions: adapted from ReachingDefPass.scala in codeproperty graph repo */
4647
def vertexToStr(vertex: Vertex): String = {

scripts/graph-for-funcs/graph-for-funcs.scala renamed to joern-cli/src/main/resources/scripts/graph-for-funcs.sc

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,16 @@ import io.circe.syntax._
2626
import io.circe.generic.semiauto._
2727
import io.circe.{Encoder, Json}
2828

29-
import io.shiftleft.dataflowengine.language._
3029
import io.shiftleft.semanticcpg.language.types.expressions.generalizations.CfgNode
3130
import io.shiftleft.codepropertygraph.generated.EdgeTypes
3231
import io.shiftleft.codepropertygraph.generated.NodeTypes
3332
import io.shiftleft.codepropertygraph.generated.nodes
33+
import io.shiftleft.dataflowengine.language._
34+
import io.shiftleft.semanticcpg.language._
3435
import io.shiftleft.semanticcpg.language.types.expressions.Call
3536
import io.shiftleft.semanticcpg.language.types.structure.Local
3637
import io.shiftleft.codepropertygraph.generated.nodes.MethodParameterIn
37-
38+
import io.shiftleft.joern.console.Console.cpg
3839
import gremlin.scala._
3940
import org.apache.tinkerpop.gremlin.structure.Edge
4041
import org.apache.tinkerpop.gremlin.structure.VertexProperty

scripts/list-funcs/list-funcs.scala renamed to joern-cli/src/main/resources/scripts/list-funcs.sc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,7 @@
1414
List("<operator>.indirectMemberAccess", "<operator>.assignment", "free_list", "free", "<operator>.notEquals")
1515
*/
1616

17+
import io.shiftleft.joern.console.Console.cpg
18+
import io.shiftleft.semanticcpg.language._
19+
1720
cpg.method.name.l

scripts/pdg-for-funcs-dump/pdg-for-funcs-dump.scala renamed to joern-cli/src/main/resources/scripts/pdg-for-funcs-dump.sc

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -64,24 +64,23 @@
6464
// ...
6565
*/
6666

67-
import java.io._
68-
69-
import scala.collection.JavaConverters._
70-
import io.circe.syntax._
67+
import gremlin.scala._
7168
import io.circe.generic.semiauto._
69+
import io.circe.syntax._
7270
import io.circe.{Encoder, Json}
71+
import org.apache.tinkerpop.gremlin.structure.{Edge, VertexProperty}
7372

74-
import io.shiftleft.dataflowengine.language._
7573
import io.shiftleft.codepropertygraph.generated.nodes.MethodParameterIn
74+
import io.shiftleft.codepropertygraph.generated.{EdgeTypes, NodeTypes, nodes}
75+
import io.shiftleft.dataflowengine.language._
76+
import io.shiftleft.joern.console.Console.cpg
77+
import io.shiftleft.semanticcpg.language._
7678
import io.shiftleft.semanticcpg.language.types.expressions.Call
7779
import io.shiftleft.semanticcpg.language.types.structure.Local
78-
import io.shiftleft.codepropertygraph.generated.EdgeTypes
79-
import io.shiftleft.codepropertygraph.generated.NodeTypes
80-
import io.shiftleft.codepropertygraph.generated.nodes
8180

82-
import gremlin.scala._
83-
import org.apache.tinkerpop.gremlin.structure.Edge
84-
import org.apache.tinkerpop.gremlin.structure.VertexProperty
81+
import java.io._
82+
83+
import scala.collection.JavaConverters._
8584

8685
implicit val encodeFuncFunction: Encoder[PdgForFuncsFunction] = deriveEncoder
8786

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
{
2+
"scripts": [
3+
{
4+
"name": "ast-for-funcs",
5+
"description": "Returns the corresponding AST for each function as Json object."
6+
},
7+
{
8+
"name": "ast-for-funcs-dump",
9+
"description": "Prints the corresponding AST for each function as Json string to a file."
10+
},
11+
{
12+
"name": "cfg-for-funcs",
13+
"description": "Returns the corresponding CFG for each function as Json object."
14+
},
15+
{
16+
"name": "cfg-for-funcs-dump",
17+
"description": "Prints the corresponding CFG for each function as Json string to a file."
18+
},
19+
{
20+
"name": "cfgToDot",
21+
"description": "Generates a dot graph for your cfg."
22+
},
23+
{
24+
"name": "functions-to-dot",
25+
"description": "Generates a list of strings, each containing a dot graph for every internal function in the provided CPG."
26+
},
27+
{
28+
"name": "graph-for-funcs",
29+
"description": "Returns the corresponding graph (AST+CFG+PDG) for each function as Json object."
30+
},
31+
{
32+
"name": "list-funcs",
33+
"description": "Lists all functions."
34+
},
35+
{
36+
"name": "pdg-for-funcs-dump",
37+
"description": "Prints the corresponding PDG for each function as Json string to a file."
38+
}
39+
]
40+
}

joern-cli/src/main/scala/io/shiftleft/joern/JoernScriptExecutor.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,12 @@ class JoernScriptExecutor extends CpgQueryExecutor[AnyRef] {
3737
}
3838

3939
override def executeQuery(cpg: Cpg, query: String): IO[UUID] =
40-
??? // unused within Joern
40+
??? // unused in the Joern CLI
4141

4242
override def executeQuerySync(cpg: Cpg, query: String): IO[CpgOperationResult[AnyRef]] =
4343
underlying.executeQuerySync(cpg, query)
4444

4545
override def retrieveQueryResult(queryId: UUID): OptionT[IO, CpgOperationResult[AnyRef]] =
46-
??? // unused within Joern
46+
??? // unused in the Joern CLI
4747

4848
}
Lines changed: 1 addition & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,5 @@
11
package io.shiftleft.joern
22

3-
import cats.effect.IO
4-
import io.shiftleft.codepropertygraph.Cpg
53
import io.shiftleft.console.ScriptManager
6-
import io.shiftleft.console.query.{CpgOperationFailure, CpgOperationResult, CpgOperationSuccess}
74

8-
class JoernScriptManager(executor: JoernScriptExecutor = new JoernScriptExecutor()) extends ScriptManager(executor) {
9-
10-
private def scriptContent(name: String): String =
11-
(DEFAULT_SCRIPTS_FOLDER / name / s"$name.scala").lines.mkString(System.lineSeparator())
12-
13-
private def handleQueryResult(result: IO[CpgOperationResult[AnyRef]]): AnyRef = {
14-
val scriptExecutionResult = for {
15-
queryResult <- result
16-
result <- queryResult match {
17-
case CpgOperationSuccess(result) => IO(result)
18-
case CpgOperationFailure(ex) => IO.raiseError[AnyRef](ex)
19-
}
20-
} yield result
21-
scriptExecutionResult.handleErrorWith(IO(_)).unsafeRunSync()
22-
}
23-
24-
def runScript(name: String, cpgFilename: String): AnyRef =
25-
handleQueryResult(executor.executeQuerySync(CpgLoader.load(cpgFilename), scriptContent(name)))
26-
27-
def runScript(name: String, cpg: Cpg): AnyRef =
28-
handleQueryResult(executor.executeQuerySync(cpg, scriptContent(name)))
29-
30-
}
5+
class JoernScriptManager(executor: JoernScriptExecutor = new JoernScriptExecutor()) extends ScriptManager(executor)

joern-server/build.sbt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ enablePlugins(JavaAppPackaging)
22
enablePlugins(UniversalPlugin)
33

44
organization := "io.shiftleft"
5-
name := "Joern Server"
5+
name := "joern-server"
66
maintainer := "[email protected]"
77

88
resolvers += Classpaths.typesafeReleases

project/Projects.scala

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
21
import sbt._
32

43
object Projects {
5-
lazy val joerncli = project.in(file("joern-cli"))
6-
lazy val joernserver = project.in(file("joern-server"))
4+
lazy val joerncli = project.in(file("joern-cli"))
5+
lazy val joernserver = project.in(file("joern-server"))
76
}

scripts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
joern-cli/src/main/resources/scripts

scripts/ast-for-funcs-dump/description.json

Lines changed: 0 additions & 4 deletions
This file was deleted.

scripts/ast-for-funcs/description.json

Lines changed: 0 additions & 4 deletions
This file was deleted.

scripts/cfg-for-funcs-dump/description.json

Lines changed: 0 additions & 4 deletions
This file was deleted.

scripts/cfg-for-funcs/description.json

Lines changed: 0 additions & 4 deletions
This file was deleted.

scripts/cfgToDot/description.json

Lines changed: 0 additions & 4 deletions
This file was deleted.

scripts/functions-to-dot/description.json

Lines changed: 0 additions & 4 deletions
This file was deleted.

scripts/graph-for-funcs/description.json

Lines changed: 0 additions & 4 deletions
This file was deleted.

scripts/list-funcs/description.json

Lines changed: 0 additions & 4 deletions
This file was deleted.

scripts/pdg-for-funcs-dump/description.json

Lines changed: 0 additions & 4 deletions
This file was deleted.

0 commit comments

Comments
 (0)