Tom, I see you found the case where the array was being written past the
end, or so I thought.  I now see I was wrong:

        /*
         * Need to make these arrays large enough to be sure there is a
         * terminating 0 at the end of each one.
         */
        info->classlist = (Oid *) palloc(sizeof(Oid) * (INDEX_MAX_KEYS+1));
        info->indexkeys = (int *) palloc(sizeof(int) * (INDEX_MAX_KEYS+1));
        info->ordering = (Oid *) palloc(sizeof(Oid) * (INDEX_MAX_KEYS+1));
...

                for (i = 0; i < INDEX_MAX_KEYS; i++)
                        info->indexkeys[i] = index->indkey[i];
+               info->indexkeys[INDEX_MAX_KEYS] = 0;
                for (i = 0; i < INDEX_MAX_KEYS; i++)
                        info->classlist[i] = index->indclass[i];
+               info->classlist[INDEX_MAX_KEYS] = (Oid) 0;


Thanks again, Tom.

Vadim used to bail me out of the jams I get into.  Tom, looks like
you're my new savior.

-- 
  Bruce Momjian                        |  http://www.op.net/~candle
  maillist@candle.pha.pa.us            |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026

Tue, 11 Jan 2000 21:44:33 -0500 (EST)
Bruce Momjian <pgman@candle.pha.pa.us>
patch re-added