diff --git a/dlls/avifil32/acmstream.c b/dlls/avifil32/acmstream.c
index 5cff037d94adf3393dbb596276823f2fbe1b0012..0c6563bb7751f6849c9aae762f4030a90c37f0d2 100644
--- a/dlls/avifil32/acmstream.c
+++ b/dlls/avifil32/acmstream.c
@@ -467,8 +467,11 @@ static HRESULT WINAPI ACMStream_fnRead(IAVIStream *iface, LONG start,
   /* need bigger source buffer? */
   if (This->acmStreamHdr.pbSrc == NULL ||
       This->acmStreamHdr.dwSrcUser < size) {
-    This->acmStreamHdr.pbSrc = GlobalReAllocPtr(This->acmStreamHdr.pbSrc,
-						size, GMEM_MOVEABLE);
+    if (This->acmStreamHdr.pbSrc == NULL)
+      This->acmStreamHdr.pbSrc = GlobalAllocPtr(GMEM_MOVEABLE, size);
+    else
+      This->acmStreamHdr.pbSrc = GlobalReAllocPtr(This->acmStreamHdr.pbSrc,
+						  size, GMEM_MOVEABLE);
     if (This->acmStreamHdr.pbSrc == NULL)
       return AVIERR_MEMORY;
     This->acmStreamHdr.dwSrcUser = size;
@@ -568,8 +571,11 @@ static HRESULT WINAPI ACMStream_fnWrite(IAVIStream *iface, LONG start,
   /* Need bigger destination buffer? */
   if (This->acmStreamHdr.pbDst == NULL ||
       This->acmStreamHdr.dwDstUser < size) {
-    This->acmStreamHdr.pbDst = GlobalReAllocPtr(This->acmStreamHdr.pbDst,
-						size, GMEM_MOVEABLE);
+    if (This->acmStreamHdr.pbDst == NULL)
+      This->acmStreamHdr.pbDst = GlobalAllocPtr(GMEM_MOVEABLE, size);
+    else
+      This->acmStreamHdr.pbDst = GlobalReAllocPtr(This->acmStreamHdr.pbDst,
+						  size, GMEM_MOVEABLE);
     if (This->acmStreamHdr.pbDst == NULL)
       return AVIERR_MEMORY;
     This->acmStreamHdr.dwDstUser = size;
diff --git a/dlls/avifil32/avifile.c b/dlls/avifil32/avifile.c
index e523c10a9a091f255dff10982092bdc0bc405254..f6503fc60c12c666c31628ef8e6c90ae5f162cd5 100644
--- a/dlls/avifil32/avifile.c
+++ b/dlls/avifil32/avifile.c
@@ -1382,7 +1382,13 @@ static HRESULT AVIFILE_AddFrame(IAVIStreamImpl *This, DWORD ckid, DWORD size, DW
       UINT n = This->sInfo.dwFormatChangeCount;
 
       This->nIdxFmtChanges += 16;
-      This->idxFmtChanges = GlobalReAllocPtr(This->idxFmtChanges, This->nIdxFmtChanges * sizeof(AVIINDEXENTRY), GHND);
+      if (This->idxFmtChanges == NULL)
+	This->idxFmtChanges =
+	  GlobalAllocPtr(GHND, This->nIdxFmtChanges * sizeof(AVIINDEXENTRY));
+      else
+	This->idxFmtChanges =
+	  GlobalReAllocPtr(This->idxFmtChanges,
+			   This->nIdxFmtChanges * sizeof(AVIINDEXENTRY), GHND);
       if (This->idxFmtChanges == NULL)
 	return AVIERR_MEMORY;
 
@@ -1413,7 +1419,13 @@ static HRESULT AVIFILE_AddFrame(IAVIStreamImpl *This, DWORD ckid, DWORD size, DW
   /* get memory for index */
   if (This->idxFrames == NULL || This->lLastFrame + 1 >= This->nIdxFrames) {
     This->nIdxFrames += 512;
-    This->idxFrames = GlobalReAllocPtr(This->idxFrames, This->nIdxFrames * sizeof(AVIINDEXENTRY), GHND);
+    if (This->idxFrames == NULL)
+      This->idxFrames =
+	GlobalAllocPtr(GHND, This->nIdxFrames * sizeof(AVIINDEXENTRY));
+      else
+	This->idxFrames =
+	  GlobalReAllocPtr(This->idxFrames,
+			   This->nIdxFrames * sizeof(AVIINDEXENTRY), GHND);
     if (This->idxFrames == NULL)
       return AVIERR_MEMORY;
   }
@@ -2016,8 +2028,13 @@ static HRESULT AVIFILE_ReadBlock(IAVIStreamImpl *This, DWORD pos,
 
     /* check that buffer is big enough -- don't trust dwSuggestedBufferSize */
     if (This->lpBuffer == NULL || size < This->cbBuffer) {
-      This->lpBuffer =
-	(LPDWORD)GlobalReAllocPtr(This->lpBuffer, max(size, This->sInfo.dwSuggestedBufferSize), GMEM_MOVEABLE);
+      DWORD maxSize = max(size, This->sInfo.dwSuggestedBufferSize);
+
+      if (This->lpBuffer == NULL)
+	This->lpBuffer = (LPDWORD)GlobalAllocPtr(GMEM_MOVEABLE, maxSize);
+      else
+	This->lpBuffer =
+	  (LPDWORD)GlobalReAllocPtr(This->lpBuffer, maxSize, GMEM_MOVEABLE);
       if (This->lpBuffer == NULL)
 	return AVIERR_MEMORY;
       This->cbBuffer = max(size, This->sInfo.dwSuggestedBufferSize);