• Tom Lane's avatar
    Fix race condition in psql \e's detection of file modification. · 48d67fd8
    Tom Lane authored
    psql's editing commands decide whether the user has edited the file
    by checking for change of modification timestamp.  This is probably
    fine for a pre-existing file, but with a temporary file that is
    created within the command, it's possible for a fast typist to
    save-and-exit in less than the one-second granularity of stat(2)
    timestamps.  On Windows FAT filesystems the granularity is even
    worse, 2 seconds, making the race a bit easier to hit.
    
    To fix, try to set the temp file's mod time to be two seconds ago.
    It's unlikely this would fail, but then again the race condition
    itself is unlikely, so just ignore any error.
    
    Also, we might as well check the file size as well as its mod time.
    
    While this is a difficult bug to hit, it still seems worth
    back-patching, to ensure that users' edits aren't lost.
    
    Laurenz Albe, per gripe from Jacob Champion; based on fix suggestions
    from Jacob and myself
    
    Discussion: https://postgr.es/m/0ba3f2a658bac6546d9934ab6ba63a805d46a49b.camel@cybertec.at
    48d67fd8
command.c 134 KB