package fuzion24.device.vulnerability.vulnerabilities.helper;
import android.content.Context;
import android.os.Build;
import java.io.File;
import java.io.IOException;
import static fuzion24.device.vulnerability.vulnerabilities.helper.BinaryAssets.extractAsset;
public class CrashCheck {
public static TestResult execute(Context context, int timeoutSeconds, String... cmdLine) throws IOException, InterruptedException {
String crashCheckPath = extractCrashCheckBinary(context);
String[] crashCheck = new String[cmdLine.length + 2];
crashCheck[0] = crashCheckPath;
crashCheck[1] = String.valueOf(timeoutSeconds);
for (int i = 0; i < cmdLine.length; i++) {
crashCheck[i + 2] = cmdLine[i];
}
Process process = Runtime.getRuntime().exec(crashCheck);
int result = process.waitFor();
switch (result) {
case 254: return TestResult.CRASH;
case 253: return TestResult.HANG;
case 255: return TestResult.ERROR;
default: return TestResult.OK(result);
}
}
private static String extractCrashCheckBinary(Context context) throws IOException {
File dataDir = context.getFilesDir();
String extractedCrashCheck = dataDir.getAbsolutePath() + File.separator + getCrashCheckAppName();
extractAsset(context, "crashCheck" + File.separator + getCrashCheckAppName(), extractedCrashCheck, false);
Process p = Runtime.getRuntime().exec("chmod 700 " + extractedCrashCheck);
try {
p.waitFor();
}catch(Exception e){
//
}
return extractedCrashCheck;
}
public static String getCrashCheckAppName() {
return Build.VERSION.SDK_INT >= 16 ? "crashCheck-pie" : "crashCheck";
}
}