Don't crash when a rowtype argument to a plpgsql function is NULL.
authorTom Lane
Tue, 24 Feb 2004 01:44:33 +0000 (01:44 +0000)
committerTom Lane
Tue, 24 Feb 2004 01:44:33 +0000 (01:44 +0000)
Per report from Chris Campbell.

src/pl/plpgsql/src/pl_exec.c

index 27142aa2bf534b73d73ab7969c361b32bcaa2218..8c104f63637fbf3982e59581005880542c118bd3 100644 (file)
@@ -3,7 +3,7 @@
  *           procedural language
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/pl/plpgsql/src/pl_exec.c,v 1.95 2004/02/03 17:34:04 tgl Exp $
+ *   $PostgreSQL: pgsql/src/pl/plpgsql/src/pl_exec.c,v 1.96 2004/02/24 01:44:33 tgl Exp $
  *
  *   This software is copyrighted by Jan Wieck - Hamburg.
  *
@@ -262,10 +262,18 @@ plpgsql_exec_function(PLpgSQL_function * func, FunctionCallInfo fcinfo)
                    HeapTuple   tup;
                    TupleDesc   tupdesc;
 
-                   Assert(slot != NULL && !fcinfo->argnull[i]);
-                   tup = slot->val;
-                   tupdesc = slot->ttc_tupleDescriptor;
-                   exec_move_row(&estate, NULL, row, tup, tupdesc);
+                   if (!fcinfo->argnull[i])
+                   {
+                       Assert(slot != NULL);
+                       tup = slot->val;
+                       tupdesc = slot->ttc_tupleDescriptor;
+                       exec_move_row(&estate, NULL, row, tup, tupdesc);
+                   }
+                   else
+                   {
+                       /* If arg is null, treat it as an empty row */
+                       exec_move_row(&estate, NULL, row, NULL, NULL);
+                   }
                }
                break;