From: docwhat@... Date: 2015-10-05T20:12:15+00:00 Subject: [ruby-core:70993] [Ruby trunk - Bug #11515] CreateProcessW() can cause "Invalid access to memory location" Issue #11515 has been updated by Christian H��ltje. I found an alternative code version here: http://stackoverflow.com/questions/4514027/createprocessw-acess-violation-in-rtlinitunicodestring ~~~ //I'm copying the string here because CreateProcessW mutates its arguments wchar_t *tmpCmd = _wcsdup(cmd); ... free(tmpCmd); ~~~ As I said, I'm not huge C programmer and definitely not a windows programmer. I don't know what the difference between `_wcsdup()` vs. `_tcscpy_s()` are and why you'd want one over another. Though since `_wcsdup()` looks smarter since it'll allocate its own memory. Someone asked what this meant here: https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/1e799be4-addf-40d8-b49a-cab2321accba/createprocessw-lpcommandline?forum=windowssdk -- I'm not sure if that helps, but I'm trying to do as suggested: create a `WCHAR` buffer to copy the strings into. There is a blog post describing the history of `CreateProcessW()` which is informative: http://blogs.msdn.com/b/oldnewthing/archive/2009/06/01/9673254.aspx As I said, I don't know enough. If the passed in `cmd` is not constant really and is acceptable, then ignore me. ---------------------------------------- Bug #11515: CreateProcessW() can cause "Invalid access to memory location" https://bugs.ruby-lang.org/issues/11515#change-54369 * Author: Christian H��ltje * Status: Feedback * Priority: Normal * Assignee: * ruby -v: * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN ---------------------------------------- The second argument for `CreateProcessW()` needs to *not* be a constant because it may be modified: From https://msdn.microsoft.com/en-us/library/windows/desktop/ms682425(v=vs.85).aspx : > The Unicode version of this function, CreateProcessW, can modify the contents of this string. Therefore, this parameter cannot be a pointer to read-only memory (such as a const variable or a literal string). If this parameter is a constant string, the function may cause an access violation. This would explain sporadic "Invalid access to memory location" errors people see on Windows. To resolve ths, `cmd` should be copied into a temporary variable before CreateProcessW() is called. I've attached a patch that might work, but I'm not an expert C/Windows programmer. ---Files-------------------------------- ruby-CreateProcessW-memory-error.diff (919 Bytes) -- https://bugs.ruby-lang.org/