Обсуждение: BUG #16189: The usage of NULL pointer in indexpath.c
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.
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