content: 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";
      }
  }
  