From 0d9b09282fbf2a21160d57d2f11785cb23841909 Mon Sep 17 00:00:00 2001 From: Magnus Hagander 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 4453e818c0..478f203273 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));