Merge branch 'master' of https://github.com/hashcat/hashcat
authorJens Steube <jens.steube@gmail.com>
Tue, 12 Jul 2016 10:02:14 +0000 (12:02 +0200)
committerJens Steube <jens.steube@gmail.com>
Tue, 12 Jul 2016 10:02:14 +0000 (12:02 +0200)
1  2 
src/hashcat.c

diff --combined src/hashcat.c
@@@ -6147,6 -6147,22 +6147,22 @@@ int main (int argc, char **argv
  
    umask (077);
  
+   /**
+    * There's some buggy OpenCL runtime that do not support -I.
+    * A workaround is to chdir() to the OpenCL folder,
+    * then compile the kernels,
+    * then chdir() back to where we came from so we need to save it first
+    */
+   char cwd[1024];
+   if (getcwd (cwd, sizeof (cwd) - 1) == NULL)
+   {
+     log_error ("ERROR: getcwd(): %s", strerror (errno));
+     return -1;
+   }
    /**
     * Real init
     */
        }
  
        if (platform_skipped == 1) continue;
 +      if (platform_skipped == 2) continue;
  
        for (uint platform_devices_id = 0; platform_devices_id < platform_devices_cnt; platform_devices_id++)
        {
          "inc_vendor.cl",
        };
  
-       for (int i = 0; i < files_cnt; i++)
+       if (chdir (cpath_real) == -1)
        {
-         char path[1024] = { 0 };
+         log_error ("ERROR: %s: %s", cpath_real, strerror (errno));
  
-         snprintf (path, sizeof (path) - 1, "%s/%s", cpath_real, files_names[i]);
+         return -1;
+       }
  
-         FILE *fd = fopen (path, "r");
+       for (int i = 0; i < files_cnt; i++)
+       {
+         FILE *fd = fopen (files_names[i], "r");
  
          if (fd == NULL)
          {
-           log_error ("ERROR: %s: fopen(): %s", path, strerror (errno));
+           log_error ("ERROR: %s: fopen(): %s", files_names[i], strerror (errno));
  
            return -1;
          }
  
          if (n != 1)
          {
-           log_error ("ERROR: %s: fread(): %s", path, strerror (errno));
+           log_error ("ERROR: %s: fread(): %s", files_names[i], strerror (errno));
  
            return -1;
          }
          local_free (kernel_sources);
        }
  
+       // return back to the folder we came from initially (workaround)
+       if (chdir (cwd) == -1)
+       {
+         log_error ("ERROR: %s: %s", cwd, strerror (errno));
+         return -1;
+       }
        // some algorithm collide too fast, make that impossible
  
        if (benchmark == 1)