diff --git a/src/interfaces/ecpg/ecpglib/connect.c b/src/interfaces/ecpg/ecpglib/connect.c index 60564b176c..a3c5c0ff4c 100644 --- a/src/interfaces/ecpg/ecpglib/connect.c +++ b/src/interfaces/ecpg/ecpglib/connect.c @@ -222,6 +222,7 @@ ECPGnoticeReceiver(void *arg, const PGresult *result) char *message = PQresultErrorField(result, PG_DIAG_MESSAGE_PRIMARY); struct sqlca_t *sqlca = ECPGget_sqlca(); int sqlcode; + int n; if (sqlca == NULL) { @@ -254,14 +255,16 @@ ECPGnoticeReceiver(void *arg, const PGresult *result) else sqlcode = 0; - strncpy(sqlca->sqlstate, sqlstate, sizeof(sqlca->sqlstate)); + n = snprintf(sqlca->sqlstate, sizeof(sqlca->sqlstate), "%s", sqlstate); + Assert(n >= 0 && n < sizeof(sqlca->sqlstate)); + sqlca->sqlcode = sqlcode; sqlca->sqlwarn[2] = 'W'; sqlca->sqlwarn[0] = 'W'; - strncpy(sqlca->sqlerrm.sqlerrmc, message, sizeof(sqlca->sqlerrm.sqlerrmc)); - sqlca->sqlerrm.sqlerrmc[sizeof(sqlca->sqlerrm.sqlerrmc) - 1] = 0; - sqlca->sqlerrm.sqlerrml = strlen(sqlca->sqlerrm.sqlerrmc); + n = snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc), "%s", message); + Assert(n >= 0 && n < sizeof(sqlca->sqlerrm.sqlerrmc)); + sqlca->sqlerrm.sqlerrml = n; ecpg_log("raising sqlcode %d\n", sqlcode); }