deflist_to_tuplestore dumped core on an option with no value.
authorTom Lane <[email protected]>
Tue, 13 Sep 2011 15:37:03 +0000 (11:37 -0400)
committerTom Lane <[email protected]>
Tue, 13 Sep 2011 15:37:03 +0000 (11:37 -0400)
Make it return NULL for the option_value, instead.

Per report from Frank van Vugt.  Back-patch to 8.4 where this code was
added.

src/backend/foreign/foreign.c

index f32a296f5b38f238211b4fbe0b50f87df15abfee..2555afb782cbdf2845688604a491742315568e4e 100644 (file)
@@ -270,7 +270,7 @@ deflist_to_tuplestore(ReturnSetInfo *rsinfo, List *options)
        TupleDesc       tupdesc;
        Tuplestorestate *tupstore;
        Datum           values[2];
-       bool            nulls[2] = {0};
+       bool            nulls[2];
        MemoryContext per_query_ctx;
        MemoryContext oldcontext;
 
@@ -302,7 +302,17 @@ deflist_to_tuplestore(ReturnSetInfo *rsinfo, List *options)
                DefElem    *def = lfirst(cell);
 
                values[0] = CStringGetTextDatum(def->defname);
-               values[1] = CStringGetTextDatum(((Value *) def->arg)->val.str);
+               nulls[0] = false;
+               if (def->arg)
+               {
+                       values[1] = CStringGetTextDatum(((Value *) (def->arg))->val.str);
+                       nulls[1] = false;
+               }
+               else
+               {
+                       values[1] = (Datum) 0;
+                       nulls[1] = true;
+               }
                tuplestore_putvalues(tupstore, tupdesc, values, nulls);
        }