diff options
Diffstat (limited to 'src/libs/dutil/WixToolset.DUtil/memutil.cpp')
-rw-r--r-- | src/libs/dutil/WixToolset.DUtil/memutil.cpp | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/libs/dutil/WixToolset.DUtil/memutil.cpp b/src/libs/dutil/WixToolset.DUtil/memutil.cpp index c805a9c0..977c189e 100644 --- a/src/libs/dutil/WixToolset.DUtil/memutil.cpp +++ b/src/libs/dutil/WixToolset.DUtil/memutil.cpp | |||
@@ -214,6 +214,27 @@ LExit: | |||
214 | } | 214 | } |
215 | 215 | ||
216 | 216 | ||
217 | extern "C" HRESULT DAPI MemEnsureArraySizeForNewItems( | ||
218 | __inout LPVOID* ppvArray, | ||
219 | __in DWORD cArray, | ||
220 | __in DWORD cNewItems, | ||
221 | __in SIZE_T cbArrayType, | ||
222 | __in DWORD dwGrowthCount | ||
223 | ) | ||
224 | { | ||
225 | HRESULT hr = S_OK; | ||
226 | DWORD cNew = 0; | ||
227 | |||
228 | hr = ::DWordAdd(cArray, cNewItems, &cNew); | ||
229 | MemExitOnFailure(hr, "Integer overflow when calculating new element count."); | ||
230 | |||
231 | hr = MemEnsureArraySize(ppvArray, cNew, cbArrayType, dwGrowthCount); | ||
232 | |||
233 | LExit: | ||
234 | return hr; | ||
235 | } | ||
236 | |||
237 | |||
217 | extern "C" HRESULT DAPI MemInsertIntoArray( | 238 | extern "C" HRESULT DAPI MemInsertIntoArray( |
218 | __deref_inout_bcount((cExistingArray + cInsertItems) * cbArrayType) LPVOID* ppvArray, | 239 | __deref_inout_bcount((cExistingArray + cInsertItems) * cbArrayType) LPVOID* ppvArray, |
219 | __in DWORD dwInsertIndex, | 240 | __in DWORD dwInsertIndex, |
@@ -232,7 +253,7 @@ extern "C" HRESULT DAPI MemInsertIntoArray( | |||
232 | ExitFunction1(hr = S_OK); | 253 | ExitFunction1(hr = S_OK); |
233 | } | 254 | } |
234 | 255 | ||
235 | hr = MemEnsureArraySize(ppvArray, cExistingArray + cInsertItems, cbArrayType, dwGrowthCount); | 256 | hr = MemEnsureArraySizeForNewItems(ppvArray, cExistingArray, cInsertItems, cbArrayType, dwGrowthCount); |
236 | MemExitOnFailure(hr, "Failed to resize array while inserting items"); | 257 | MemExitOnFailure(hr, "Failed to resize array while inserting items"); |
237 | 258 | ||
238 | pbArray = reinterpret_cast<BYTE *>(*ppvArray); | 259 | pbArray = reinterpret_cast<BYTE *>(*ppvArray); |