Skip to content

Commit a30dec7

Browse files
Upgrade Flowpath enum from scala 2 to scala 3 (#5745)
* Upgrade Flowpath enum from scala 2 to scala 3 * Update to use curly-brace style for enum * Scalafmt
1 parent 372eb56 commit a30dec7

File tree

8 files changed

+37
-38
lines changed

8 files changed

+37
-38
lines changed

dataflowengineoss/src/main/scala/io/joern/dataflowengineoss/DefaultSemantics.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.joern.dataflowengineoss
22

3-
import io.joern.dataflowengineoss.semanticsloader.{FlowSemantic, PassThroughMapping, FullNameSemantics}
3+
import io.joern.dataflowengineoss.semanticsloader.{FlowSemantic, FullNameSemantics}
4+
import io.joern.dataflowengineoss.semanticsloader.FlowPath.{FlowMapping, PassThroughMapping}
45
import io.shiftleft.codepropertygraph.generated.Operators
56

67
import scala.annotation.unused

dataflowengineoss/src/main/scala/io/joern/dataflowengineoss/language/nodemethods/ExpressionMethods.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.joern.dataflowengineoss.language.nodemethods
22

33
import io.joern.dataflowengineoss.semanticsloader.*
4+
import io.joern.dataflowengineoss.semanticsloader.FlowPath.{FlowMapping, PassThroughMapping}
45
import io.shiftleft.codepropertygraph.generated.nodes.{Call, Expression, Method}
56
import io.shiftleft.semanticcpg.language.*
67

dataflowengineoss/src/main/scala/io/joern/dataflowengineoss/passes/reachingdef/EdgeValidator.scala

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,8 @@ package io.joern.dataflowengineoss.passes.reachingdef
22

33
import io.joern.dataflowengineoss.language.*
44
import io.joern.dataflowengineoss.queryengine.Engine.{isOutputArgOfInternalMethod, semanticsForCall}
5-
import io.joern.dataflowengineoss.semanticsloader.{
6-
FlowMapping,
7-
FlowPath,
8-
FlowSemantic,
9-
ParameterNode,
10-
PassThroughMapping,
11-
Semantics
12-
}
5+
import io.joern.dataflowengineoss.semanticsloader.{FlowPath, FlowSemantic, ParameterNode, Semantics}
6+
import io.joern.dataflowengineoss.semanticsloader.FlowPath.{FlowMapping, PassThroughMapping}
137
import io.shiftleft.codepropertygraph.generated.nodes.{Call, CfgNode, Expression, StoredNode}
148
import io.shiftleft.semanticcpg.language.*
159

dataflowengineoss/src/main/scala/io/joern/dataflowengineoss/semanticsloader/FullNameSemantics.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.joern.dataflowengineoss.semanticsloader
22

3+
import io.joern.dataflowengineoss.semanticsloader.FlowPath.{FlowMapping, PassThroughMapping}
34
import io.shiftleft.codepropertygraph.generated.Cpg
45
import io.shiftleft.codepropertygraph.generated.nodes.Method
56
import io.shiftleft.semanticcpg.language.*

dataflowengineoss/src/main/scala/io/joern/dataflowengineoss/semanticsloader/FullNameSemanticsParser.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package io.joern.dataflowengineoss.semanticsloader
22

33
import io.joern.dataflowengineoss.SemanticsParser.MappingContext
44
import io.joern.dataflowengineoss.{SemanticsBaseListener, SemanticsLexer, SemanticsParser}
5+
import io.joern.dataflowengineoss.semanticsloader.FlowPath.{FlowMapping, PassThroughMapping}
56
import org.antlr.v4.runtime.tree.ParseTreeWalker
67
import org.antlr.v4.runtime.{CharStream, CharStreams, CommonTokenStream}
78

dataflowengineoss/src/main/scala/io/joern/dataflowengineoss/semanticsloader/Semantics.scala

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.joern.dataflowengineoss.semanticsloader
22

3+
import io.joern.dataflowengineoss.semanticsloader.FlowPath.{FlowMapping, PassThroughMapping}
34
import io.shiftleft.codepropertygraph.generated.Cpg
45
import io.shiftleft.codepropertygraph.generated.nodes.Method
56
import io.shiftleft.semanticcpg.language.*
@@ -135,33 +136,38 @@ object ParameterNode {
135136

136137
/** Represents explicit mappings or special cases.
137138
*/
138-
sealed trait FlowPath
139139

140-
/** Maps flow between arguments based on how they interact as parameters at the callee.
141-
*
142-
* @param src
143-
* source of the flow.
144-
* @param dst
145-
* destination of the flow.
140+
/** Represents explicit mappings or special cases as a Scala 3 enum.
146141
*/
147-
case class FlowMapping(src: FlowNode, dst: FlowNode) extends FlowPath
142+
enum FlowPath {
143+
144+
/** Maps flow between arguments based on how they interact as parameters at the callee.
145+
*
146+
* @param src
147+
* source of the flow.
148+
* @param dst
149+
* destination of the flow.
150+
*/
151+
case FlowMapping(src: FlowNode, dst: FlowNode)
148152

149-
object FlowMapping {
150-
def apply(from: Int, to: Int): FlowMapping = FlowMapping(ParameterNode(from), ParameterNode(to))
153+
/** Represents an instance where parameters are not sanitized, may affect the return value, and do not cross-taint.
154+
* e.g. foo(1, 2) = 1 -> 1, 2 -> 2, 1 -> -1, 2 -> -1
155+
*
156+
* The main benefit is that this works for unbounded parameters e.g. VARARGS. Note this does not taint 0 -> 0.
157+
*/
158+
case PassThroughMapping
159+
}
151160

152-
def apply(fromIdx: Int, from: String, toIdx: Int, to: String): FlowMapping =
161+
object FlowPath {
162+
163+
def FlowMapping(from: Int, to: Int): FlowPath = FlowMapping(ParameterNode(from), ParameterNode(to))
164+
165+
def FlowMapping(fromIdx: Int, from: String, toIdx: Int, to: String): FlowPath =
153166
FlowMapping(ParameterNode(fromIdx, from), ParameterNode(toIdx, to))
154167

155-
def apply(fromIdx: Int, from: String, toIdx: Int): FlowMapping =
168+
def FlowMapping(fromIdx: Int, from: String, toIdx: Int): FlowPath =
156169
FlowMapping(ParameterNode(fromIdx, from), ParameterNode(toIdx))
157170

158-
def apply(from: Int, toIdx: Int, to: String): FlowMapping = FlowMapping(ParameterNode(from), ParameterNode(toIdx, to))
159-
171+
def FlowMapping(from: Int, toIdx: Int, to: String): FlowPath =
172+
FlowMapping(ParameterNode(from), ParameterNode(toIdx, to))
160173
}
161-
162-
/** Represents an instance where parameters are not sanitized, may affect the return value, and do not cross-taint. e.g.
163-
* foo(1, 2) = 1 -> 1, 2 -> 2, 1 -> -1, 2 -> -1
164-
*
165-
* The main benefit is that this works for unbounded parameters e.g. VARARGS. Note this does not taint 0 -> 0.
166-
*/
167-
object PassThroughMapping extends FlowPath

dataflowengineoss/src/test/scala/io/joern/dataflowengineoss/semanticsloader/FullNameSemanticsParserTests.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.joern.dataflowengineoss.semanticsloader
22

3+
import io.joern.dataflowengineoss.semanticsloader.FlowPath.{FlowMapping, PassThroughMapping}
34
import org.scalatest.matchers.should.Matchers
45
import org.scalatest.wordspec.AnyWordSpec
56

joern-cli/frontends/pysrc2cpg/src/test/scala/io/joern/pysrc2cpg/dataflow/DataFlowTests.scala

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,8 @@ package io.joern.pysrc2cpg.dataflow
22

33
import io.joern.dataflowengineoss.DefaultSemantics
44
import io.joern.dataflowengineoss.language.toExtendedCfgNode
5-
import io.joern.dataflowengineoss.semanticsloader.{
6-
FlowMapping,
7-
FlowSemantic,
8-
NilSemantics,
9-
NoCrossTaintSemantics,
10-
NoSemantics,
11-
PassThroughMapping
12-
}
5+
import io.joern.dataflowengineoss.semanticsloader.{FlowSemantic, NilSemantics, NoCrossTaintSemantics, NoSemantics}
6+
import io.joern.dataflowengineoss.semanticsloader.FlowPath.{FlowMapping, PassThroughMapping}
137
import io.joern.pysrc2cpg.testfixtures.PySrc2CpgFixture
148
import io.shiftleft.codepropertygraph.generated.{Cpg, Operators}
159
import io.shiftleft.codepropertygraph.generated.nodes.{Literal, Member, Method}

0 commit comments

Comments
 (0)