Re: [BUGS] BUG #8167: false EINVAL -22 for opening a file - Mailing list pgsql-hackers

From Tom Lane
Subject Re: [BUGS] BUG #8167: false EINVAL -22 for opening a file
Date
Msg-id 15677.1368719710@sss.pgh.pa.us
Whole thread Raw
Responses Re: [BUGS] BUG #8167: false EINVAL -22 for opening a file  (Robert Haas <robertmhaas@gmail.com>)
List pgsql-hackers
nelson@monkey.org writes:
> RhodiumToad asked me to report "pg in PathNameOpenFile / mdopen is
> assuming that errno is preserved over calls to free() which is not
> required by the spec"

Good catch!  The proximate problem appears to be this bit in
PathNameOpenFile:
vfdP->fd = BasicOpenFile(fileName, fileFlags, fileMode);
if (vfdP->fd < 0){    FreeVfd(file);    free(fnamecopy);    return -1;}

The other code layers in this stack seem to be careful about preserving
errno where needed, but this bit isn't.

I've not really reviewed fd.c for other instances of the same bug,
but I do see some places where there are DO_DB(...) debug calls in
places where errno had better not change.  I'm thinking maybe we should
improve that macro to include save/restore errno.  Or else rip that
stuff out entirely --- I've sure never built this code with FDDEBUG
set, has anyone else?
        regards, tom lane



pgsql-hackers by date:

Previous
From: Andrew Dunstan
Date:
Subject: Re: PostgreSQL 9.3 beta breaks some extensions "make install"
Next
From: Tom Lane
Date:
Subject: Re: Logging of PAM Authentication Failure