]> git.ipfire.org Git - thirdparty/postgresql.git/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:45 +0000 (10:27 +0000)
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>
Fri, 27 Feb 2009 10:27:45 +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 0599f1de8aa28416c841d62d6ecb4c01231beff4..074379fd78a560b5833557022e1061d1e4256b61 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/pl/plpgsql/src/pl_exec.c,v 1.180.2.8 2009/01/14 09:53:57 heikki Exp $
+ *       $PostgreSQL: pgsql/src/pl/plpgsql/src/pl_exec.c,v 1.180.2.9 2009/02/27 10:27:45 heikki Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1046,8 +1046,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;
                                }
                        }