Обсуждение: BUG #16189: The usage of NULL pointer in indexpath.c

Поиск
Список
Период
Сортировка

BUG #16189: The usage of NULL pointer in indexpath.c

От
PG Bug reporting form
Дата:
The following bug has been logged on the website:

Bug reference:      16189
Logged by:          Jian Zhang
Email address:      starbugs@qq.com
PostgreSQL version: 12.1
Operating system:   Linux
Description:

We checked the code in file “indexpath.c” and there are five errors
occurring in lines 2799, 2881, 2882, 2883 and 2884. These five errors are
all caused by the usage of pointers with NULL values. The code in line 2799
is “leftop = (Node *) linitial(saop->args);” The pointer “soap” mentioned in
this line is defined by the code in line 2786 as “ScalarArrayOpExpr *saop =
(ScalarArrayOpExpr *) rinfo->clause;”, so it is assigned as the “clause”
field of the input pointer “rinfo” of function
“match_saopclause_to_indexcol”. For the rest four errors, the codes are
“leftop = (Node *) linitial(clause->largs);”, “rightop = (Node *)
linitial(clause->rargs);”, “expr_op = linitial_oid(clause->opnos);”, and
“expr_coll = linitial_oid(clause->inputcollids);” respectively. The pointer
“clause” mentioned in these four lines is defined by the code in line 2853
as “RowCompareExpr *clause = (RowCompareExpr *) rinfo->clause;”, so it is
assigned as the “clause” field of the input pointer “rinfo” of function
“match_rowcompare_to_indexcol”. The program should check the effectiveness
of the input parameter “rinfo” of the function
“match_saopclause_to_indexcol” and the input parameter “rinfo” of the
function “match_rowcompare_to_indexcol” to avoid these five errors.


Re: BUG #16189: The usage of NULL pointer in indexpath.c

От
Tom Lane
Дата:
PG Bug reporting form <noreply@postgresql.org> writes:
> We checked the code in file “indexpath.c” and there are five errors
> occurring in lines 2799, 2881, 2882, 2883 and 2884. These five errors are
> all caused by the usage of pointers with NULL values. The code in line 2799
> is “leftop = (Node *) linitial(saop->args);” The pointer “soap” mentioned in
> this line is defined by the code in line 2786 as “ScalarArrayOpExpr *saop =
> (ScalarArrayOpExpr *) rinfo->clause;”, so it is assigned as the “clause”
> field of the input pointer “rinfo” of function
> “match_saopclause_to_indexcol”. For the rest four errors, the codes are
> “leftop = (Node *) linitial(clause->largs);”, “rightop = (Node *)
> linitial(clause->rargs);”, “expr_op = linitial_oid(clause->opnos);”, and
> “expr_coll = linitial_oid(clause->inputcollids);” respectively. The pointer
> “clause” mentioned in these four lines is defined by the code in line 2853
> as “RowCompareExpr *clause = (RowCompareExpr *) rinfo->clause;”, so it is
> assigned as the “clause” field of the input pointer “rinfo” of function
> “match_rowcompare_to_indexcol”.

And?  You haven't given any reason to think that any of that is a problem.

It is true that this code is expecting that these lists aren't empty,
but that's checked upstream of here.

            regards, tom lane