From c18dcbccff7bd7c95295beedabb2116cbb3b3be2 Mon Sep 17 00:00:00 2001 From: Tatsuo Ishii Date: Thu, 16 Oct 2025 19:00:56 +0900 Subject: [PATCH v1] Fix coverity complaint about WinGetFuncArgInPartition. Coverity complains that the return value from gettuple_eval_partition in a do..while loop in WinGetFuncArgInPartition is overwritten when exiting the while loop. This commit tries to fix the issue by changing gettuple_eval_partition call to: (void) gettuple_eval_partition() explicitly stating that we discard the return value. Also enhance some comments for easier code reading. Discussion: https://postgr.es/m/aPCOabSE4VfJLaky%40paquier.xyz --- src/backend/executor/nodeWindowAgg.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/backend/executor/nodeWindowAgg.c b/src/backend/executor/nodeWindowAgg.c index 47e00be7b49..aa145d4e1a9 100644 --- a/src/backend/executor/nodeWindowAgg.c +++ b/src/backend/executor/nodeWindowAgg.c @@ -3270,8 +3270,9 @@ window_gettupleslot(WindowObject winobj, int64 pos, TupleTableSlot *slot) return true; } -/* - * get tuple and evaluate in partition +/* gettuple_eval_partition + * get tuple in a patition and evaluate the window function's argument + * expression on it. */ static Datum gettuple_eval_partition(WindowObject winobj, int argno, @@ -3790,9 +3791,15 @@ WinGetFuncArgInPartition(WindowObject winobj, int argno, continue; /* keep on moving forward or backward */ else /* need to check NULL or not */ { - /* get tuple and evaluate in partition */ - datum = gettuple_eval_partition(winobj, argno, - abs_pos, isnull, &myisout); + /* + * NOT NULL info does not exist yet. Get tuple and evaluate func + * arg in partition. We ignore the return value from + * gettuple_eval_partition because we are just interested in + * whether we are inside or outside of partition, NULL or NOT + * NULL. + */ + (void) gettuple_eval_partition(winobj, argno, + abs_pos, isnull, &myisout); if (myisout) /* out of partition? */ break; if (!*isnull) @@ -3802,7 +3809,7 @@ WinGetFuncArgInPartition(WindowObject winobj, int argno, } } while (notnull_offset < notnull_relpos); - /* get tuple and evaluate in partition */ + /* get tuple and evaluate func arg in partition */ datum = gettuple_eval_partition(winobj, argno, abs_pos, isnull, &myisout); if (!myisout && set_mark) -- 2.43.0