[PATCH 2/2] reg: Properly handle HeapReAlloc() failure in the query operation

Hugh McMaster hugh.mcmaster at outlook.com
Fri Jul 21 08:04:01 CDT 2017


Signed-off-by: Hugh McMaster <hugh.mcmaster at outlook.com>
---
 programs/reg/reg.c | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

diff --git a/programs/reg/reg.c b/programs/reg/reg.c
index 59c8eda732..30e7fb1c27 100644
--- a/programs/reg/reg.c
+++ b/programs/reg/reg.c
@@ -654,8 +654,15 @@ static int query_value(HKEY key, WCHAR *value_name, WCHAR *path, BOOL recurse)
         rc = RegQueryValueExW(key, value_name, NULL, &type, data, &data_size);
         if (rc == ERROR_MORE_DATA)
         {
+            BYTE *tmp = HeapReAlloc(GetProcessHeap(), 0, data, data_size);
+            if (!tmp)
+            {
+                ERR("Failed to increase data memory allocation\n");
+                HeapFree(GetProcessHeap(), 0, data);
+                return 1;
+            }
+            data = tmp;
             max_data_bytes = data_size;
-            data = HeapReAlloc(GetProcessHeap(), 0, data, max_data_bytes);
         }
         else break;
     }
@@ -763,8 +770,16 @@ static int query_all(HKEY key, WCHAR *path, BOOL recurse)
         {
             if (data_size > max_data_bytes)
             {
+                BYTE *tmp = HeapReAlloc(GetProcessHeap(), 0, data, data_size);
+                if (!tmp)
+                {
+                    ERR("Failed to increase data memory allocation\n");
+                    HeapFree(GetProcessHeap(), 0, data);
+                    HeapFree(GetProcessHeap(), 0, value_name);
+                    return 1;
+                }
+                data = tmp;
                 max_data_bytes = data_size;
-                data = HeapReAlloc(GetProcessHeap(), 0, data, max_data_bytes);
             }
             else
             {
-- 
2.13.2




More information about the wine-patches mailing list