msi: correctly handle return value of msi_realloc. [1/2]

James Hawkins truiken at gmail.com
Sat Dec 22 10:55:22 CST 2007


On Dec 22, 2007 4:28 AM, Lionel_Debroux <lionel_debroux at yahoo.fr> wrote:
> Several functions in dlls/msi/action.c and dlls/msi/database.c use
> constructs of the form
> ptr = msi_realloc (ptr, newsize);
>
> In the (admittedly very unlikely) situation where msi_realloc fails,
> this leaks, or even faults:
> filename = msi_realloc(filename, len * sizeof(WCHAR) + sizeof(szlnk));
> memcpy(filename + len, szlnk, sizeof(szlnk));
>
> 2007-12-14  Lionel Debroux <lionel_debroux at yahoo.fr>
>         * dlls/msi/action.c, dlls/msi/database.c:
>         msi: correctly handle return value of msi_realloc.
>

-        filename = msi_realloc(filename, len * sizeof(WCHAR) + sizeof(szlnk));
+        p = msi_realloc(filename, len * sizeof(WCHAR) + sizeof(szlnk));
+        if (!p)
+        {
+            msi_free(target_folder);
+            msi_free(filename);
+            ERR("Not enough memory to grow filename\n");
+            goto err;
+        }
+        filename = p;

Don't add ERRs for out of memory...and you need to return
ERROR_OUTOFMEMORY in these cases.

-- 
James Hawkins



More information about the wine-devel mailing list