From 6c3356a644a16c144d8b557ffaf667798367581f Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 9 Jun 2009 18:15:04 +0000 Subject: [PATCH] Switch order of tests to avoid possible Assert failure for "array_agg_finalfn(null)". We should modify pg_proc entries to prevent this query from being accepted, but let's just make the function itself secure too. Per my note of today. --- src/backend/utils/adt/array_userfuncs.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/backend/utils/adt/array_userfuncs.c b/src/backend/utils/adt/array_userfuncs.c index 13a409d0c5..bdc4433891 100644 --- a/src/backend/utils/adt/array_userfuncs.c +++ b/src/backend/utils/adt/array_userfuncs.c @@ -520,14 +520,19 @@ array_agg_finalfn(PG_FUNCTION_ARGS) int dims[1]; int lbs[1]; + /* + * Test for null before Asserting we are in right context. This is + * to avoid possible Assert failure in 8.4beta installations, where + * it is possible for users to create NULL constants of type internal. + */ + if (PG_ARGISNULL(0)) + PG_RETURN_NULL(); /* returns null iff no input values */ + /* cannot be called directly because of internal-type argument */ Assert(fcinfo->context && (IsA(fcinfo->context, AggState) || IsA(fcinfo->context, WindowAggState))); - if (PG_ARGISNULL(0)) - PG_RETURN_NULL(); /* returns null iff no input values */ - state = (ArrayBuildState *) PG_GETARG_POINTER(0); dims[0] = state->nelems; -- 2.39.5