Hi,
Several fixes for the iupwin_webbrowser.cpp

--- \dll\iup\a\srcweb\iupwin_webbrowser.cpp     Wed Apr 03 14:12:26 2019
+++ iupwin_webbrowser.cpp       Mon Jun 03 23:00:50 2019
@@ -206,12 +206,14 @@
   pweb->get_Document(&lpDispatch);
   if (!lpDispatch)
   {
+    const BSTR pBstr = SysAllocString("about:blank");
     iupAttribSet(ih, "_IUPWEB_FAILED", NULL);
 
-    pweb->Navigate(L"about:blank", NULL, NULL, NULL, NULL);
+    pweb->Navigate(pBstr, NULL, NULL, NULL, NULL);
     IupFlush();
 
     pweb->get_Document(&lpDispatch);
+    SysFreeString(pBstr);
   }
 
   IPersistStreamInit* pPersistStreamInit = NULL;
@@ -405,15 +407,15 @@
 {
   if (value)
   {
-    char* element_id = iupAttribGet(ih, "ELEMENT_ID");
+    const char* element_id = iupAttribGet(ih, "ELEMENT_ID");
     if (element_id)
     {
-      IHTMLElement* pElem = winWebBrowserFindElement(ih, element_id);
+      const IHTMLElement* pElem = winWebBrowserFindElement(ih, element_id);
       if (pElem)
       {
-        WCHAR* wvalue = iupwinStrChar2Wide(value);
-        pElem->put_innerText(wvalue);
-        free(wvalue);
+        const BSTR pBvalue = SysAllocString(szWCharString);
+        pElem->put_innerText(pBvalue);
+        SysFreeString(pBvalue);
         pElem->Release();
       }
     }
@@ -423,50 +425,49 @@
 
 static char* winWebBrowserGetInnerTextAttrib(Ihandle* ih)
 {
-  char* element_id = iupAttribGet(ih, "ELEMENT_ID");
+  const char* element_id = iupAttribGet(ih, "ELEMENT_ID");
+  const* value = NULL;
   if (element_id)
   {
-    IHTMLElement* pElem = winWebBrowserFindElement(ih, element_id);
+    const IHTMLElement* pElem = winWebBrowserFindElement(ih, element_id);
     if (pElem)
     {
-      WCHAR* wvalue = NULL;
-      if (!FAILED(pElem->get_innerText(&wvalue)))
+      BSTR pBvalue = NULL;
+      if (!FAILED(pElem->get_innerText(&pBvalue)))
       {
-        char* str = iupwinStrWide2Char(wvalue);
-        char* value = iupStrReturnStr(str);
-        SysFreeString(wvalue);
+        const char* str = iupwinStrWide2Char(pBvalue);
+        const char* value = iupStrReturnStr(str);
         free(str);
-        pElem->Release();
-        return value;
+        SysFreeString(pBvalue);
       }
       pElem->Release();
     }
   }
 
-  return NULL;
+  return value;
 }
 
 static int winWebBrowserSetAttributeAttrib(Ihandle* ih, const char* value)
 {
   if (value)
   {
-    char* element_id = iupAttribGet(ih, "ELEMENT_ID");
-    char* attribute_name = iupAttribGet(ih, "ATTRIBUTE_NAME");
+    const char* element_id = iupAttribGet(ih, "ELEMENT_ID");
+    const char* attribute_name = iupAttribGet(ih, "ATTRIBUTE_NAME");
     if (element_id && attribute_name)
     {
       IHTMLElement* pElem = winWebBrowserFindElement(ih, element_id);
       if (pElem)
       {
-        WCHAR* wname = iupwinStrChar2Wide(attribute_name);
-        WCHAR* wvalue = iupwinStrChar2Wide(value);
+        const BSTR pBname = SysAllocString(attribute_name);
+        const WCHAR* wvalue = iupwinStrChar2Wide(value);
 
         VARIANT var;
         VariantBStr(&var, wvalue);
 
-        pElem->setAttribute(wname, var, 1);  // case sensitive search
+        pElem->setAttribute(pBname, var, 1);  // case sensitive search
 
         free(wvalue);
-        free(wname);
+        SysFreeString(pBname);
         pElem->Release();
       }
     }
@@ -476,31 +477,29 @@
 
 static char* winWebBrowserGetAttributeAttrib(Ihandle* ih)
 {
-  char* element_id = iupAttribGet(ih, "ELEMENT_ID");
-  char* attribute_name = iupAttribGet(ih, "ATTRIBUTE_NAME");
+  const char* element_id = iupAttribGet(ih, "ELEMENT_ID");
+  const char* attribute_name = iupAttribGet(ih, "ATTRIBUTE_NAME");
+  const char *value = NULL;
   if (element_id && attribute_name)
   {
-    IHTMLElement* pElem = winWebBrowserFindElement(ih, element_id);
+    const IHTMLElement* pElem = winWebBrowserFindElement(ih, element_id);
     if (pElem)
     {
-      WCHAR* wname = iupwinStrChar2Wide(attribute_name);
+      const BSTR pBname = SysAllocString(attribute_name);
       VARIANT var;
       VariantInit(&var);
-      if (!FAILED(pElem->getAttribute(wname, 1, &var)) && var.bstrVal)  // 
case sensitive search
+      if (!FAILED(pElem->getAttribute(pBname, 1, &var)) && var.bstrVal)  // 
case sensitive search
       {
-        char* str = iupwinStrWide2Char(var.bstrVal);
-        char* value = iupStrReturnStr(str);
+        const char* str = iupwinStrWide2Char(var.bstrVal);
+        value = iupStrReturnStr(str);
         free(str);
-        free(wname);
-        pElem->Release();
-        return value;
       }
-      free(wname);
+      SysFreeString(pBname);
       pElem->Release();
     }
   }
 
-  return NULL;
+  return value;
 }
 
 static int winWebBrowserSetBackForwardAttrib(Ihandle* ih, const char* value)
@@ -578,7 +577,7 @@
   if (value)
   {
     IWebBrowser2 *pweb = (IWebBrowser2*)iupAttribGet(ih, "_IUPWEB_BROWSER");
-    WCHAR* wvalue = iupwinStrChar2Wide(value);
+    const BSTR pBvalue = SysAllocString(value);
 
     VARIANT var;
     VariantInit(&var);  /* Initialize our variant */
@@ -587,8 +586,8 @@
 
     iupAttribSet(ih, "_IUPWEB_FAILED", NULL);
 
-    pweb->Navigate(wvalue, NULL, &var, NULL, NULL);
-    free(wvalue);
+    pweb->Navigate(pBvalue, NULL, &var, NULL, NULL);
+    SysFreeString(pBvalue);
   }
   return 0;
 }
@@ -599,10 +598,10 @@
   BSTR pbstrLocationURL = NULL;
   if (pweb->get_LocationURL(&pbstrLocationURL)==S_OK && pbstrLocationURL)
   {
-    char* str = iupwinStrWide2Char(pbstrLocationURL);
-    SysFreeString(pbstrLocationURL);
+    const char* str = iupwinStrWide2Char(pbstrLocationURL);
     char* value = iupStrReturnStr(str);
     free(str);
+    SysFreeString(pbstrLocationURL);
     return value;
   }
   return NULL;

Best regards,
Ranier Vilela

Attachment: iupwin_webbrowser.cpp.patch
Description: iupwin_webbrowser.cpp.patch

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

Reply via email to