1
0
mirror of https://git.FreeBSD.org/ports.git synced 2025-01-03 06:04:53 +00:00
freebsd-ports/lang/python20/files/patch-Lib:os.py
Jacques Vidrine 4a46e91cbf Backport fix for temporary file handling bug in os._execvpe() from
Python 2.2.2.

Not approved by:	tg (short timeout)
2002-11-14 16:52:24 +00:00

77 lines
2.1 KiB
Python

*** Lib/os.py.orig Thu Sep 28 14:10:56 2000
--- Lib/os.py Mon Nov 11 15:18:05 2002
***************
*** 234,241 ****
args may be a list or tuple of strings. """
_execvpe(file, args, env)
- _notfound = None
def _execvpe(file, args, env=None):
if env is not None:
func = execve
argrest = (args, env)
--- 234,242 ----
args may be a list or tuple of strings. """
_execvpe(file, args, env)
def _execvpe(file, args, env=None):
+ from errno import ENOENT, ENOTDIR
+
if env is not None:
func = execve
argrest = (args, env)
***************
*** 243,249 ****
func = execv
argrest = (args,)
env = environ
- global _notfound
head, tail = path.split(file)
if head:
apply(func, (file,) + argrest)
--- 244,249 ----
***************
*** 253,272 ****
else:
envpath = defpath
PATH = envpath.split(pathsep)
! if not _notfound:
! import tempfile
! # Exec a file that is guaranteed not to exist
! try: execv(tempfile.mktemp(), ('blah',))
! except error, _notfound: pass
! exc, arg = error, _notfound
for dir in PATH:
fullname = path.join(dir, file)
try:
apply(func, (fullname,) + argrest)
! except error, (errno, msg):
! if errno != arg[0]:
! exc, arg = error, (errno, msg)
! raise exc, arg
# Change environ to automatically call putenv() if it exists
try:
--- 253,273 ----
else:
envpath = defpath
PATH = envpath.split(pathsep)
! saved_exc = None
! saved_tb = None
for dir in PATH:
fullname = path.join(dir, file)
try:
apply(func, (fullname,) + argrest)
! except error, e:
! tb = sys.exc_info()[2]
! if (e.errno != ENOENT and e.errno != ENOTDIR
! and saved_exc is None):
! saved_exc = e
! saved_tb = tb
! if saved_exc:
! raise error, saved_exc, saved_tb
! raise error, e, tb
# Change environ to automatically call putenv() if it exists
try: