changeset 107:fb436cda450e

Added check for instance validity before making calls to the browser
author Deepak Bhole <dbhole@redhat.com>
date Thu, 03 Mar 2011 17:09:54 -0500
parents dd73915dfe99
children 1a2f329bdd26
files ChangeLog plugin/icedteanp/IcedTeaPluginRequestProcessor.cc
diffstat 2 files changed, 41 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Thu Mar 03 17:04:56 2011 -0500
+++ b/ChangeLog	Thu Mar 03 17:09:54 2011 -0500
@@ -1,3 +1,16 @@
+2011-03-03  Deepak Bhole <dbhole@redhat.com>
+
+	* plugin/icedteanp/IcedTeaPluginRequestProcessor.cc
+	(eval): Proceed with _eval only if instance is valid.
+	(call): Proceed with _call only if instance is valid. Moved declaration
+	of result_variant_jniid, result_variant args_array and thread_data to 
+	the top.
+	(sendString): Proceed with _getString only if instance is valid. Remove
+	thread count incrementer.
+	(setMember): Proceed with _setMember only if instance is valid. Remove
+	thread count incrementer.
+	(sendMember): Proceed with _getMember only if instance is valid.
+
 2011-03-03  Deepak Bhole <dbhole@redhat.com>
 
 	* plugin/icedteanp/IcedTeaPluginRequestProcessor.cc
--- a/plugin/icedteanp/IcedTeaPluginRequestProcessor.cc	Thu Mar 03 17:04:56 2011 -0500
+++ b/plugin/icedteanp/IcedTeaPluginRequestProcessor.cc	Thu Mar 03 17:09:54 2011 -0500
@@ -221,6 +221,10 @@
     window_ptr = (NPVariant*) IcedTeaPluginUtilities::stringToJSID(message_parts->at(5));
     instance = IcedTeaPluginUtilities::getInstanceFromMemberPtr(window_ptr);
 
+    // If instance is invalid, do not proceed further
+    if (!instance)
+    	return;
+
     java_result = request_processor.getString(*(message_parts->at(6)));
     CHECK_JAVA_RESULT(java_result);
     script.append(*(java_result->return_string));
@@ -280,6 +284,10 @@
     std::string response = std::string();
     JavaRequestProcessor java_request = JavaRequestProcessor();
     JavaResultData* java_result;
+    NPVariant* result_variant;
+    std::string result_variant_jniid = std::string();
+    NPVariant* args_array;
+    AsyncCallThreadData thread_data = AsyncCallThreadData();
 
     reference = atoi(message_parts->at(3)->c_str());
 
@@ -290,6 +298,10 @@
     // instance
     instance = IcedTeaPluginUtilities::getInstanceFromMemberPtr(window_ptr);
 
+    // If instance is invalid, do not proceed further
+    if (!instance)
+    	goto cleanup;
+
     // function name
     java_result = java_request.getString(*(message_parts->at(6)));
     CHECK_JAVA_RESULT(java_result);
@@ -314,11 +326,10 @@
     }
 
     arg_count = args.size();
-    NPVariant *args_array = (NPVariant*) malloc(sizeof(NPVariant)*args.size());
+    args_array = (NPVariant*) malloc(sizeof(NPVariant)*args.size());
     for (int i=0; i < args.size(); i++)
         args_array[i] = args[i];
 
-    AsyncCallThreadData thread_data = AsyncCallThreadData();
     thread_data.result_ready = false;
     thread_data.parameters = std::vector<void*>();
     thread_data.result = std::string();
@@ -344,8 +355,7 @@
     }
 #endif
 
-    NPVariant* result_variant = (NPVariant*) IcedTeaPluginUtilities::stringToJSID(thread_data.result);
-    std::string result_variant_jniid = std::string();
+    result_variant = (NPVariant*) IcedTeaPluginUtilities::stringToJSID(thread_data.result);
 
     if (result_variant)
     {
@@ -390,6 +400,11 @@
     thread_data.result = std::string();
 
     NPP instance = IcedTeaPluginUtilities::getInstanceFromMemberPtr(variant);
+
+    // If instance is invalid, do not proceed further
+    if (!instance)
+    	return;
+
     thread_data.parameters.push_back(instance);
     thread_data.parameters.push_back(variant);
 
@@ -455,6 +470,10 @@
 
     instance = IcedTeaPluginUtilities::getInstanceFromMemberPtr(member);
 
+    // If instance is invalid, do not proceed further
+    if (!instance)
+    	return;
+
     if (*(message_parts->at(4)) == "SetSlot")
     {
         property_identifier = browser_functions.getintidentifier(atoi(message_parts->at(6)->c_str()));
@@ -569,6 +588,11 @@
     thread_data.result = std::string();
 
     NPP instance = IcedTeaPluginUtilities::getInstanceFromMemberPtr(parent_ptr);
+
+    // If instance is invalid, do not proceed further
+    if (!instance)
+    	return;
+
     thread_data.parameters.push_back(instance);
     thread_data.parameters.push_back(NPVARIANT_TO_OBJECT(*parent_ptr));
     thread_data.parameters.push_back(&member_identifier);