Set isnull for errm and sqlstate local variables when they're free'd. Because
authorHeikki Linnakangas <[email protected]>
Fri, 27 Feb 2009 10:27:53 +0000 (10:27 +0000)
committerHeikki Linnakangas <[email protected]>
Fri, 27 Feb 2009 10:27:53 +0000 (10:27 +0000)
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.

src/pl/plpgsql/src/pl_exec.c

index fb89fd18a7f1ff47dc56765ba0c9201a372e05f5..bf1e07f54946e898251c28acf368bfb9849ead79 100644 (file)
@@ -953,8 +953,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;
                                }
                        }