David Rowley <drowley@postgresql.org> writes:
> Fix planner's use of Result Cache with unique joins
Coverity is not happy with this:
/srv/coverity/git/pgsql-git/postgresql/src/backend/optimizer/path/joinpath.c: 532 in get_resultcache_path()
526 * determining if the join is unique.
527 *
528 * XXX this could be enabled if the remaining join quals were made part of
529 * the inner scan's filter instead of the join filter. Maybe it's worth
530 * considering doing that?
531 */
>>> CID 1484914: Null pointer dereferences (FORWARD_NULL)
>>> Dereferencing null pointer "inner_path->param_info".
532 if (extra->inner_unique &&
533 list_length(inner_path->param_info->ppi_clauses) <
534 list_length(extra->restrictlist))
535 return NULL;
536
This complaint is triggered because elsewhere in the same function,
you're careful to check for inner_path->param_info being null before
trying to dereference it:
if ((inner_path->param_info == NULL ||
inner_path->param_info->ppi_clauses == NIL) &&
innerrel->lateral_vars == NIL)
return NULL;
Coverity reasons that it's probably a bug that you didn't do the same
here; and I think it's right.
regards, tom lane