From 9a696edbf3e203204d309410f6bf7988979e69bc Mon Sep 17 00:00:00 2001 From: Chris Jones Date: Fri, 20 Nov 2009 02:23:07 -0600 Subject: [PATCH] bug 530007: fix crashing edge cases in the hope of getting better diagnostics about failed tests --- dom/plugins/PluginModuleParent.cpp | 11 +++++++++-- modules/plugin/test/testplugin/nptest.cpp | 14 +++++++++++++- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/dom/plugins/PluginModuleParent.cpp b/dom/plugins/PluginModuleParent.cpp index 1a14b43a75d..867b12cc3f0 100644 --- a/dom/plugins/PluginModuleParent.cpp +++ b/dom/plugins/PluginModuleParent.cpp @@ -141,6 +141,9 @@ PluginModuleParent::NPP_Destroy(NPP instance, PluginInstanceParent* parentInstance = static_cast(instance->pdata); + if (!parentInstance) + return NPERR_NO_ERROR; + parentInstance->Destroy(); NPError prv; @@ -150,8 +153,7 @@ PluginModuleParent::NPP_Destroy(NPP instance, instance->pdata = nsnull; return prv; - - } +} bool PluginModuleParent::EnsureValidNPIdentifier(NPIdentifier aIdentifier) @@ -542,6 +544,11 @@ PluginModuleParent::NPP_New(NPMIMEType pluginType, NPP instance, names, values, error)) { // |parentInstance| is automatically deleted. instance->pdata = nsnull; + // if IPC is down, we'll get an immediate "failed" return, but + // without *error being set. So make sure that the error + // condition is signaled to nsNPAPIPluginInstance + if (NPERR_NO_ERROR == *error) + *error = NPERR_GENERIC_ERROR; return NS_ERROR_FAILURE; } diff --git a/modules/plugin/test/testplugin/nptest.cpp b/modules/plugin/test/testplugin/nptest.cpp index 31a45d4b993..1765164015d 100644 --- a/modules/plugin/test/testplugin/nptest.cpp +++ b/modules/plugin/test/testplugin/nptest.cpp @@ -738,8 +738,20 @@ NPP_DestroyStream(NPP instance, NPStream* stream, NPReason reason) if (instanceData->streamMode == NP_ASFILE && instanceData->functionToFail == FUNCTION_NONE) { + if (!instanceData->streamBuf) { + instanceData->err << + "Error: no data written with NPP_Write"; + return NPERR_GENERIC_ERROR; + } + + if (!instanceData->fileBuf) { + instanceData->err << + "Error: no data written with NPP_StreamAsFile"; + return NPERR_GENERIC_ERROR; + } + if (strcmp(reinterpret_cast(instanceData->fileBuf), - reinterpret_cast(instanceData->streamBuf)) != 0) { + reinterpret_cast(instanceData->streamBuf))) { instanceData->err << "Error: data passed to NPP_Write and NPP_StreamAsFile differed"; }