mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-12-27 08:39:28 +08:00
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.
This commit is contained in:
parent
f3e122fcdf
commit
59fb29cac6
@ -6,7 +6,7 @@
|
|||||||
* Copyright (c) 2003-2009, PostgreSQL Global Development Group
|
* Copyright (c) 2003-2009, PostgreSQL Global Development Group
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/backend/utils/adt/array_userfuncs.c,v 1.28 2009/01/01 17:23:48 momjian Exp $
|
* $PostgreSQL: pgsql/src/backend/utils/adt/array_userfuncs.c,v 1.29 2009/06/09 18:15:04 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -520,14 +520,19 @@ array_agg_finalfn(PG_FUNCTION_ARGS)
|
|||||||
int dims[1];
|
int dims[1];
|
||||||
int lbs[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 */
|
/* cannot be called directly because of internal-type argument */
|
||||||
Assert(fcinfo->context &&
|
Assert(fcinfo->context &&
|
||||||
(IsA(fcinfo->context, AggState) ||
|
(IsA(fcinfo->context, AggState) ||
|
||||||
IsA(fcinfo->context, WindowAggState)));
|
IsA(fcinfo->context, WindowAggState)));
|
||||||
|
|
||||||
if (PG_ARGISNULL(0))
|
|
||||||
PG_RETURN_NULL(); /* returns null iff no input values */
|
|
||||||
|
|
||||||
state = (ArrayBuildState *) PG_GETARG_POINTER(0);
|
state = (ArrayBuildState *) PG_GETARG_POINTER(0);
|
||||||
|
|
||||||
dims[0] = state->nelems;
|
dims[0] = state->nelems;
|
||||||
|
Loading…
Reference in New Issue
Block a user