File firefox-381370.patch of Package kompozer

diff --git a/mozilla/caps/src/nsScriptSecurityManager.cpp b/mozilla/caps/src/nsScriptSecurityManager.cpp
index 9ca48b4..d871c52 100644
--- a/mozilla/caps/src/nsScriptSecurityManager.cpp
+++ b/mozilla/caps/src/nsScriptSecurityManager.cpp
@@ -1478,6 +1478,27 @@ nsScriptSecurityManager::CheckLoadURIWithPrincipal(nsIPrincipal* aPrincipal,
         nsCOMPtr<nsIPrefBranch> prefService =
             do_GetService(NS_PREFSERVICE_CONTRACTID);
         if (prefService) {
+            PRBool allow_anyway = PR_FALSE;
+            nsresult allowed_result;
+            nsXPIDLCString allowed_gnomeVFSProtocols;
+            allowed_result = prefService->GetCharPref("network.gnomevfs.allowed-protocols",
+                                                      getter_Copies(allowed_gnomeVFSProtocols));
+            if (NS_SUCCEEDED(allowed_result))
+                allowed_gnomeVFSProtocols.StripWhitespace();
+            else
+                allowed_gnomeVFSProtocols.Truncate();
+            
+            nsCAutoString allowed_scheme(targetScheme);
+            allowed_scheme.Append(':');
+            nsACString::const_iterator allowed_begin, allowed_end, allowed_iter;
+            allowed_gnomeVFSProtocols.BeginReading(allowed_begin);
+            allowed_gnomeVFSProtocols.EndReading(allowed_end);
+            allowed_iter = allowed_begin;
+            if (CaseInsensitiveFindInReadable(allowed_scheme, allowed_iter, allowed_end) &&
+                (allowed_iter == allowed_begin || *(--allowed_iter) == ',')) {
+                allow_anyway = PR_TRUE;
+            }
+            
             nsXPIDLCString gnomeVFSProtocols;
             nsresult result =
                 prefService->GetCharPref("network.gnomevfs.supported-protocols",
@@ -1494,11 +1515,14 @@ nsScriptSecurityManager::CheckLoadURIWithPrincipal(nsIPrincipal* aPrincipal,
             gnomeVFSProtocols.BeginReading(begin);
             gnomeVFSProtocols.EndReading(end);
             iter = begin;
-            if (CaseInsensitiveFindInReadable(scheme, iter, end) &&
-                (iter == begin || *(--iter) == ',')) {
-                // Deny this load
-                ReportError(nsnull, errorTag, sourceURI, aTargetURI);
-                return NS_ERROR_DOM_BAD_URI;
+            if (CaseInsensitiveFindInReadable(scheme, iter, end) && (iter == begin || *(--iter) == ',')) {
+                // Deny this load iff allow_anyway is false
+                if (allow_anyway == PR_FALSE) {
+                    ReportError(nsnull, errorTag, sourceURI, aTargetURI);
+                    return NS_ERROR_DOM_BAD_URI;
+                } else {
+                    return NS_OK;
+                }
             }
         }
     }
diff --git a/mozilla/modules/libpref/src/init/all.js b/mozilla/modules/libpref/src/init/all.js
index f9651a1..539540a 100644
--- a/mozilla/modules/libpref/src/init/all.js
+++ b/mozilla/modules/libpref/src/init/all.js
@@ -2410,4 +2410,5 @@ pref("print.print_command", "lp -c -s ${MOZ_PRINTER_NAME:+'-d '}${MOZ_PRINTER_NA
 
 #ifdef MOZ_X11
 pref("network.gnomevfs.supported-protocols", "smb:,sftp:");
+pref("network.gnomevfs.allowed-protocols", "");
 #endif
openSUSE Build Service is sponsored by