classification
Title: frozen executables should have an empty path
Type: enhancement Stage:
Components: Demos and Tools Versions: Python 3.6, Python 3.5
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: Nosy List: Daniel Shaulov, twouters, vstinner
Priority: normal Keywords: patch

Created on 2016-03-11 13:03 by Daniel Shaulov, last changed 2019-09-26 01:23 by vstinner.

Files
File name Uploaded Description Edit
freeze_path.patch Daniel Shaulov, 2016-03-11 13:03 review
Messages (2)
msg261566 - (view) Author: Daniel Shaulov (Daniel Shaulov) * Date: 2016-03-11 13:03
A frozen python executable should have an empty path, so it doesn't accidentally run something it was not supposed to.

The attached file achieves that by setting Py_NoSiteFlag and Py_IsolatedFlag in Python/frozenmain.c

It also checks for Py_FrozenFlag in Python/sysmodule.c in makepathobject and just returns an empty list if it is set.

I originally tried doing it without changing sysmodule, by calling Py_SetPath as suggested in the comment in getpath.c, but calling Py_SetPath(L"") will leave me with a path that cointains a single empty string. There is no way to set an empty path with Py_SetPath.

Other options include allowing Py_SetPath to accept NULL and making sure that NULL results in an empty list, or changing the behavior of makepathobject so an empty string will result in an empty list instead of a list with an empty string.
msg353255 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2019-09-26 01:23
The PEP 587 has been implemented in Python 3.8. The new API allows to initialize sys.path to a really empty list: sys.path = [].

* https://docs.python.org/dev/c-api/init_config.html
* https://docs.python.org/dev/c-api/init_config.html#c.PyConfig.module_search_paths
History
Date User Action Args
2019-09-26 01:23:43vstinnersetnosy: + vstinner
messages: + msg353255
2016-03-11 13:03:41Daniel Shaulovcreate