# HG changeset patch # User Deepak Bhole # Date 1299190194 18000 # Node ID fb436cda450ef531da0911d7fda2222bb2f073c8 # Parent dd73915dfe99c925c6f39fca174de291a53bc01d Added check for instance validity before making calls to the browser diff -r dd73915dfe99 -r fb436cda450e ChangeLog --- 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 + + * 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 * plugin/icedteanp/IcedTeaPluginRequestProcessor.cc diff -r dd73915dfe99 -r fb436cda450e 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(); 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);