bpo-30167: Prevent site.main() exception if PYTHONSTARTUP is set. (GH-6731) (GH-7606)

Before Python 3.6, os.path.abspath(None) used to report an AttributeError which was properly caught inside site.abs_paths, making it ignore __main__, one of sys.modules, which has __file__ and __cached__ set to None. With 3.6, os.path.abspath(None) raises TypeError instead which site.abs_path was not expecting.  This resulted in an uncaught exception if a user had PYTHONSTARTUP set and the application called site.main() which a number of third-party programs do.
(cherry picked from commit 2487f30d55)

Co-authored-by: Steve Weber <steverweber@gmail.com>
This commit is contained in:
Miss Islington (bot) 2018-06-10 18:21:35 -07:00 committed by Ned Deily
parent 037e912552
commit ec4343c3b4
3 changed files with 4 additions and 2 deletions

View File

@ -104,11 +104,11 @@ def abs_paths():
continue # don't mess with a PEP 302-supplied __file__
try:
m.__file__ = os.path.abspath(m.__file__)
except (AttributeError, OSError):
except (AttributeError, OSError, TypeError):
pass
try:
m.__cached__ = os.path.abspath(m.__cached__)
except (AttributeError, OSError):
except (AttributeError, OSError, TypeError):
pass

View File

@ -1713,6 +1713,7 @@ David Watson
Aaron Watters
Henrik Weber
Leon Weber
Steve Weber
Corran Webster
Glyn Webster
Phil Webster

View File

@ -0,0 +1 @@
Prevent site.main() exception if PYTHONSTARTUP is set. Patch by Steve Weber.