]> granicus.if.org Git - postgresql/commitdiff
Don't crash when a rowtype argument to a plpgsql function is NULL.
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 24 Feb 2004 01:44:58 +0000 (01:44 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 24 Feb 2004 01:44:58 +0000 (01:44 +0000)
Per report from Chris Campbell.

src/pl/plpgsql/src/pl_exec.c

index 2c3c8aa7c7ecb3e15225c0af36118692ff5842df..95306967cace977dbf859b5a71ac04c7423da096 100644 (file)
@@ -3,7 +3,7 @@
  *                       procedural language
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_exec.c,v 1.65.2.2 2003/03/02 20:45:59 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_exec.c,v 1.65.2.3 2004/02/24 01:44:58 tgl Exp $
  *
  *       This software is copyrighted by Jan Wieck - Hamburg.
  *
@@ -265,10 +265,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;