From 25c00833cb694bea1c4fb3caeccbc9a1fb72d6f8 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 19 Nov 2005 02:08:45 +0000 Subject: [PATCH] Add defenses against nulls-in-arrays to contrib/ltree. Possibly it'd be useful to actually do something with nulls, rather than reject them, but I'll just close the hole for now. --- contrib/ltree/_ltree_gist.c | 8 ++++++++ contrib/ltree/_ltree_op.c | 17 +++++++++++++++++ contrib/ltree/lquery_op.c | 4 ++++ contrib/ltree/ltree_gist.c | 4 ++++ 4 files changed, 33 insertions(+) diff --git a/contrib/ltree/_ltree_gist.c b/contrib/ltree/_ltree_gist.c index 0344b6dc13..c4623ec020 100644 --- a/contrib/ltree/_ltree_gist.c +++ b/contrib/ltree/_ltree_gist.c @@ -76,6 +76,10 @@ _ltree_compress(PG_FUNCTION_ARGS) ereport(ERROR, (errcode(ERRCODE_ARRAY_SUBSCRIPT_ERROR), errmsg("array must be one-dimensional"))); + if (ARR_HASNULL(val)) + ereport(ERROR, + (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED), + errmsg("array must not contain nulls"))); key = (ltree_gist *) palloc(len); key->len = len; @@ -518,6 +522,10 @@ _arrq_cons(ltree_gist * key, ArrayType *_query) ereport(ERROR, (errcode(ERRCODE_ARRAY_SUBSCRIPT_ERROR), errmsg("array must be one-dimensional"))); + if (ARR_HASNULL(_query)) + ereport(ERROR, + (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED), + errmsg("array must not contain nulls"))); while (num > 0) { diff --git a/contrib/ltree/_ltree_op.c b/contrib/ltree/_ltree_op.c index 729d19c082..ff8eec793a 100644 --- a/contrib/ltree/_ltree_op.c +++ b/contrib/ltree/_ltree_op.c @@ -47,6 +47,10 @@ array_iterator(ArrayType *la, PGCALL2 callback, void *param, ltree ** found) ereport(ERROR, (errcode(ERRCODE_ARRAY_SUBSCRIPT_ERROR), errmsg("array must be one-dimensional"))); + if (ARR_HASNULL(la)) + ereport(ERROR, + (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED), + errmsg("array must not contain nulls"))); if (found) *found = NULL; @@ -143,6 +147,10 @@ _lt_q_regex(PG_FUNCTION_ARGS) ereport(ERROR, (errcode(ERRCODE_ARRAY_SUBSCRIPT_ERROR), errmsg("array must be one-dimensional"))); + if (ARR_HASNULL(_query)) + ereport(ERROR, + (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED), + errmsg("array must not contain nulls"))); while (num > 0) { @@ -293,6 +301,15 @@ _lca(PG_FUNCTION_ARGS) ltree **a, *res; + if (ARR_NDIM(la) != 1) + ereport(ERROR, + (errcode(ERRCODE_ARRAY_SUBSCRIPT_ERROR), + errmsg("array must be one-dimensional"))); + if (ARR_HASNULL(la)) + ereport(ERROR, + (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED), + errmsg("array must not contain nulls"))); + a = (ltree **) palloc(sizeof(ltree *) * num); while (num > 0) { diff --git a/contrib/ltree/lquery_op.c b/contrib/ltree/lquery_op.c index 54466a5b6b..6d5a937beb 100644 --- a/contrib/ltree/lquery_op.c +++ b/contrib/ltree/lquery_op.c @@ -328,6 +328,10 @@ lt_q_regex(PG_FUNCTION_ARGS) ereport(ERROR, (errcode(ERRCODE_ARRAY_SUBSCRIPT_ERROR), errmsg("array must be one-dimensional"))); + if (ARR_HASNULL(_query)) + ereport(ERROR, + (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED), + errmsg("array must not contain nulls"))); while (num > 0) { diff --git a/contrib/ltree/ltree_gist.c b/contrib/ltree/ltree_gist.c index 2be6449329..9cdbcde886 100644 --- a/contrib/ltree/ltree_gist.c +++ b/contrib/ltree/ltree_gist.c @@ -607,6 +607,10 @@ arrq_cons(ltree_gist * key, ArrayType *_query) ereport(ERROR, (errcode(ERRCODE_ARRAY_SUBSCRIPT_ERROR), errmsg("array must be one-dimensional"))); + if (ARR_HASNULL(_query)) + ereport(ERROR, + (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED), + errmsg("array must not contain nulls"))); while (num > 0) { -- GitLab