Skip to content
Snippets Groups Projects
Commit 25c00833 authored by Tom Lane's avatar Tom Lane
Browse files

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.
parent 1e9a1a70
No related branches found
No related tags found
No related merge requests found
...@@ -76,6 +76,10 @@ _ltree_compress(PG_FUNCTION_ARGS) ...@@ -76,6 +76,10 @@ _ltree_compress(PG_FUNCTION_ARGS)
ereport(ERROR, ereport(ERROR,
(errcode(ERRCODE_ARRAY_SUBSCRIPT_ERROR), (errcode(ERRCODE_ARRAY_SUBSCRIPT_ERROR),
errmsg("array must be one-dimensional"))); 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 = (ltree_gist *) palloc(len);
key->len = len; key->len = len;
...@@ -518,6 +522,10 @@ _arrq_cons(ltree_gist * key, ArrayType *_query) ...@@ -518,6 +522,10 @@ _arrq_cons(ltree_gist * key, ArrayType *_query)
ereport(ERROR, ereport(ERROR,
(errcode(ERRCODE_ARRAY_SUBSCRIPT_ERROR), (errcode(ERRCODE_ARRAY_SUBSCRIPT_ERROR),
errmsg("array must be one-dimensional"))); 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) while (num > 0)
{ {
......
...@@ -47,6 +47,10 @@ array_iterator(ArrayType *la, PGCALL2 callback, void *param, ltree ** found) ...@@ -47,6 +47,10 @@ array_iterator(ArrayType *la, PGCALL2 callback, void *param, ltree ** found)
ereport(ERROR, ereport(ERROR,
(errcode(ERRCODE_ARRAY_SUBSCRIPT_ERROR), (errcode(ERRCODE_ARRAY_SUBSCRIPT_ERROR),
errmsg("array must be one-dimensional"))); 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) if (found)
*found = NULL; *found = NULL;
...@@ -143,6 +147,10 @@ _lt_q_regex(PG_FUNCTION_ARGS) ...@@ -143,6 +147,10 @@ _lt_q_regex(PG_FUNCTION_ARGS)
ereport(ERROR, ereport(ERROR,
(errcode(ERRCODE_ARRAY_SUBSCRIPT_ERROR), (errcode(ERRCODE_ARRAY_SUBSCRIPT_ERROR),
errmsg("array must be one-dimensional"))); 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) while (num > 0)
{ {
...@@ -293,6 +301,15 @@ _lca(PG_FUNCTION_ARGS) ...@@ -293,6 +301,15 @@ _lca(PG_FUNCTION_ARGS)
ltree **a, ltree **a,
*res; *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); a = (ltree **) palloc(sizeof(ltree *) * num);
while (num > 0) while (num > 0)
{ {
......
...@@ -328,6 +328,10 @@ lt_q_regex(PG_FUNCTION_ARGS) ...@@ -328,6 +328,10 @@ lt_q_regex(PG_FUNCTION_ARGS)
ereport(ERROR, ereport(ERROR,
(errcode(ERRCODE_ARRAY_SUBSCRIPT_ERROR), (errcode(ERRCODE_ARRAY_SUBSCRIPT_ERROR),
errmsg("array must be one-dimensional"))); 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) while (num > 0)
{ {
......
...@@ -607,6 +607,10 @@ arrq_cons(ltree_gist * key, ArrayType *_query) ...@@ -607,6 +607,10 @@ arrq_cons(ltree_gist * key, ArrayType *_query)
ereport(ERROR, ereport(ERROR,
(errcode(ERRCODE_ARRAY_SUBSCRIPT_ERROR), (errcode(ERRCODE_ARRAY_SUBSCRIPT_ERROR),
errmsg("array must be one-dimensional"))); 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) while (num > 0)
{ {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment