@@ -42,6 +42,34 @@ class JazzerEngine(private val config: KFuzzConfig) : KFuzzEngine {
42
42
config.corpusDir.createDirectories()
43
43
config.logsDir.createDirectories()
44
44
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() }
45
73
}
46
74
47
75
private fun getDebugSetup (intellijDebuggerDispatchPort : Int , method : Method ): List <String > {
@@ -78,6 +106,7 @@ class JazzerEngine(private val config: KFuzzConfig) : KFuzzEngine {
78
106
79
107
val exitCode = ProcessBuilder (
80
108
javaCommand,
109
+ " -XX:-OmitStackTraceInFastThrow" ,
81
110
" -classpath" , classpath,
82
111
* debugOptions.toTypedArray(),
83
112
* propertiesList.toTypedArray(),
0 commit comments