Set isnull for errm and sqlstate local variables when they're free'd. Because

they are out of scope for any code after that anyway, leaving isnull true
should be harmless. However, PL/pgSQL Debugger doesn't seem to care about
the scoping and crashed, per report by Robert Walker (bug #4635). And it's
good to be tidy for debugging purposes too.

Fix in 8.3, 8.2 and 8.1 branches, CVS HEAD was fixed earlier already.

Analysis and fix by Ashesh Vashi and Dave Page.
This commit is contained in:
Heikki Linnakangas 2009-02-27 10:27:33 +00:00
parent 58a36a1ad7
commit 29d033f926

View File

@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/pl/plpgsql/src/pl_exec.c,v 1.202.2.3 2009/01/14 09:53:54 heikki Exp $
* $PostgreSQL: pgsql/src/pl/plpgsql/src/pl_exec.c,v 1.202.2.4 2009/02/27 10:27:33 heikki Exp $
*
*-------------------------------------------------------------------------
*/
@ -1088,8 +1088,10 @@ exec_stmt_block(PLpgSQL_execstate *estate, PLpgSQL_stmt_block *block)
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;
}
}