From e39bc695d683dcd6ae376d38e9acb91ae37642de Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Fri, 8 Aug 2003 13:16:20 +0000 Subject: [PATCH] Be a little bit more careful about using sqlstate, in case libpq returned NULL for it. --- src/interfaces/ecpg/ecpglib/connect.c | 5 ++++- src/interfaces/ecpg/ecpglib/error.c | 25 ++++++++++++++++++------- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/interfaces/ecpg/ecpglib/connect.c b/src/interfaces/ecpg/ecpglib/connect.c index 679efb6466..6574216a60 100644 --- a/src/interfaces/ecpg/ecpglib/connect.c +++ b/src/interfaces/ecpg/ecpglib/connect.c @@ -1,4 +1,4 @@ -/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/connect.c,v 1.15 2003/08/04 00:43:32 momjian Exp $ */ +/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/connect.c,v 1.16 2003/08/08 13:16:20 petere Exp $ */ #define POSTGRES_ECPG_INTERNAL #include "postgres_fe.h" @@ -164,6 +164,9 @@ ECPGnoticeReceiver(void *arg, const PGresult *result) int sqlcode; + if (sqlstate == NULL) + sqlstate = ECPG_SQLSTATE_ECPG_INTERNAL_ERROR; + /* these are not warnings */ if (strncmp(sqlstate, "00", 2) == 0) return; diff --git a/src/interfaces/ecpg/ecpglib/error.c b/src/interfaces/ecpg/ecpglib/error.c index 33bac6e892..82f2ccca36 100644 --- a/src/interfaces/ecpg/ecpglib/error.c +++ b/src/interfaces/ecpg/ecpglib/error.c @@ -1,4 +1,4 @@ -/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/error.c,v 1.6 2003/08/04 00:43:32 momjian Exp $ */ +/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/error.c,v 1.7 2003/08/08 13:16:20 petere Exp $ */ #define POSTGRES_ECPG_INTERNAL #include "postgres_fe.h" @@ -159,18 +159,29 @@ void ECPGraise_backend(int line, PGresult *result, PGconn *conn, int compat) { struct sqlca_t *sqlca = ECPGget_sqlca(); + char *sqlstate; + char *message; + + if (result) + { + sqlstate = PQresultErrorField(result, 'C'); + if (sqlstate == NULL) + sqlstate = ECPG_SQLSTATE_ECPG_INTERNAL_ERROR; + message = PQresultErrorField(result, 'M'); + } + else + { + sqlstate = ECPG_SQLSTATE_ECPG_INTERNAL_ERROR; + message = PQerrorMessage(conn); + } /* copy error message */ snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc), - "'%s' in line %d.", - result ? PQresultErrorField(result, 'M') : PQerrorMessage(conn), - line); + "'%s' in line %d.", message, line); sqlca->sqlerrm.sqlerrml = strlen(sqlca->sqlerrm.sqlerrmc); /* copy SQLSTATE */ - strncpy(sqlca->sqlstate, - result ? PQresultErrorField(result, 'C') : ECPG_SQLSTATE_ECPG_INTERNAL_ERROR, - sizeof(sqlca->sqlstate)); + strncpy(sqlca->sqlstate, sqlstate, sizeof(sqlca->sqlstate)); /* assign SQLCODE for backward compatibility */ if (strncmp(sqlca->sqlstate, "23505", sizeof(sqlca->sqlstate)) == 0) -- 2.11.0