18
18
*/
19
19
package org .elasticsearch .gradle .precommit ;
20
20
21
+ import de .thetaphi .forbiddenapis .cli .CliMain ;
21
22
import org .apache .commons .io .output .NullOutputStream ;
22
23
import org .elasticsearch .gradle .JdkJarHellCheck ;
24
+ import org .elasticsearch .gradle .OS ;
23
25
import org .gradle .api .DefaultTask ;
24
26
import org .gradle .api .GradleException ;
25
27
import org .gradle .api .JavaVersion ;
51
53
import java .nio .file .Files ;
52
54
import java .util .Arrays ;
53
55
import java .util .Collections ;
56
+ import java .util .List ;
54
57
import java .util .Set ;
55
58
import java .util .TreeSet ;
56
59
import java .util .regex .Matcher ;
@@ -69,6 +72,12 @@ public class ThirdPartyAuditTask extends DefaultTask {
69
72
private static final Pattern VIOLATION_PATTERN = Pattern .compile (
70
73
"\\ s\\ sin ([a-zA-Z0-9$.]+) \\ (.*\\ )"
71
74
);
75
+ private static final int SIG_KILL_EXIT_VALUE = 137 ;
76
+ private static final List <Integer > EXPECTED_EXIT_CODES = Arrays .asList (
77
+ CliMain .EXIT_SUCCESS ,
78
+ CliMain .EXIT_VIOLATION ,
79
+ CliMain .EXIT_UNSUPPORTED_JDK
80
+ );
72
81
73
82
private Set <String > missingClassExcludes = new TreeSet <>();
74
83
@@ -327,7 +336,7 @@ private String formatClassList(Set<String> classList) {
327
336
328
337
private String runForbiddenAPIsCli () throws IOException {
329
338
ByteArrayOutputStream errorOut = new ByteArrayOutputStream ();
330
- getProject ().javaexec (spec -> {
339
+ ExecResult result = getProject ().javaexec (spec -> {
331
340
if (javaHome != null ) {
332
341
spec .setExecutable (javaHome + "/bin/java" );
333
342
}
@@ -336,6 +345,7 @@ private String runForbiddenAPIsCli() throws IOException {
336
345
getRuntimeConfiguration (),
337
346
getProject ().getConfigurations ().getByName ("compileOnly" )
338
347
);
348
+ spec .jvmArgs ("-Xmx1g" );
339
349
spec .setMain ("de.thetaphi.forbiddenapis.cli.CliMain" );
340
350
spec .args (
341
351
"-f" , getSignatureFile ().getAbsolutePath (),
@@ -348,10 +358,18 @@ private String runForbiddenAPIsCli() throws IOException {
348
358
}
349
359
spec .setIgnoreExitValue (true );
350
360
});
361
+ if (OS .current ().equals (OS .LINUX ) && result .getExitValue () == SIG_KILL_EXIT_VALUE ) {
362
+ throw new IllegalStateException (
363
+ "Third party audit was killed buy SIGKILL, could be a victim of the Linux OOM killer"
364
+ );
365
+ }
351
366
final String forbiddenApisOutput ;
352
367
try (ByteArrayOutputStream outputStream = errorOut ) {
353
368
forbiddenApisOutput = outputStream .toString (StandardCharsets .UTF_8 .name ());
354
369
}
370
+ if (EXPECTED_EXIT_CODES .contains (result .getExitValue ()) == false ) {
371
+ throw new IllegalStateException ("Forbidden APIs cli failed: " + forbiddenApisOutput );
372
+ }
355
373
return forbiddenApisOutput ;
356
374
}
357
375
0 commit comments