Module: wine Branch: refs/heads/master Commit: 2479aec4af44ea3498b7334111fdcbb06d5f5c5e URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=2479aec4af44ea3498b73341...
Author: Robert Shearman rob@codeweavers.com Date: Mon May 15 13:35:51 2006 +0100
rpcrt4: Save pStubMsg->ActualCount in a local variable in the complex array functions, before calling a function that could change it and cause the wrong number of loop iterations.
---
dlls/rpcrt4/ndr_marshall.c | 25 +++++++++++++++---------- 1 files changed, 15 insertions(+), 10 deletions(-)
diff --git a/dlls/rpcrt4/ndr_marshall.c b/dlls/rpcrt4/ndr_marshall.c index 3d34b8a..6156e0f 100644 --- a/dlls/rpcrt4/ndr_marshall.c +++ b/dlls/rpcrt4/ndr_marshall.c @@ -2283,7 +2283,7 @@ unsigned char * WINAPI NdrComplexArrayMa unsigned char *pMemory, PFORMAT_STRING pFormat) { - ULONG count, def; + ULONG i, count, def; BOOL variance_present; unsigned char alignment;
@@ -2314,7 +2314,8 @@ unsigned char * WINAPI NdrComplexArrayMa
ALIGN_POINTER(pStubMsg->Buffer, alignment);
- for (count = 0; count < pStubMsg->ActualCount; count++) + count = pStubMsg->ActualCount; + for (i = 0; i < count; i++) pMemory = ComplexMarshall(pStubMsg, pMemory, pFormat, NULL);
STD_OVERFLOW_CHECK(pStubMsg); @@ -2330,7 +2331,7 @@ unsigned char * WINAPI NdrComplexArrayUn PFORMAT_STRING pFormat, unsigned char fMustAlloc) { - ULONG count, esize; + ULONG i, count, esize; unsigned char alignment; unsigned char *pMemory; unsigned char *Buffer; @@ -2364,7 +2365,8 @@ unsigned char * WINAPI NdrComplexArrayUn ALIGN_POINTER(pStubMsg->Buffer, alignment);
pMemory = *ppMemory; - for (count = 0; count < pStubMsg->ActualCount; count++) + count = pStubMsg->ActualCount; + for (i = 0; i < count; i++) pMemory = ComplexUnmarshall(pStubMsg, pMemory, pFormat, NULL, fMustAlloc);
return NULL; @@ -2377,7 +2379,7 @@ void WINAPI NdrComplexArrayBufferSize(PM unsigned char *pMemory, PFORMAT_STRING pFormat) { - ULONG count, def; + ULONG i, count, def; unsigned char alignment; BOOL variance_present;
@@ -2408,7 +2410,8 @@ void WINAPI NdrComplexArrayBufferSize(PM
ALIGN_LENGTH(pStubMsg->BufferLength, alignment);
- for (count=0; count < pStubMsg->ActualCount; count++) + count = pStubMsg->ActualCount; + for (i = 0; i < count; i++) pMemory = ComplexBufferSize(pStubMsg, pMemory, pFormat, NULL); }
@@ -2418,7 +2421,7 @@ void WINAPI NdrComplexArrayBufferSize(PM unsigned long WINAPI NdrComplexArrayMemorySize(PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat) { - ULONG count, esize; + ULONG i, count, esize; unsigned char alignment; unsigned char *Buffer; unsigned long SavedMemorySize; @@ -2450,7 +2453,8 @@ unsigned long WINAPI NdrComplexArrayMemo
MemorySize = esize * pStubMsg->MaxCount;
- for (count = 0; count < pStubMsg->ActualCount; count++) + count = pStubMsg->ActualCount; + for (i = 0; i < count; i++) ComplexStructMemorySize(pStubMsg, pFormat);
pStubMsg->MemorySize = SavedMemorySize; @@ -2466,7 +2470,7 @@ void WINAPI NdrComplexArrayFree(PMIDL_ST unsigned char *pMemory, PFORMAT_STRING pFormat) { - ULONG count, def; + ULONG i, count, def;
TRACE("(%p,%p,%p)\n", pStubMsg, pMemory, pFormat);
@@ -2486,7 +2490,8 @@ void WINAPI NdrComplexArrayFree(PMIDL_ST pFormat = ComputeVariance(pStubMsg, pMemory, pFormat, pStubMsg->MaxCount); TRACE("variance = %ld\n", pStubMsg->ActualCount);
- for (count=0; count < pStubMsg->ActualCount; count++) + count = pStubMsg->ActualCount; + for (i = 0; i < count; i++) pMemory = ComplexFree(pStubMsg, pMemory, pFormat, NULL); }