mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-09-01 12:23:29 +00:00
Sync to Wine-0_9_5:
Robert Shearman <[email protected]> - ole: Fix mis-handling of return value in StgStreamImpl_Read. BlockChainStream_ReadAt returns a BOOL, not an HRESULT so change StgStreamImpl_Read to handle this, by returning STG_E_READFAULT on failure. - ole: Check the return value of IStream_SetSize in IStream_Read. Check the return value of IStream_SetSize in IStream_Read, since otherwise execution could continue on and cause heap corruption. svn path=/trunk/; revision=20621
This commit is contained in:
@@ -313,7 +313,12 @@ static HRESULT WINAPI HGLOBALStreamImpl_Write(
|
||||
if (newSize.u.LowPart > This->streamSize.u.LowPart)
|
||||
{
|
||||
/* grow stream */
|
||||
IStream_SetSize(iface, newSize);
|
||||
HRESULT hr = IStream_SetSize(iface, newSize);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
ERR("IStream_SetSize failed with error 0x%08lx\n", hr);
|
||||
return hr;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -249,7 +249,7 @@ static HRESULT WINAPI StgStreamImpl_Read(
|
||||
|
||||
ULONG bytesReadBuffer;
|
||||
ULONG bytesToReadFromBuffer;
|
||||
HRESULT res = S_FALSE;
|
||||
HRESULT res;
|
||||
|
||||
TRACE("(%p, %p, %ld, %p)\n",
|
||||
iface, pv, cb, pcbRead);
|
||||
@@ -282,11 +282,15 @@ static HRESULT WINAPI StgStreamImpl_Read(
|
||||
}
|
||||
else if (This->bigBlockChain!=0)
|
||||
{
|
||||
res = BlockChainStream_ReadAt(This->bigBlockChain,
|
||||
This->currentPosition,
|
||||
bytesToReadFromBuffer,
|
||||
pv,
|
||||
pcbRead);
|
||||
BOOL success = BlockChainStream_ReadAt(This->bigBlockChain,
|
||||
This->currentPosition,
|
||||
bytesToReadFromBuffer,
|
||||
pv,
|
||||
pcbRead);
|
||||
if (success)
|
||||
res = S_OK;
|
||||
else
|
||||
res = STG_E_READFAULT;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user