On 25/03/2020 17:51, Adrian McCarthy via lldb-commits wrote:
> 
> 
> On Wed, Mar 25, 2020 at 9:49 AM Adrian McCarthy <amcca...@google.com
> <mailto:amcca...@google.com>> wrote:
> 
> 
> 
>     On Wed, Mar 25, 2020 at 9:10 AM Pavel Labath <pav...@centrum.sk
>     <mailto:pav...@centrum.sk>> wrote:
> 
>         On 25/03/2020 01:04, Adrian McCarthy wrote:
>         > I took a stab at this, but I'm not seeing any new test failures.
> 
>         That is odd.
> 
>         I was doing some stuff on windows today, so I figured I'd take a
>         stab at
>         this. I was kind of right that the check in ProcessLauncher windows
>         prevents us from passing an empty environment.
> 
>         However, the interesting part starts when I tried to remove that
>         check.
>         Then the test started behaving nondeterministically -- sometimes
>         passing
>         and sometimes failing due to ERROR_INVALID_PARAMETER being
>         returned from
>         CreateProcessW. I can see how windows might need some environment
>         variables to start up a process correctly, but I do not
>         understand why
>         this should be nondeterministic...
> 
> 
>     Oh, I have a guess.  CreateProcessW takes a pointer to an
>     environment block.  If that pointer is null, the process will
>     inherit the parent environment.  If you want to pass it an empty
>     environment, you have to have a valid pointer to an empty string (or
>     possibly to a string with TWO terminating '\0's).
> 
> 
> Scratch the "or possibly."  You definitely need two terminating zeros. 
> Since it's in UTF-16, it wants two L'\0', which is four consecutive zero
> bytes.
>  

Thanks. This is exactly what was needed. It's not what I would have
expected, as the documentation says this is "null-terminated block of
null-terminated strings" -- in my book that would mean that an empty
list of null-terminated strings ends with a single L'\0'. But I guess
this is a very weird corner case, as an empty environment is literally
the only way to *not* need a double null terminator.

Anyway, D76835 is the patch for that.

pl
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to