mirror of https://github.com/python/cpython
merge 3.2
This commit is contained in:
commit
7f071e6e9f
|
@ -1346,7 +1346,26 @@ Files and Directories
|
||||||
Using :func:`access` to check if a user is authorized to e.g. open a file
|
Using :func:`access` to check if a user is authorized to e.g. open a file
|
||||||
before actually doing so using :func:`open` creates a security hole,
|
before actually doing so using :func:`open` creates a security hole,
|
||||||
because the user might exploit the short time interval between checking
|
because the user might exploit the short time interval between checking
|
||||||
and opening the file to manipulate it.
|
and opening the file to manipulate it. It's preferable to use :term:`EAFP`
|
||||||
|
techniques. For example::
|
||||||
|
|
||||||
|
if os.access("myfile", os.R_OK):
|
||||||
|
with open("myfile") as fp:
|
||||||
|
return fp.read()
|
||||||
|
return "some default data"
|
||||||
|
|
||||||
|
is better written as::
|
||||||
|
|
||||||
|
try:
|
||||||
|
fp = open("myfile")
|
||||||
|
except OSError as e:
|
||||||
|
if e.errno == errno.EACCESS:
|
||||||
|
return "some default data"
|
||||||
|
# Not a permission error.
|
||||||
|
raise
|
||||||
|
else:
|
||||||
|
with fp:
|
||||||
|
return fp.read()
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue