Eryk Sun <[email protected]> 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 <[email protected]>
<https://bugs.python.org/issue46862>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com