In lmgr.c you have a static LOCKMASK LockConflicts[] with 9
elements in it.

You call LockMethodTableInit() with that pointer, and
MAX_LOCKMODES - 1 (10 - 1 = 9)

That calls LockMethodInit with the same arguments, but it does
numModes++.

So you basicly have a for loop that looks like:

for (i = 0; i < 10; i++, conflictsP++)

The last item you try to copy is conflictsP is not within the
the LockConflicts array anymore.

I have no idea what that numModes++ line is doing there.


Kurt


Fri, 15 Aug 2003 20:46:18 +0200
Kurt Roeckx <Q@ping.be>
Bounds error in LockMethodInit().
Kurt Roeckx <Q@ping.be> writes:
> I have no idea what that numModes++ line is doing there.

I think the notion is that the lock modes are counted in 1-based
numbering; the copy loop starts at 0 so it needs an extra iteration.
Look at the uses of numLockModes for evidence.  (Note the extra zero
at the start of LockConflicts[].  Why it's bothering to copy that,
I dunno.)

I agree the call from lmgr.c is bogus though --- should be doing
something involving lengthof(LockConflicts), probably.  The existing
coding would fail to raise a flag if someone added a few more lock
modes without increasing MAX_LOCKMODES.

			regards, tom lane

Fri, 15 Aug 2003 15:18:23 -0400
Tom Lane <tgl@sss.pgh.pa.us>
Re: Bounds error in LockMethodInit(). 