提交 25c00833 编写于 作者: T Tom Lane

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.
上级 1e9a1a70
...@@ -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)
{ {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册