[ruby-core:70694] [Ruby trunk - Bug #11515] [Feedback] CreateProcessW() can cause "Invalid access to memory location"

From: nobu@...
Date: 2015-09-08 23:28:46 UTC
List: ruby-core #70694
Issue #11515 has been updated by Nobuyoshi Nakada.

Status changed from Open to Feedback

`CreateChild` is never called with a constant `cmd`, as it is build at the =
runtime.
How can you reproduce it?

----------------------------------------
Bug #11515: CreateProcessW() can cause "Invalid access to memory location"
https://bugs.ruby-lang.org/issues/11515#change-54087

* Author: Christian H=C3=B6ltje
* Status: Feedback
* Priority: Normal
* Assignee:=20
* ruby -v:=20
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN
----------------------------------------
The second argument for `CreateProcessW()` needs to *not* be a constant bec=
ause it may be modified:

From https://msdn.microsoft.com/en-us/library/windows/desktop/ms682425(v=3D=
vs.85).aspx :

> The Unicode version of this function, CreateProcessW, can modify the cont=
ents 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 paramet=
er is a constant string, the function may cause an access violation.

This would explain sporadic "Invalid access to memory location" errors peop=
le see on Windows.

To resolve ths, `cmd` should be copied into a temporary variable before Cre=
ateProcessW() is called.

I've attached a patch that might work, but I'm not an expert C/Windows prog=
rammer.

---Files--------------------------------
ruby-CreateProcessW-memory-error.diff (919 Bytes)


--=20
https://bugs.ruby-lang.org/

In This Thread

Prev Next