Actually, there is a third possibility, which would fix the problem
without requiring any changes in the picksplit functions. You could
do this:
char *storage;
storage = palloc(MAXALIGN(VARHDRSZ) + (*len + 1) * sizeof(GISTENTRY));
entryvec = (bytea *) (storage + MAXALIGN(VARHDRSZ) - VARHDRSZ);
use entryvec as before, except final pfree is pfree(storage)
Grotty as heck, but probably the right answer for 7.2.1 to avoid the
initdb issues.
For 7.3 we could do it the other, cleaner way.
regards, tom lane