On Mon, 30 Jan 2017 03:33 pm, Cameron Simpson wrote: > On 30Jan2017 13:49, Steve D'Aprano <steve+pyt...@pearwood.info> wrote: >>This code contains a Time Of Check to Time Of Use bug: >> >> if os.path.exists(destination) >> raise ValueError('destination already exists') >> os.rename(oldname, destination) >> >> >>In the microsecond between checking for the existence of the destination >>and actually doing the rename, it is possible that another process may >>create the destination, resulting in data loss. >> >>Apart from keeping my fingers crossed, how should I fix this TOCTOU bug? > > For files this is a problem at the Python level. At the UNIX level you can > play neat games with open(2) and the various O_* modes. > > however, with directories things are more cut and dry. Do you have much > freedom here? What's the wider context of the question?
The wider context is that I'm taking from 1 to <arbitrarily huge number> path names to existing files as arguments, and for each path name I transfer the file name part (but not the directory part) and then rename the file. For example: foo/bar/baz/spam.txt may be renamed to: foo/bar/baz/ham.txt but only provided ham.txt doesn't already exist. -- Steve “Cheer up,” they said, “things could be worse.” So I cheered up, and sure enough, things got worse. -- https://mail.python.org/mailman/listinfo/python-list