wf_cliprdr: fix incorrect usage of realloc.
authorZhang Zhaolong <zhangzl2013@126.com>
Wed, 11 Mar 2015 03:27:39 +0000 (11:27 +0800)
committerZhang Zhaolong <zhangzl2013@126.com>
Wed, 11 Mar 2015 03:27:39 +0000 (11:27 +0800)
Signed-off-by: Zhang Zhaolong <zhangzl2013@126.com>
client/Windows/wf_cliprdr.c

index 6b803d8..edbc0b9 100644 (file)
@@ -906,9 +906,15 @@ static void map_ensure_capacity(wfClipboard* clipboard)
 {
        if (clipboard->map_size >= clipboard->map_capacity)
        {
-               clipboard->map_capacity *= 2;
-               clipboard->format_mappings = (formatMapping*) realloc(clipboard->format_mappings,
-                       sizeof(formatMapping) * clipboard->map_capacity);
+               int new_size;
+               formatMapping *new_map;
+
+               new_map = (formatMapping*) realloc(clipboard->format_mappings,
+                               sizeof(formatMapping) * new_size);
+               if (!new_map)
+                       return;
+               clipboard->format_mappings = new_map;
+               clipboard->map_capacity = new_size;
        }
 }
 
@@ -1348,9 +1354,19 @@ static void wf_cliprdr_array_ensure_capacity(wfClipboard* clipboard)
 {
        if (clipboard->nFiles == clipboard->file_array_size)
        {
-               clipboard->file_array_size *= 2;
-               clipboard->fileDescriptor = (FILEDESCRIPTORW**) realloc(clipboard->fileDescriptor, clipboard->file_array_size * sizeof(FILEDESCRIPTORW*));
-               clipboard->file_names = (WCHAR**) realloc(clipboard->file_names, clipboard->file_array_size * sizeof(WCHAR*));
+               int new_size;
+               FILEDESCRIPTORW **new_fd;
+               WCHAR **new_name;
+
+               new_size = clipboard->file_array_size * 2;
+               new_fd = (FILEDESCRIPTORW**) realloc(clipboard->fileDescriptor, new_size * sizeof(FILEDESCRIPTORW*));
+               new_name = (WCHAR**) realloc(clipboard->file_names, new_size * sizeof(WCHAR*));
+               if (!new_fd || !new_name)
+                       return;
+
+               clipboard->fileDescriptor = new_fd;
+               clipboard->file_names = new_name;
+               clipboard->file_array_size *= new_size;
        }
 }
 
@@ -1678,12 +1694,7 @@ static int wf_cliprdr_server_format_data_request(CliprdrClientContext* context,
                                        clipboard->file_names[clipboard->nFiles] = (LPWSTR) malloc(cchWideChar * 2);
                                        MultiByteToWideChar(CP_ACP, MB_COMPOSITE, p, len, clipboard->file_names[clipboard->nFiles], cchWideChar);
 
-                                       if (clipboard->nFiles == clipboard->file_array_size)
-                                       {
-                                               clipboard->file_array_size *= 2;
-                                               clipboard->fileDescriptor = (FILEDESCRIPTORW**) realloc(clipboard->fileDescriptor, clipboard->file_array_size * sizeof(FILEDESCRIPTORW*));
-                                               clipboard->file_names = (WCHAR**) realloc(clipboard->file_names, clipboard->file_array_size * sizeof(WCHAR*));
-                                       }
+                                       map_ensure_capacity(clipboard);
                                }
                        }