array_map failed to insert correct result type in an empty array.
authorTom Lane
Fri, 17 Dec 2004 20:58:26 +0000 (20:58 +0000)
committerTom Lane
Fri, 17 Dec 2004 20:58:26 +0000 (20:58 +0000)
Per example from Florian Pflug.

src/backend/utils/adt/arrayfuncs.c

index 0e2ed00be08fd6174f29df3e9c387b61b8ce978d..cee11cc0b6714b1fd4955ed51aa82fe44064323f 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/utils/adt/arrayfuncs.c,v 1.113 2004/09/27 01:39:02 tgl Exp $
+ *   $PostgreSQL: pgsql/src/backend/utils/adt/arrayfuncs.c,v 1.114 2004/12/17 20:58:26 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -2241,7 +2241,13 @@ array_map(FunctionCallInfo fcinfo, Oid inpType, Oid retType)
 
    /* Check for empty array */
    if (nitems <= 0)
-       PG_RETURN_ARRAYTYPE_P(v);
+   {
+       /* Return empty array */
+       result = (ArrayType *) palloc0(sizeof(ArrayType));
+       result->size = sizeof(ArrayType);
+       result->elemtype = retType;
+       PG_RETURN_ARRAYTYPE_P(result);
+   }
 
    /*
     * We arrange to look up info about input and return element types
@@ -2425,14 +2431,9 @@ construct_md_array(Datum *elems,
    if (ndims == 0)
    {
        /* Allocate and initialize 0-D result array */
-       nbytes = ARR_OVERHEAD(ndims);
-       result = (ArrayType *) palloc(nbytes);
-
-       result->size = nbytes;
-       result->ndim = ndims;
-       result->flags = 0;
+       result = (ArrayType *) palloc0(sizeof(ArrayType));
+       result->size = sizeof(ArrayType);
        result->elemtype = elmtype;
-
        return result;
    }