]> granicus.if.org Git - postgresql/commitdiff
Set isnull for errm and sqlstate local variables when they're free'd. Because
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>
Fri, 27 Feb 2009 10:27:53 +0000 (10:27 +0000)
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>
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 a3e876744924bc9b3f8a49fd25f0620c2cca2bdc..4744097b2be0db706eb671dcc73611697a12c579 100644 (file)
@@ -3,7 +3,7 @@
  *                       procedural language
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/pl/plpgsql/src/pl_exec.c,v 1.154.2.7 2008/09/01 22:30:55 tgl Exp $
+ *       $PostgreSQL: pgsql/src/pl/plpgsql/src/pl_exec.c,v 1.154.2.8 2009/02/27 10:27:53 heikki Exp $
  *
  *       This software is copyrighted by Jan Wieck - Hamburg.
  *
@@ -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;
                                }
                        }