Skip to content

Commit 58fe2cc

Browse files
authored
Merge branch 'master' into andrea.marziali/request3
2 parents 78dac20 + 7059a72 commit 58fe2cc

37 files changed

Lines changed: 1984 additions & 115 deletions

File tree

dd-java-agent/agent-iast/src/main/java/com/datadog/iast/sink/SinkModuleBase.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,12 @@
1919
import com.datadog.iast.util.ObjectVisitor;
2020
import com.datadog.iast.util.RangeBuilder;
2121
import datadog.trace.api.Config;
22+
import datadog.trace.api.Pair;
2223
import datadog.trace.api.iast.IastContext;
2324
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
2425
import datadog.trace.bootstrap.instrumentation.api.AgentTracer;
2526
import datadog.trace.instrumentation.iastinstrumenter.IastExclusionTrie;
27+
import datadog.trace.instrumentation.iastinstrumenter.SourceMapperImpl;
2628
import datadog.trace.util.stacktrace.StackWalker;
2729
import java.util.Iterator;
2830
import java.util.stream.Stream;
@@ -210,6 +212,7 @@ protected Evidence checkInjectionDeeply(final VulnerabilityType type, final Obje
210212
}
211213

212214
@Nullable
215+
@SuppressWarnings("unused")
213216
protected Evidence checkInjectionDeeply(
214217
final VulnerabilityType type,
215218
final Object value,
@@ -218,6 +221,7 @@ protected Evidence checkInjectionDeeply(
218221
}
219222

220223
@Nullable
224+
@SuppressWarnings("unused")
221225
protected Evidence checkInjectionDeeply(
222226
final VulnerabilityType type,
223227
final Object value,
@@ -301,7 +305,20 @@ protected Location buildLocation(
301305
}
302306

303307
protected final StackTraceElement getCurrentStackTrace() {
304-
return stackWalker.walk(SinkModuleBase::findValidPackageForVulnerability);
308+
StackTraceElement stackTraceElement =
309+
stackWalker.walk(SinkModuleBase::findValidPackageForVulnerability);
310+
// If the source mapper is enabled, we should try to map the stack trace element to the original
311+
// source file
312+
if (SourceMapperImpl.INSTANCE != null) {
313+
Pair<String, Integer> pair =
314+
SourceMapperImpl.INSTANCE.getFileAndLine(
315+
stackTraceElement.getClassName(), stackTraceElement.getLineNumber());
316+
if (pair != null && pair.getLeft() != null && pair.getRight() != null) {
317+
return new StackTraceElement(
318+
pair.getLeft(), stackTraceElement.getMethodName(), pair.getLeft(), pair.getRight());
319+
}
320+
}
321+
return stackTraceElement;
305322
}
306323

307324
static StackTraceElement findValidPackageForVulnerability(
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package datadog.trace.agent.tooling.iast.stratum;
2+
3+
public abstract class AbstractStratum {
4+
private String name;
5+
6+
public AbstractStratum(final String name) {
7+
this.name = name;
8+
}
9+
10+
public String getName() {
11+
return name;
12+
}
13+
14+
public void setName(final String name) {
15+
this.name = name;
16+
}
17+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package datadog.trace.agent.tooling.iast.stratum;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
public class EmbeddedStratum extends AbstractStratum {
7+
private final List<SourceMap> sourceMapList = new ArrayList<>();
8+
9+
public EmbeddedStratum() {
10+
this("");
11+
}
12+
13+
public EmbeddedStratum(final String name) {
14+
super(name);
15+
}
16+
17+
public List<SourceMap> getSourceMapList() {
18+
return sourceMapList;
19+
}
20+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package datadog.trace.agent.tooling.iast.stratum;
2+
3+
/**
4+
* The fileInfo describes the translated-source file names <a
5+
* href="https://jakarta.ee/specifications/debugging/2.0/jdsol-spec-2.0#filesection">...</a>
6+
*/
7+
public class FileInfo {
8+
private int fileId = -1;
9+
10+
private String inputFileName;
11+
12+
private String inputFilePath;
13+
14+
public int getFileId() {
15+
return fileId;
16+
}
17+
18+
public void setFileId(final int fileId) {
19+
this.fileId = fileId;
20+
}
21+
22+
public String getInputFileName() {
23+
return inputFileName;
24+
}
25+
26+
public void setInputFileName(final String inputFileName) {
27+
this.inputFileName = inputFileName;
28+
}
29+
30+
public String getInputFilePath() {
31+
if (inputFilePath == null) {
32+
return inputFileName;
33+
}
34+
return inputFilePath;
35+
}
36+
37+
public void setInputFilePath(final String inputFilePath) {
38+
this.inputFilePath = inputFilePath;
39+
}
40+
41+
@Override
42+
public String toString() {
43+
return "FileInfo [fileId="
44+
+ fileId
45+
+ ", inputFileName="
46+
+ inputFileName
47+
+ ", inputFilePath="
48+
+ inputFilePath
49+
+ "]";
50+
}
51+
}
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
package datadog.trace.agent.tooling.iast.stratum;
2+
3+
/**
4+
* The line section associates line numbers in the output source with line numbers and source names
5+
* in the input source.
6+
*
7+
* <p>The format of the line section is the line section marker *L on a line by itself, followed by
8+
* the lines of LineInfo. Each LineInfo has the form:
9+
*
10+
* <p>InputStartLine # LineFileID , RepeatCount : OutputStartLine , OutputLineIncrement where all
11+
* but
12+
*
13+
* <p>InputStartLine : OutputStartLine are optional.
14+
*
15+
* <p><a
16+
* href="https://jakarta.ee/specifications/debugging/2.0/jdsol-spec-2.0#stratumsection">...</a>
17+
*/
18+
public class LineInfo {
19+
private int fileId;
20+
21+
int inputStartLine;
22+
23+
int repeatCount;
24+
25+
int outputStartLine;
26+
27+
int outputLineIncrement;
28+
29+
private FileInfo fileInfo;
30+
31+
public LineInfo(
32+
final int fileId,
33+
final int inputStartLine,
34+
final int repeatCount,
35+
final int outputStartLine,
36+
final int outputLineIncrement) {
37+
this.fileId = fileId;
38+
fileInfo = null;
39+
this.inputStartLine = inputStartLine;
40+
this.repeatCount = repeatCount;
41+
this.outputStartLine = outputStartLine;
42+
this.outputLineIncrement = outputLineIncrement;
43+
}
44+
45+
public LineInfo(
46+
final FileInfo fileInfo,
47+
final int inputStartLine,
48+
final int repeatCount,
49+
final int outputStartLine,
50+
final int outputLineIncrement) {
51+
fileId = -1;
52+
this.fileInfo = fileInfo;
53+
this.inputStartLine = inputStartLine;
54+
this.repeatCount = repeatCount;
55+
this.outputStartLine = outputStartLine;
56+
this.outputLineIncrement = outputLineIncrement;
57+
}
58+
59+
public int getFileId() {
60+
return fileId;
61+
}
62+
63+
public int getInputStartLine() {
64+
return inputStartLine;
65+
}
66+
67+
public int getRepeatCount() {
68+
return repeatCount;
69+
}
70+
71+
public int getOutputStartLine() {
72+
return outputStartLine;
73+
}
74+
75+
public int getOutputLineIncrement() {
76+
return outputLineIncrement;
77+
}
78+
79+
public FileInfo getFileInfo() {
80+
return fileInfo;
81+
}
82+
83+
public void setFileInfo(final FileInfo fileInfo) {
84+
this.fileInfo = fileInfo;
85+
}
86+
87+
@Override
88+
public String toString() {
89+
return "LineInfo [fileId="
90+
+ fileId
91+
+ ", inputStartLine="
92+
+ inputStartLine
93+
+ ", repeatCount="
94+
+ repeatCount
95+
+ ", outputStartLine="
96+
+ outputStartLine
97+
+ ", outputLineIncrement="
98+
+ outputLineIncrement
99+
+ ", fileInfo="
100+
+ fileInfo
101+
+ "]\n";
102+
}
103+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package datadog.trace.agent.tooling.iast.stratum;
2+
3+
public class Location {
4+
private final FileInfo fileInfo;
5+
6+
private final int lineNum;
7+
8+
public Location(final FileInfo fileInfo, final int lineNum) {
9+
this.fileInfo = fileInfo;
10+
this.lineNum = lineNum;
11+
}
12+
13+
public FileInfo getFileInfo() {
14+
return fileInfo;
15+
}
16+
17+
public int getLineNum() {
18+
return lineNum;
19+
}
20+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package datadog.trace.agent.tooling.iast.stratum;
2+
3+
public class ParserException extends SourceMapException {
4+
/** */
5+
private static final long serialVersionUID = 4991227723777615317L;
6+
7+
public ParserException() {}
8+
9+
public ParserException(final String msg) {
10+
super(msg);
11+
}
12+
}

0 commit comments

Comments
 (0)