Hi,
Multiple fixes in iupwin_newfiledlg.c:

--- ..\..\a\srcfiledlg\iupwin_newfiledlg.cpp    Fri Sep 14 17:33:33 2018
+++ iupwin_newfiledlg.cpp       Sat May 25 10:43:31 2019
@@ -334,48 +334,25 @@
   COMDLG_FILTERSPEC* filters = 
(COMDLG_FILTERSPEC*)malloc((buffSize)*sizeof(COMDLG_FILTERSPEC));
 
   /* replace symbols "|" by terminator "\0" */
-
-  while (*name)
+  if (name && *name)
   {
-    char *filter;
-    filter = name;
-    while (*filter)
-    {
-      if (*filter == '|')
-      {
-        *filter = 0;
-        filters[i].pszName = iupwinStrToSystem(name);
-        break;
-      }
-      filter++;
-    }
-
-    if (!filter)
-      break;
-
-    name = ++filter;
-
-    while (*filter)
+    char *filter = name;
+    while (filter && *filter)
     {
       if (*filter == '|')
       {
-        *filter = 0;
-        filters[i].pszSpec = iupwinStrToSystem(name);
-        break;
+         *filter = '\0';
+         filters[i].pszName = iupwinStrToSystem(name);
       }
-      filter++;
+      ++filter;
+      ++i;
+      if (i == 50)
+         break;
     }
-
     if (!filter)
-      break;
-
-    i++;
+       break;
     name = ++filter;
-
-    if (i == 50)
-      break;
   }
-
   *size = i;
   return filters;
 }
@@ -646,8 +623,8 @@
     si = winNewFileDlgParseName(wdir);
     if (si)
       hr = pfd->SetFolder(si);
-    free(directory);
   }
+  free(directory);
 
   value = iupAttribGet(ih, "TITLE");
   if (value)
@@ -695,13 +672,8 @@
             dir_len = 0;
 
           iupAttribSetStrId(ih, "MULTIVALUE", 1, filename + dir_len);
-
           iupAttribSetStr(ih, "VALUE", filename);  /* here value is not 
separated by '|' */
-
           iupAttribSetInt(ih, "MULTIVALUECOUNT", 2);
-          free(dir);
-          CoTaskMemFree(pszFilePath);
-
           if (winIsFile(pszFilePath))  /* check if file exists */
           {
             iupAttribSet(ih, "FILEEXIST", "YES");
@@ -712,6 +684,8 @@
             iupAttribSet(ih, "FILEEXIST", "NO");
             iupAttribSet(ih, "STATUS", "1");
           }
+          free(dir);
+          CoTaskMemFree(pszFilePath);
         }
         else
           iupAttribSet(ih, "STATUS", "-1");
@@ -719,7 +693,7 @@
         psiResult->Release();
       }
     }
-    else
+    else if (opfd != NULL)
     {
       IShellItemArray *psiaResult;
 
@@ -798,8 +772,8 @@
                   char *fname = iupStrFileGetTitle(filename);
                   sprintf(nameid, "MULTIVALUE%d", i + 1);
                   iupAttribSetStrf(ih, nameid, "%s%s", dir, fname);
-
                   iupAttribSetStrf(ih, "VALUE", "%s%s|", value, 
iupAttribGetId(ih, "MULTIVALUE", i + 1));
+                  free(fname);
                 }
                 else
                 {

Best regards,
Ranier Vilela

Attachment: iupwin_newfiledlg.cpp.patch
Description: iupwin_newfiledlg.cpp.patch

_______________________________________________
Iup-users mailing list
Iup-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/iup-users

Reply via email to