Skip to content

Commit 74cc32f

Browse files
authored
Fix NullPointerException in ApplicationModuleImpl (#9879)
What Does This Do Added a guard in InsecureJspFolderVisitor.preVisitDirectory to keep walking when a directory lacks a name, preventing the previous NullPointerException. Introduced a regression test that instantiates the visitor and verifies it safely handles the filesystem root path.
1 parent d86fe55 commit 74cc32f

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -416,7 +416,11 @@ private static class InsecureJspFolderVisitor implements FileVisitor<Path> {
416416

417417
@Override
418418
public FileVisitResult preVisitDirectory(final Path dir, final BasicFileAttributes attrs) {
419-
final String folder = dir.getFileName().toString();
419+
final Path fileName = dir.getFileName();
420+
if (fileName == null) {
421+
return FileVisitResult.CONTINUE;
422+
}
423+
final String folder = fileName.toString();
420424
if (endsWithIgnoreCase(folder, WEB_INF)) {
421425
return FileVisitResult.SKIP_SUBTREE;
422426
}

dd-java-agent/agent-iast/src/test/groovy/com/datadog/iast/sink/ApplicationModuleTest.groovy

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import com.datadog.iast.model.Vulnerability
66
import com.datadog.iast.model.VulnerabilityType
77
import datadog.trace.api.iast.InstrumentationBridge
88
import datadog.trace.api.iast.sink.ApplicationModule
9+
import java.nio.file.FileVisitResult
10+
import java.nio.file.Paths
911

1012
import static com.datadog.iast.model.VulnerabilityType.ADMIN_CONSOLE_ACTIVE
1113
import static com.datadog.iast.model.VulnerabilityType.DEFAULT_HTML_ESCAPE_INVALID
@@ -138,4 +140,18 @@ class ApplicationModuleTest extends IastModuleImplTestBase {
138140
}
139141
assert vuln.location.line == line
140142
}
143+
144+
void 'insecure jsp visitor handles root directory without name'() {
145+
given:
146+
def visitorClass = ApplicationModuleImpl.declaredClasses.find { it.simpleName == 'InsecureJspFolderVisitor' }
147+
def constructor = visitorClass.getDeclaredConstructor()
148+
constructor.accessible = true
149+
def visitor = constructor.newInstance()
150+
151+
when:
152+
def result = visitor.preVisitDirectory(Paths.get(File.separator), null)
153+
154+
then:
155+
result == FileVisitResult.CONTINUE
156+
}
141157
}

0 commit comments

Comments
 (0)