postgres.git / summary / log / commit / refs

commit    5cb86a2622f616cbacc0c4fc05a2d34e458863b6
Author:   Fujii Masao <fujii@postgresql.org>
Date:     Fri Dec 03 08:35:29 2021 +0000

    postgres_fdw: Fix unexpected reporting of empty message.
    
    pgfdw_report_error() in postgres_fdw gets a message from PGresult or
    PGconn to report an error received from a remote server. Previously
    if it could get a message from neither of them, it reported empty
    message unexpectedly. The cause of this issue was that pgfdw_report_error()
    didn't handle properly the case where no message could be obtained
    and its local variable message_primary was set to '\0'.
    
    This commit improves pgfdw_report_error() so that it reports the message
    "could not obtain ..." when it gets no message and message_primary
    is set to '\0'. This is the same behavior as when message_primary is NULL.
    
    dblink_res_error() in dblink has the same issue, so this commit also
    improves it in the same way.
    
    Back-patch to all supported branches.
    
    Author: Fujii Masao
    Reviewed-by: Bharath Rupireddy
    Discussion: https://postgr.es/m/477c16c8-7ea4-20fc-38d5-ed3a77ed616c@oss.nttdata.com


contrib/dblink/dblink.c | 3 ++- contrib/postgres_fdw/connection.c | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/contrib/dblink/dblink.c b/contrib/dblink/dblink.c index 3a0beaa88e7..824d301aad8 100644 --- a/contrib/dblink/dblink.c +++ b/contrib/dblink/dblink.c @@ -2799,7 +2799,8 @@ dblink_res_error(PGconn *conn, const char *conname, PGresult *res, ereport(level, (errcode(sqlstate), - message_primary ? errmsg_internal("%s", message_primary) : + (message_primary != NULL && message_primary[0] != '\0') ? + errmsg_internal("%s", message_primary) : errmsg("could not obtain message string for remote error"), message_detail ? errdetail_internal("%s", message_detail) : 0, message_hint ? errhint("%s", message_hint) : 0, diff --git a/contrib/postgres_fdw/connection.c b/contrib/postgres_fdw/connection.c index 03c7843f15b..1c7c76d1d4c 100644 --- a/contrib/postgres_fdw/connection.c +++ b/contrib/postgres_fdw/connection.c @@ -805,7 +805,8 @@ pgfdw_report_error(int elevel, PGresult *res, PGconn *conn, ereport(elevel, (errcode(sqlstate), - message_primary ? errmsg_internal("%s", message_primary) : + (message_primary != NULL && message_primary[0] != '\0') ? + errmsg_internal("%s", message_primary) : errmsg("could not obtain message string for remote error"), message_detail ? errdetail_internal("%s", message_detail) : 0, message_hint ? errhint("%s", message_hint) : 0, [parent: 4cd2928543c1]