Mikko Rasa tdb@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.