From 6d2aa559a60500f8961f119e0ba628fd76a0a01f Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Fri, 24 Jun 2016 21:29:23 +0200 Subject: [PATCH] Windows doesn't accept escape characters, falling back to old method for windows --- include/shared.h | 2 +- src/hashcat.c | 32 ++++++++++++++++++++++++++------ src/shared.c | 10 ++++------ 3 files changed, 31 insertions(+), 13 deletions(-) diff --git a/include/shared.h b/include/shared.h index ab8f517..93aad09 100644 --- a/include/shared.h +++ b/include/shared.h @@ -1668,7 +1668,7 @@ int veracrypt_parse_hash_327661 (char *input_buf, uint input_len, hash_t *hash int veracrypt_parse_hash_655331 (char *input_buf, uint input_len, hash_t *hash_buf); int win8phone_parse_hash (char *input_buf, uint input_len, hash_t *hash_buf); -void naive_escape (const char *cpath_real, char *cpath_escaped); +void naive_escape (const char *cpath_real, char *cpath_escaped, const size_t cpath_escaped_len); void load_kernel (const char *kernel_file, int num_devices, size_t *kernel_lengths, const u8 **kernel_sources); void writeProgramBin (char *dst, u8 *binary, size_t binary_size); diff --git a/src/hashcat.c b/src/hashcat.c index ea9fb03..a9d9bb3 100644 --- a/src/hashcat.c +++ b/src/hashcat.c @@ -15395,31 +15395,51 @@ int main (int argc, char **argv) char cpath[1024] = { 0 }; + char build_opts[1024] = { 0 }; + #if _WIN snprintf (cpath, sizeof (cpath) - 1, "%s\\OpenCL\\", shared_dir); char cpath_real[MAX_PATH] = { 0 }; - GetFullPathName (cpath, MAX_PATH, cpath_real, NULL); + if (GetFullPathName (cpath, MAX_PATH, cpath_real, NULL) == 0) + { + log_error ("ERROR: %s: %s", cpath, "GetFullPathName()"); + + return -1; + } + + snprintf (build_opts, sizeof (build_opts) - 1, "-I \"%s\"", cpath_real); #else snprintf (cpath, sizeof (cpath) - 1, "%s/OpenCL/", shared_dir); - char *cpath_real = realpath (cpath, NULL); + char cpath_real[PATH_MAX] = { 0 }; - #endif + if (realpath (cpath, cpath_real) == NULL) + { + log_error ("ERROR: %s: %s", cpath, strerror (errno)); + + return -1; + } char cpath_escaped[1024] = { 0 }; - naive_escape (cpath_real, cpath_escaped); + naive_escape (cpath_real, cpath_escaped, sizeof (cpath_escaped)); + + snprintf (build_opts, sizeof (build_opts) - 1, "-I %s", cpath_real); + + #endif // we don't have sm_* on vendors not NV but it doesn't matter - char build_opts[1024] = { 0 }; + char build_opts_new[1024] = { 0 }; + + snprintf (build_opts_new, sizeof (build_opts_new) - 1, "%s -D VENDOR_ID=%u -D CUDA_ARCH=%d -D VECT_SIZE=%u -D DEVICE_TYPE=%u -D KERN_TYPE=%u -D _unroll -cl-std=CL1.1", build_opts, device_param->device_vendor_id, (device_param->sm_major * 100) + device_param->sm_minor, device_param->vector_width, (u32) device_param->device_type, kern_type); - snprintf (build_opts, sizeof (build_opts) - 1, "-I %s -D VENDOR_ID=%u -D CUDA_ARCH=%d -D VECT_SIZE=%u -D DEVICE_TYPE=%u -D KERN_TYPE=%u -D _unroll -cl-std=CL1.1", cpath_escaped, device_param->device_vendor_id, (device_param->sm_major * 100) + device_param->sm_minor, device_param->vector_width, (u32) device_param->device_type, kern_type); + strncpy (build_opts, build_opts_new, sizeof (build_opts)); #ifdef DEBUG log_info ("- Device #%u: build_opts '%s'\n", device_id + 1, build_opts); diff --git a/src/shared.c b/src/shared.c index 5f99c73..12d7706 100644 --- a/src/shared.c +++ b/src/shared.c @@ -9220,9 +9220,9 @@ void myquit () data.devices_status = STATUS_QUIT; } -void naive_escape (const char *cpath_real, char *cpath_escaped) +void naive_escape (const char *cpath_real, char *cpath_escaped, const size_t cpath_escaped_len) { - const size_t len = MIN (strlen (cpath_real), 1024); + const size_t len = strlen (cpath_real); for (size_t in = 0, out = 0; in < len; in++, out++) { @@ -9230,15 +9230,13 @@ void naive_escape (const char *cpath_real, char *cpath_escaped) if (c == ' ') { - #if _WIN - cpath_escaped[out] = '^'; - #else cpath_escaped[out] = '\\'; - #endif out++; } + if (out == cpath_escaped_len) break; + cpath_escaped[out] = c; } } -- 2.25.1