Fix a crash in ~PluginViewWin()
[WebKit-https.git] / WebCore / plugins / win / PluginViewWin.cpp
index 8afcf49f2ef6a4169a6ce6c39ade06c0b718a148..9b946e6ab4c205348bc7b6c1c1121efb8e2aee41 100644 (file)
@@ -469,7 +469,7 @@ bool PluginViewWin::start()
     PluginViewWin::setCurrentPluginView(this);
     {
         KJS::JSLock::DropAllLocks dropAllLocks;
-        npErr = m_plugin->pluginFuncs()->newp((NPMIMEType)(const char*)m_mimeType, m_instance, m_mode, m_paramCount, m_paramNames, m_paramValues, NULL);
+        npErr = m_plugin->pluginFuncs()->newp((NPMIMEType)m_mimeType.data(), m_instance, m_mode, m_paramCount, m_paramNames, m_paramValues, NULL);
         LOG_NPERROR(npErr);
     }
     PluginViewWin::setCurrentPluginView(0);
@@ -534,7 +534,7 @@ static char* createUTF8String(const String& str)
     CString cstr = str.utf8();
     char* result = reinterpret_cast<char*>(fastMalloc(cstr.length() + 1));
 
-    strncpy(result, cstr, cstr.length() + 1);
+    strncpy(result, cstr.data(), cstr.length() + 1);
 
     return result;
 }
@@ -554,7 +554,7 @@ static void freeStringArray(char** stringArray, int length)
     if (!stringArray)
         return;
 
-    for (unsigned i = 0; i < length; i++)
+    for (int i = 0; i < length; i++)
         fastFree(stringArray[i]);
 
     fastFree(stringArray);
@@ -995,7 +995,7 @@ const char* PluginViewWin::userAgent()
 
     if (m_userAgent.isNull())
         m_userAgent = m_parentFrame->loader()->userAgent(m_url).utf8();
-    return m_userAgent;
+    return m_userAgent.data();
 }
 
 void PluginViewWin::status(const char* message)
@@ -1069,7 +1069,7 @@ void PluginViewWin::invalidateTimerFired(Timer<PluginViewWin>* timer)
 {
     ASSERT(timer == &m_invalidateTimer);
 
-    for (int i = 0; i < m_invalidRects.size(); i++)
+    for (unsigned i = 0; i < m_invalidRects.size(); i++)
         Widget::invalidateRect(m_invalidRects[i]);
     m_invalidRects.clear();
 }
@@ -1155,6 +1155,11 @@ PluginViewWin::~PluginViewWin()
 
     if (m_window)
         DestroyWindow(m_window);
+
+    m_parentFrame->cleanupScriptObjectsForPlugin(this);
+
+    if (m_plugin)
+        m_plugin->unload();
 }
 
 void PluginViewWin::disconnectStream(PluginStreamWin* stream)