will allocate for a skip list entry as many routines use arrays of
size SK_MAXHEIGHT to hold a set of level pointers which means that a
level of SK_MAXHEIGHT is not valid due to C arrays being zero based.
This led to a number of subtle and hard to locate problems caused by
stack based arrays being overflowed by one entry when a node was
allocated with the maximum level. As each node only has a one in two
million or so chance of getting a level of SK_MAXHEIGHT this didn't
actually happen all that often.
MERGED FROM HEAD
git-svn-id: svn://svn.valgrind.org/valgrind/branches/VALGRIND_2_2_0_BRANCH@2863
{
UInt ret = 0;
- while((ret < SK_MAXHEIGHT) && (random() & 1))
+ while((ret < SK_MAXHEIGHT - 1) && (random() & 1))
ret++;
return ret;