Skip to content

Commit 068778a

Browse files
authored
Merge pull request #57 from JetBrains-Research/kudashev/crash-deduplication-fix
Casr bug fix and deduplication on initialisation
2 parents 3150551 + b9f44d8 commit 068778a

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

kotlinx.fuzz.jazzer/src/main/kotlin/kotlinx/fuzz/jazzer/JazzerEngine.kt

+29
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,34 @@ class JazzerEngine(private val config: KFuzzConfig) : KFuzzEngine {
4242
config.corpusDir.createDirectories()
4343
config.logsDir.createDirectories()
4444
config.exceptionsDir.createDirectories()
45+
config.global.reproducerDir.createDirectories()
46+
initialCrashDeduplication()
47+
}
48+
49+
private fun initialCrashDeduplication() {
50+
config.global.reproducerDir.listDirectoryEntries()
51+
.filter { it.isDirectory() }
52+
.forEach {classDir ->
53+
classDir.listDirectoryEntries()
54+
.filter { it.isDirectory() }
55+
.forEach { methodDir ->
56+
flatten(methodDir)
57+
JazzerLauncher.clusterCrashes(methodDir)
58+
}
59+
}
60+
clusterCrashes()
61+
}
62+
63+
@OptIn(ExperimentalPathApi::class)
64+
private fun flatten(dir: Path) {
65+
Files.walk(dir).filter { it.isRegularFile() }.forEach {
66+
val targetFile = dir.resolve(it.name)
67+
if (targetFile.exists()) {
68+
return@forEach
69+
}
70+
it.copyTo(targetFile)
71+
}
72+
dir.listDirectoryEntries().filter { it.isDirectory() }.forEach { it.deleteRecursively() }
4573
}
4674

4775
private fun getDebugSetup(intellijDebuggerDispatchPort: Int, method: Method): List<String> {
@@ -78,6 +106,7 @@ class JazzerEngine(private val config: KFuzzConfig) : KFuzzEngine {
78106

79107
val exitCode = ProcessBuilder(
80108
javaCommand,
109+
"-XX:-OmitStackTraceInFastThrow",
81110
"-classpath", classpath,
82111
*debugOptions.toTypedArray(),
83112
*propertiesList.toTypedArray(),

kotlinx.fuzz.jazzer/src/main/kotlin/kotlinx/fuzz/jazzer/JazzerLauncher.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ object JazzerLauncher {
179179
return mapping
180180
}
181181

182-
private fun clusterCrashes(directoryPath: Path): Int {
182+
fun clusterCrashes(directoryPath: Path): Int {
183183
val stacktraceFiles = directoryPath.listStacktraces()
184184

185185
val rawStackTraces = mutableListOf<String>()

0 commit comments

Comments
 (0)