Hey all -- so I know that Gentoo Linux is likely the only platform this bug occurs under, but i got annoyed enough with it that I decided to write a patch to fix this issue once and for all (or at least, help keep it from happening).
That thread in question actually dealt with crashing on startup in postgresql-9.1 and earlier, but all versions including the latest still suffer from the inability to load timezone data via the pg_timezone_* tables if /usr/share/zoneinfo contains filesystem loops. To that end, the following helps resolve this issue by ensuring single-level filesystem loops are detected and skipped. The top half of the patch only applies to postgresql-9.1 and earlier, while the second half applies to all versions. (hopefully the patch attached properly) Regards, Ian
--- a/src/timezone/pgtz.c 2015-02-02 15:45:23.000000000 -0500 +++ b/src/timezone/pgtz.c 2015-04-07 14:21:22.341832190 -0400 @@ -586,6 +586,12 @@ if (direntry->d_name[0] == '.') continue; + /* if current working directory has the same name as current direntry name, + * then skip as this is a recursive fs loop + */ + if (strncmp(direntry->d_name,tzdirsub,strlen(direntry->d_name)) == 0) + continue; + snprintf(tzdir + tzdir_orig_len, MAXPGPATH - tzdir_orig_len, "/%s", direntry->d_name); @@ -1615,6 +1621,13 @@ if (direntry->d_name[0] == '.') continue; + /* copy current working directory so that there is no risk of modification by basename(), + * and compare to current direntry name; skip if they are the same as this is a recursive fs loop + */ + snprintf(fullname, MAXPGPATH, "%s", dir->dirname[dir->depth]); + if (strncmp(direntry->d_name,basename(fullname),strlen(direntry->d_name)) == 0) + continue; + snprintf(fullname, MAXPGPATH, "%s/%s", dir->dirname[dir->depth], direntry->d_name); if (stat(fullname, &statbuf) != 0)
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers