[tbb-commits] [tor-browser/tor-browser-52.4.1esr-7.5-1] Bug 24052: Streamline handling of file:// resources

gk at torproject.org gk at torproject.org
Thu Nov 9 10:36:17 UTC 2017


commit c6e2b905b793c803c73b7d3e5a1a2926e34df8f2
Author: Georg Koppen <gk at torproject.org>
Date:   Fri Oct 27 20:40:57 2017 +0000

    Bug 24052: Streamline handling of file:// resources
    
    We should make sure restrictions regarding loading of file:// resources
    are adhered to more strictly, at least on *nix platforms.
    
    This is a workaround for
    https://bugzilla.mozilla.org/show_bug.cgi?id=1412081.
---
 netwerk/base/nsIOService.cpp                    | 8 ++++++++
 netwerk/protocol/file/nsFileProtocolHandler.cpp | 7 +++++++
 2 files changed, 15 insertions(+)

diff --git a/netwerk/base/nsIOService.cpp b/netwerk/base/nsIOService.cpp
index 0da79c18ae41..0cc67da7b18f 100644
--- a/netwerk/base/nsIOService.cpp
+++ b/netwerk/base/nsIOService.cpp
@@ -789,12 +789,20 @@ nsIOService::NewChannelFromURIWithProxyFlagsInternal(nsIURI* aURI,
         // if calling newChannel2() fails we try to fall back to
         // creating a new channel by calling NewChannel().
         if (NS_FAILED(rv)) {
+#ifdef XP_UNIX
+        if (rv == NS_ERROR_FILE_TARGET_DOES_NOT_EXIST) {
+            return rv;
+        } else {
+#endif
             rv = handler->NewChannel(aURI, getter_AddRefs(channel));
             NS_ENSURE_SUCCESS(rv, rv);
             // The protocol handler does not implement NewChannel2, so
             // maybe we need to wrap the channel (see comment in MaybeWrap
             // function).
             channel = nsSecCheckWrapChannel::MaybeWrap(channel, aLoadInfo);
+#ifdef XP_UNIX
+        }
+#endif
         }
     }
 
diff --git a/netwerk/protocol/file/nsFileProtocolHandler.cpp b/netwerk/protocol/file/nsFileProtocolHandler.cpp
index e55cb9d47460..c24c928b6f02 100644
--- a/netwerk/protocol/file/nsFileProtocolHandler.cpp
+++ b/netwerk/protocol/file/nsFileProtocolHandler.cpp
@@ -188,6 +188,13 @@ nsFileProtocolHandler::NewChannel2(nsIURI* uri,
                                    nsILoadInfo* aLoadInfo,
                                    nsIChannel** result)
 {
+#ifdef XP_UNIX
+    if (aLoadInfo && aLoadInfo->TriggeringPrincipal()) {
+      if (aLoadInfo->TriggeringPrincipal()->GetIsCodebasePrincipal()) {
+        return NS_ERROR_FILE_TARGET_DOES_NOT_EXIST;
+      }
+    }
+#endif
     nsFileChannel *chan = new nsFileChannel(uri);
     if (!chan)
         return NS_ERROR_OUT_OF_MEMORY;





More information about the tbb-commits mailing list