Mikko Rasa <tdb(a)tdb.fi> writes:
> + /* check that the buffer is large enough to hold the indices,
> + * reallocate if necessary.
> + */
> + hr = IWineD3DBuffer_GetDesc(This->indexbuffer, &desc);
> + if(desc.Size < IndexCount * sizeof(WORD))
> + {
> + UINT size = desc.Size;
> + IWineD3DBuffer *buffer;
> + IUnknown *parent;
> +
> + while(size < IndexCount * sizeof(WORD))
> + {
> + size <<= 1;
> + /* We keep adding zero bits to the right, so an overflow
> + * will eventually result in all zeroes. Detect this to
> + * avoid infinite loop.
> + */
> + if(!size)
> + {
> + ERR("UINT overflow while trying to grow indexbuffer to hold %u indices\n", IndexCount);
> + LeaveCriticalSection(&ddraw_cs);
> + return D3DERR_TOOMANYPRIMITIVES;
> + }
> + }
A simple "size = max(desc.Size*2,IndexCount*sizeof(WORD))" would do just as
well.
--
Alexandre Julliard
julliard(a)winehq.org