summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane2005-11-19 02:08:45 +0000
committerTom Lane2005-11-19 02:08:45 +0000
commited061265eaf8969651d39d791a62bcac9729e557 (patch)
tree8017371672938c766aacc4382ffb8b76b8b9abb0
parent875cc27f8f4025c76162566a8a4947d83fdcc6ef (diff)
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.
-rw-r--r--contrib/ltree/_ltree_gist.c8
-rw-r--r--contrib/ltree/_ltree_op.c17
-rw-r--r--contrib/ltree/lquery_op.c4
-rw-r--r--contrib/ltree/ltree_gist.c4
4 files changed, 33 insertions, 0 deletions
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)
{