Skip to content

Commit 99e85e6

Browse files
Synchronize changes from 1.6 master branch [ci skip]
c5c0b3f Improve buffer management
2 parents e08b547 + c5c0b3f commit 99e85e6

File tree

14 files changed

+338
-67
lines changed

14 files changed

+338
-67
lines changed

Client/core/CFileFormatJpeg.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,13 +82,15 @@ bool JpegDecode(const void* pData, uint uiDataSize, CBuffer* pOutBuffer, uint& u
8282

8383
if (pOutBuffer)
8484
{
85-
pOutBuffer->SetSize(uiWidth * uiHeight * 4);
85+
if (!pOutBuffer->SetSize(uiWidth * uiHeight * 4))
86+
return false;
8687
char* pOutData = pOutBuffer->GetData();
8788

8889
/* Process data */
8990
JSAMPROW row_pointer[1];
9091
CBuffer rowBuffer;
91-
rowBuffer.SetSize(uiWidth * 3);
92+
if (!rowBuffer.SetSize(uiWidth * 3))
93+
return false;
9294
char* pRowTemp = rowBuffer.GetData();
9395

9496
while (cinfo.output_scanline < cinfo.output_height)
@@ -153,7 +155,8 @@ bool JpegEncode(uint uiWidth, uint uiHeight, uint uiQuality, const void* pData,
153155

154156
/* Process data */
155157
CBuffer rowBuffer;
156-
rowBuffer.SetSize(uiWidth * 3);
158+
if (!rowBuffer.SetSize(uiWidth * 3))
159+
return false;
157160
char* pRowTemp = rowBuffer.GetData();
158161

159162
JSAMPROW row_pointer[1];

Client/core/CFileFormatPng.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,8 @@ bool PngDecode(const void* pData, uint uiDataSize, CBuffer* pOutBuffer, uint& ui
192192

193193
if (pOutBuffer)
194194
{
195-
pOutBuffer->SetSize(width * height * 4);
195+
if (!pOutBuffer->SetSize(width * height * 4))
196+
return false;
196197

197198
switch (colorType)
198199
{

Client/core/Graphics/CGraphics.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2586,6 +2586,8 @@ bool CGraphics::CopyDataFromSurface(IDirect3DSurface9* pSurface, CBuffer& outBuf
25862586
uint uiLineWidthBytes = SurfDesc.Width * CRenderItemManager::GetBitsPerPixel(SurfDesc.Format) / 8;
25872587

25882588
outBuffer.SetSize(uiLineWidthBytes * SurfDesc.Height);
2589+
if (outBuffer.GetSize() != uiLineWidthBytes * SurfDesc.Height)
2590+
return false;
25892591
char* pOutData = outBuffer.GetData();
25902592

25912593
if (uiLineWidthBytes == uiSurfPitch)

Client/core/Graphics/CPixelsManager.cpp

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,8 @@ bool CPixelsManager::GetTexturePixels(IDirect3DBaseTexture9* pD3DBaseTexture, CP
140140
// If not allowed, return dummy data
141141
uint uiPixelsWidth = 32;
142142
uint uiPixelsHeight = 32;
143-
outPixels.SetSize(uiPixelsWidth * uiPixelsHeight * XRGB_BYTES_PER_PIXEL + SIZEOF_PLAIN_TAIL);
143+
if (!outPixels.SetSize(uiPixelsWidth * uiPixelsHeight * XRGB_BYTES_PER_PIXEL + SIZEOF_PLAIN_TAIL))
144+
return false;
144145
memset(outPixels.GetData(), 0xEF, outPixels.GetSize());
145146
bResult = SetPlainDimensions(outPixels, uiPixelsWidth, uiPixelsHeight);
146147
}
@@ -530,7 +531,8 @@ bool CPixelsManager::D3DXGetSurfacePixels(IDirect3DSurface9* pD3DSurface, CPixel
530531
{
531532
if (!FAILED(D3DXSaveSurfaceToFileInMemory(&dxBuffer, dxFileFormat, pD3DSurface, NULL, pRect)))
532533
{
533-
outPixels.SetSize(dxBuffer->GetBufferSize());
534+
if (!outPixels.SetSize(dxBuffer->GetBufferSize()))
535+
return false;
534536
char* pPixelsData = outPixels.GetData();
535537
memcpy(pPixelsData, dxBuffer->GetBufferPointer(), outPixels.GetSize());
536538
return true;
@@ -570,7 +572,8 @@ bool CPixelsManager::D3DXGetSurfacePixels(IDirect3DSurface9* pD3DSurface, CPixel
570572
// Extract pixels from converted texture
571573
if (!FAILED(D3DXSaveTextureToFileInMemory(&dxBuffer, dxFileFormat, pD3DTempTexture, NULL)))
572574
{
573-
outPixels.SetSize(dxBuffer->GetBufferSize());
575+
if (!outPixels.SetSize(dxBuffer->GetBufferSize()))
576+
return false;
574577
char* pPixelsData = outPixels.GetData();
575578
memcpy(pPixelsData, dxBuffer->GetBufferPointer(), outPixels.GetSize());
576579
return true;
@@ -815,7 +818,8 @@ bool CPixelsManager::ChangePixelsFormat(const CPixels& oldPixels, CPixels& newPi
815818
uint uiWidth, uiHeight;
816819
if (JpegDecode(oldPixels.GetData(), oldPixels.GetSize(), &newPixels.buffer, uiWidth, uiHeight))
817820
{
818-
newPixels.buffer.SetSize(uiWidth * uiHeight * 4 + SIZEOF_PLAIN_TAIL);
821+
if (!newPixels.buffer.SetSize(uiWidth * uiHeight * 4 + SIZEOF_PLAIN_TAIL))
822+
return false;
819823
return SetPlainDimensions(newPixels, uiWidth, uiHeight);
820824
}
821825
}
@@ -824,7 +828,8 @@ bool CPixelsManager::ChangePixelsFormat(const CPixels& oldPixels, CPixels& newPi
824828
uint uiWidth, uiHeight;
825829
if (PngDecode(oldPixels.GetData(), oldPixels.GetSize(), &newPixels.buffer, uiWidth, uiHeight))
826830
{
827-
newPixels.buffer.SetSize(uiWidth * uiHeight * 4 + SIZEOF_PLAIN_TAIL);
831+
if (!newPixels.buffer.SetSize(uiWidth * uiHeight * 4 + SIZEOF_PLAIN_TAIL))
832+
return false;
828833
return SetPlainDimensions(newPixels, uiWidth, uiHeight);
829834
}
830835
}

Client/core/Graphics/CPixelsManager_VolumeTexture.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -427,7 +427,8 @@ bool CPixelsManager::D3DXGetVolumePixels(IDirect3DVolumeTexture9* pD3DVolumeText
427427
// Extract pixels from converted texture
428428
if (!FAILED(D3DXSaveTextureToFileInMemory(&dxBuffer, dxFileFormat, pD3DTempTexture, NULL)))
429429
{
430-
outPixels.SetSize(dxBuffer->GetBufferSize());
430+
if (!outPixels.SetSize(dxBuffer->GetBufferSize()))
431+
return false;
431432
char* pPixelsData = outPixels.GetData();
432433
memcpy(pPixelsData, dxBuffer->GetBufferPointer(), outPixels.GetSize());
433434
return true;
@@ -436,7 +437,8 @@ bool CPixelsManager::D3DXGetVolumePixels(IDirect3DVolumeTexture9* pD3DVolumeText
436437
else
437438
{
438439
// Use source pixels buffer
439-
outPixels.SetSize(dxBuffer->GetBufferSize());
440+
if (!outPixels.SetSize(dxBuffer->GetBufferSize()))
441+
return false;
440442
char* pPixelsData = outPixels.GetData();
441443
memcpy(pPixelsData, dxBuffer->GetBufferPointer(), outPixels.GetSize());
442444
return true;

Client/core/Graphics/CRenderItem.RenderTarget.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,8 @@ bool CRenderTargetItem::ReadPixels(CBuffer& outBuffer, SString& strOutError)
246246
uint ulScreenHeight = Desc.Height;
247247
uint ulLineBytes = ulScreenWidth * 4;
248248
outBuffer.SetSize(ulLineBytes * ulScreenHeight);
249+
if (outBuffer.GetSize() != ulLineBytes * ulScreenHeight)
250+
return false;
249251
char* pDest = outBuffer.GetData();
250252

251253
// Copy lines into a buffer

Client/mods/deathmatch/logic/CScriptFile.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,8 @@ void CScriptFile::DoResourceFileCheck()
245245

246246
// Read data
247247
CBuffer buffer;
248-
buffer.SetSize(lSize);
248+
if (!buffer.SetSize(lSize))
249+
return;
249250
m_pFile->FSeek(0, SEEK_SET);
250251
m_pFile->FRead(buffer.GetData(), buffer.GetSize());
251252

Client/multiplayer_sa/CMultiplayerSA.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5637,8 +5637,15 @@ void CMultiplayerSA::SetAltWaterOrderEnabled(bool bEnable)
56375637
{
56385638
// Save memory before we blat it
56395639
CBufferWriteStream stream(savedMem);
5640-
for (uint i = 0; i < NUMELMS(memoryList); i++)
5641-
stream.WriteBytes((void*)memoryList[i].dwAddress, memoryList[i].uiSize);
5640+
for (const auto& memory : memoryList)
5641+
stream.WriteBytes((void*)memory.dwAddress, memory.uiSize);
5642+
5643+
// Verify all memory was saved
5644+
uint uiExpectedSize = 0;
5645+
for (const auto& memory : memoryList)
5646+
uiExpectedSize += memory.uiSize;
5647+
if (savedMem.GetSize() != uiExpectedSize)
5648+
return;
56425649

56435650
// Add hooks and things
56445651
// Always render water after other entities (otherwise underwater LODs and trees are rendered

Client/sdk/core/CPixelsManagerInterface.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,15 @@ class CPixels
3535
const char* GetData() const { return externalData.pData ? externalData.pData : buffer.GetData(); }
3636
uint GetSize() const { return externalData.pData ? externalData.uiSize : buffer.GetSize(); }
3737

38-
void SetSize(uint uiSize)
38+
bool SetSize(uint uiSize)
3939
{
4040
dassert(externalData.pData == NULL || buffer.GetSize() == 0);
4141
if (externalData.pData)
4242
{
4343
buffer = CBuffer(externalData.pData, externalData.uiSize);
4444
externalData = SCharStringRef();
4545
}
46-
buffer.SetSize(uiSize);
46+
return buffer.SetSize(uiSize);
4747
}
4848

4949
// Only one can be in use at a time

Server/mods/deathmatch/logic/packets/CPlayerScreenShotPacket.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,8 @@ bool CPlayerScreenShotPacket::Read(NetBitStreamInterface& BitStream)
5555
if (!BitStream.Read(usNumBytes))
5656
return false;
5757

58-
m_buffer.SetSize(usNumBytes);
58+
if (!m_buffer.SetSize(usNumBytes))
59+
return false;
5960
if (!BitStream.Read(m_buffer.GetData(), m_buffer.GetSize()))
6061
return false;
6162

0 commit comments

Comments
 (0)