On 15/12/2025 00:55, Tom Lane wrote:
Heikki Linnakangas <[email protected]> writes:
Ok, I have pushed this. Thanks!

Coverity is unhappy about this bit:

/srv/coverity/git/pgsql-git/postgresql/src/bin/pg_upgrade/multixact_read_v18.c: 
282             in GetOldMultiXactIdSingleMember()
276             if (!TransactionIdIsValid(*xactptr))
277             {
278                 /*
279                  * Corner case 2: we are looking at unused slot zero
280                  */
281                 if (offset == 0)
     CID 1676077:         Control flow issues  (DEADCODE)
     Execution cannot reach this statement: "continue;".
282                     continue;
283
284                 /*
285                  * Otherwise this is an invalid entry that should not be

It sees the earlier test for offset == 0, and evidently is assuming
that the loop's "offset++" will not wrap around.  Now I think that
the point of this check is exactly that "offset++" could have wrapped
around, but the commentary is not so clear that I'm certain this is a
false positive.

Correct.

If that is the intention, what do you think of rephrasing this
comment as "we have wrapped around to unused slot zero"?
Ah yes, that's much better. Changed it to "offset must have wrapped around to unused slot zero". This code and its comments are copied from v18 GetMultiXactIdMembers(), so in order to maintain the rhyme with that, I changed the comment in backbranches too. It doesn't exist in the 'master' version of GetMultiXactIdMembers() anymore.

Coverity is also complaining about the 'length' variable being tainted, because it's calculated from the values read from disk. That's bogus because we trust and make assumptions of the values on disk. That said, I think it would make sense to do some more sanity checking here. In particular, length should never be negative. I added such sanity checks to the 'master' version of the GetMultiXactIdMembers() server function in commit d4b7bde418, but it would make sense to add them to the upgrade code too. I'll look into that.

- Heikki



Reply via email to