From 4be9d1c209ceff9a1ef58518492e6cd1aef8bdec Mon Sep 17 00:00:00 2001 From: "av%netscape.com" Date: Wed, 1 Sep 1999 19:58:22 +0000 Subject: [PATCH] Fix for #9211 git-svn-id: svn://10.0.0.236/trunk@45481 18797224-902f-48f8-a5cc-f745e15eee43 --- .../plugin/base/src/nsPluginHostImpl.cpp | 41 ++++++++++++++++--- .../plugin/nglsrc/nsPluginHostImpl.cpp | 41 ++++++++++++++++--- 2 files changed, 70 insertions(+), 12 deletions(-) diff --git a/mozilla/modules/plugin/base/src/nsPluginHostImpl.cpp b/mozilla/modules/plugin/base/src/nsPluginHostImpl.cpp index 8d4bd75911c..dfe7e7a4873 100644 --- a/mozilla/modules/plugin/base/src/nsPluginHostImpl.cpp +++ b/mozilla/modules/plugin/base/src/nsPluginHostImpl.cpp @@ -1927,6 +1927,33 @@ nsPluginHostImpl::IsPluginEnabledForType(const char* aMimeType) return NS_ERROR_FAILURE; } +// check comma delimetered extensions +static int CompareExtensions(const char *aExtensionList, const char *aExtension) +{ + if((aExtensionList == nsnull) || (aExtension == nsnull)) + return -1; + + const char *pExt = aExtensionList; + char *pComma = strchr(pExt, ','); + + if(pComma == nsnull) + return strcmp(pExt, aExtension); + + while(pComma != nsnull) + { + int length = pComma - pExt; + if(0 == strncmp(pExt, aExtension, length)) + return 0; + + pComma++; + pExt = pComma; + pComma = strchr(pExt, ','); + } + + // the last one + return strcmp(pExt, aExtension); +} + NS_IMETHODIMP nsPluginHostImpl::IsPluginEnabledForExtension(const char* aExtension, const char* &aMimeType) { @@ -1947,12 +1974,14 @@ nsPluginHostImpl::IsPluginEnabledForExtension(const char* aExtension, const char for (cnt = 0; cnt < variants; cnt++) { - if (0 == strcmp(plugins->mExtensionsArray[cnt], aExtension)) - { - aMimeType = plugins->mMimeTypeArray[cnt]; - return NS_OK; - } - } + //if (0 == strcmp(plugins->mExtensionsArray[cnt], aExtension)) + // mExtensionsArray[cnt] could be not a single extension but rather a list separated by commas + if (0 == CompareExtensions(plugins->mExtensionsArray[cnt], aExtension)) + { + aMimeType = plugins->mMimeTypeArray[cnt]; + return NS_OK; + } + } if (cnt < variants) break; diff --git a/mozilla/modules/plugin/nglsrc/nsPluginHostImpl.cpp b/mozilla/modules/plugin/nglsrc/nsPluginHostImpl.cpp index 8d4bd75911c..dfe7e7a4873 100644 --- a/mozilla/modules/plugin/nglsrc/nsPluginHostImpl.cpp +++ b/mozilla/modules/plugin/nglsrc/nsPluginHostImpl.cpp @@ -1927,6 +1927,33 @@ nsPluginHostImpl::IsPluginEnabledForType(const char* aMimeType) return NS_ERROR_FAILURE; } +// check comma delimetered extensions +static int CompareExtensions(const char *aExtensionList, const char *aExtension) +{ + if((aExtensionList == nsnull) || (aExtension == nsnull)) + return -1; + + const char *pExt = aExtensionList; + char *pComma = strchr(pExt, ','); + + if(pComma == nsnull) + return strcmp(pExt, aExtension); + + while(pComma != nsnull) + { + int length = pComma - pExt; + if(0 == strncmp(pExt, aExtension, length)) + return 0; + + pComma++; + pExt = pComma; + pComma = strchr(pExt, ','); + } + + // the last one + return strcmp(pExt, aExtension); +} + NS_IMETHODIMP nsPluginHostImpl::IsPluginEnabledForExtension(const char* aExtension, const char* &aMimeType) { @@ -1947,12 +1974,14 @@ nsPluginHostImpl::IsPluginEnabledForExtension(const char* aExtension, const char for (cnt = 0; cnt < variants; cnt++) { - if (0 == strcmp(plugins->mExtensionsArray[cnt], aExtension)) - { - aMimeType = plugins->mMimeTypeArray[cnt]; - return NS_OK; - } - } + //if (0 == strcmp(plugins->mExtensionsArray[cnt], aExtension)) + // mExtensionsArray[cnt] could be not a single extension but rather a list separated by commas + if (0 == CompareExtensions(plugins->mExtensionsArray[cnt], aExtension)) + { + aMimeType = plugins->mMimeTypeArray[cnt]; + return NS_OK; + } + } if (cnt < variants) break;