• Tom Lane's avatar
    Fix failures to ignore \r when reading Windows-style newlines. · b654714f
    Tom Lane authored
    libpq failed to ignore Windows-style newlines in connection service files.
    This normally wasn't a problem on Windows itself, because fgets() would
    convert \r\n to just \n.  But if libpq were running inside a program that
    changes the default fopen mode to binary, it would see the \r's and think
    they were data.  In any case, it's project policy to ignore \r in text
    files unconditionally, because people sometimes try to use files with
    DOS-style newlines on Unix machines, where the C library won't hide that
    from us.
    
    Hence, adjust parseServiceFile() to ignore \r as well as \n at the end of
    the line.  In HEAD, go a little further and make it ignore all trailing
    whitespace, to match what it's always done with leading whitespace.
    
    In HEAD, also run around and fix up everyplace where we have
    newline-chomping code to make all those places look consistent and
    uniformly drop \r.  It is not clear whether any of those changes are
    fixing live bugs.  Most of the non-cosmetic changes are in places that
    are reading popen output, and the jury is still out as to whether popen
    on Windows can return \r\n.  (The Windows-specific code in pipe_read_line
    seems to think so, but our lack of support for this elsewhere suggests
    maybe it's not a problem in practice.)  Hence, I desisted from applying
    those changes to back branches, except in run_ssl_passphrase_command()
    which is new enough and little-tested enough that we'd probably not have
    heard about any problems there.
    
    Tom Lane and Michael Paquier, per bug #15827 from Jorge Gustavo Rocha.
    Back-patch the parseServiceFile() change to all supported branches,
    and the run_ssl_passphrase_command() change to v11 where that was added.
    
    Discussion: https://postgr.es/m/15827-e6ba53a3a7ed543c@postgresql.org
    b654714f
prompt.c 7.44 KB