From 0d9b09282fbf2a21160d57d2f11785cb23841909 Mon Sep 17 00:00:00 2001
From: Magnus Hagander <magnus@hagander.net>
Date: Wed, 7 Dec 2011 12:17:55 +0100
Subject: [PATCH] Better error reporting if the link target is too long

This situation won't set errno, so using %m will give an incorrect
error message.
---
 src/backend/utils/adt/misc.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/src/backend/utils/adt/misc.c b/src/backend/utils/adt/misc.c
index 4453e818c00..478f203273f 100644
--- a/src/backend/utils/adt/misc.c
+++ b/src/backend/utils/adt/misc.c
@@ -287,9 +287,12 @@ pg_tablespace_location(PG_FUNCTION_ARGS)
 	 */
 	snprintf(sourcepath, sizeof(sourcepath), "pg_tblspc/%u", tablespaceOid);
 	rllen =readlink(sourcepath, targetpath, sizeof(targetpath));
-	if (rllen < 0 || rllen >= sizeof(targetpath))
+	if (rllen < 0)
 		ereport(ERROR,
 				(errmsg("could not read symbolic link \"%s\": %m", sourcepath)));
+	else if (rllen >= sizeof(targetpath))
+		ereport(ERROR,
+				(errmsg("symbolic link \"%s\" target is too long", sourcepath)));
 	targetpath[rllen] = '\0';
 
 	PG_RETURN_TEXT_P(cstring_to_text(targetpath));
-- 
GitLab