pgsql: Fix multiple bugs in tablespace symlink removal. - Mailing list pgsql-committers

From Tom Lane
Subject pgsql: Fix multiple bugs in tablespace symlink removal.
Date
Msg-id E1aoZKK-0002pW-FB@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Fix multiple bugs in tablespace symlink removal.

Don't try to examine S_ISLNK(st.st_mode) after a failed lstat().
It's undefined.

Also, if the lstat() reported ENOENT, we do not wish that to be a hard
error, but the code might nonetheless treat it as one (giving an entirely
misleading error message, too) depending on luck-of-the-draw as to what
S_ISLNK() returned.

Don't throw error for ENOENT from rmdir(), either.  (We're not really
expecting ENOENT because we just stat'd the file successfully; but
if we're going to allow ENOENT in the symlink code path, surely the
directory code path should too.)

Generate an appropriate errcode for its-the-wrong-type-of-file complaints.
(ERRCODE_SYSTEM_ERROR doesn't seem appropriate, and failing to write
errcode() around it certainly doesn't work, and not writing an errcode
at all is not per project policy.)

Valgrind noticed the undefined S_ISLNK result; the other problems emerged
while reading the code in the area.

All of this appears to have been introduced in 8f15f74a44f68f9c.
Back-patch to 9.5 where that commit appeared.

Branch
------
REL9_5_STABLE

Details
-------
http://git.postgresql.org/pg/commitdiff/0da7cf6e85f06f6dad50114a4686d73a3b794d1d

Modified Files
--------------
src/backend/commands/tablespace.c | 32 +++++++++++++++++++++++---------
1 file changed, 23 insertions(+), 9 deletions(-)


pgsql-committers by date:

Previous
From: Robert Haas
Date:
Subject: pgsql: Document which aggregates support partial mode.
Next
From: Tom Lane
Date:
Subject: pgsql: Fix multiple bugs in tablespace symlink removal.