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

Reply via email to