mirror of
https://github.com/postgres/postgres.git
synced 2025-09-02 04:21:28 +03:00
Free SQLSTATE and SQLERRM no earlier than other PL/pgSQL variables.
"RETURN SQLERRM" prompted plpgsql_exec_function() to read from freed memory. Back-patch to 9.0 (all supported versions). Little code ran between the premature free and the read, so non-assert builds are unlikely to witness user-visible consequences.
This commit is contained in:
@@ -1243,8 +1243,9 @@ exec_stmt_block(PLpgSQL_execstate *estate, PLpgSQL_stmt_block *block)
|
||||
{
|
||||
/*
|
||||
* Initialize the magic SQLSTATE and SQLERRM variables for
|
||||
* the exception block. We needn't do this until we have
|
||||
* found a matching exception.
|
||||
* the exception block; this also frees values from any
|
||||
* prior use of the same exception. We needn't do this
|
||||
* until we have found a matching exception.
|
||||
*/
|
||||
PLpgSQL_var *state_var;
|
||||
PLpgSQL_var *errm_var;
|
||||
@@ -1268,13 +1269,6 @@ exec_stmt_block(PLpgSQL_execstate *estate, PLpgSQL_stmt_block *block)
|
||||
|
||||
rc = exec_stmts(estate, exception->action);
|
||||
|
||||
free_var(state_var);
|
||||
state_var->value = (Datum) 0;
|
||||
state_var->isnull = true;
|
||||
free_var(errm_var);
|
||||
errm_var->value = (Datum) 0;
|
||||
errm_var->isnull = true;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user