diff --git a/dlls/oleaut32/olepicture.c b/dlls/oleaut32/olepicture.c
index 569fe1545e897b64d5bcea9b6022682e2716a9bc..85a9f0819385994d1f1101756be0220611379a34 100644
--- a/dlls/oleaut32/olepicture.c
+++ b/dlls/oleaut32/olepicture.c
@@ -1838,6 +1838,7 @@ static HRESULT WINAPI OLEPictureImpl_Save(
                 hResult = E_FAIL;
                 break;
             }
+            HeapFree(GetProcessHeap(), 0, This->data);
             This->data = pIconData;
             This->datalen = iDataSize;
         }
@@ -1850,7 +1851,6 @@ static HRESULT WINAPI OLEPictureImpl_Save(
         }
         IStream_Write(pStm, This->data, This->datalen, &dummy);
 
-        HeapFree(GetProcessHeap(), 0, This->data);
         hResult = S_OK;
         break;
     case PICTYPE_BITMAP: