Eryk Sun <eryk...@gmail.com> added the comment:

This should be handled in _winapi.CreateProcess(). An environment block is 
technically required to be sorted. (Ages ago this was a MUST requirement for 
getting and setting variables to work correctly, since the implementation 
depended on the sort order, but I think nowadays it's a SHOULD requirement.) 
For example, see the documentation of CreateProcessW() [1]:

    If an application provides an environment block, ... explicitly create
    these environment variable strings, sort them alphabetically (because
    the system uses a sorted environment)

"Changing Environment Variables" is more specific [2]:

    All strings in the environment block must be sorted alphabetically by name.
    The sort is case-insensitive, Unicode order, without regard to locale.

CompareStringOrdinal() [3] implements a case-insensitive ordinal comparison. 
When a key compares as equal, either keep the current one in the sorted list, 
or replace it with the new key.

---

[1] 
https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessw
[2] 
https://docs.microsoft.com/en-us/windows/win32/procthread/changing-environment-variables
[3] 
https://docs.microsoft.com/en-us/windows/win32/api/stringapiset/nf-stringapiset-comparestringordinal

----------
nosy: +eryksun
versions: +Python 3.11, Python 3.9

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue46862>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to