Attachment #288233: v3 for bug #369814

View | Details | Raw Unified | Return to bug 369814
Collapse All | Expand All

(-)a/docshell/base/Makefile.in (+1 lines)
Line     Link Here 
 Lines 85-90   REQUIRES = xpcom \ Link Here 
85
		  windowwatcher \
85
		  windowwatcher \
86
		  imglib2 \
86
		  imglib2 \
87
		  mimetype \
87
		  mimetype \
88
		  jar \
88
		  $(NULL)
89
		  $(NULL)
89
90
90
SDK_XPIDLSRCS = \
91
SDK_XPIDLSRCS = \
(-)a/docshell/base/nsDocShell.cpp (+21 lines)
Line     Link Here 
 Lines 168-173    Link Here 
168
168
169
#include "nsITextToSubURI.h"
169
#include "nsITextToSubURI.h"
170
170
171
#include "nsIJARChannel.h"
172
171
#include "prlog.h"
173
#include "prlog.h"
172
#include "prmem.h"
174
#include "prmem.h"
173
175
 Lines 1314-1319   nsDocShell::GetAllowJavascript(PRBool * Link Here 
1314
    NS_ENSURE_ARG_POINTER(aAllowJavascript);
1316
    NS_ENSURE_ARG_POINTER(aAllowJavascript);
1315
1317
1316
    *aAllowJavascript = mAllowJavascript;
1318
    *aAllowJavascript = mAllowJavascript;
1319
    if (!mAllowJavascript) {
1320
        return NS_OK;
1321
    }
1322
1323
    // Disallow scripts coming from a remote JAR file with an invalid type.
1324
    nsCOMPtr<nsIChannel> channel;
1325
    GetCurrentDocumentChannel(getter_AddRefs(channel));
1326
    if (!channel) {
1327
        return NS_OK;
1328
    }
1329
1330
    nsCOMPtr<nsIJARChannel> jarChannel = do_QueryInterface(channel);
1331
    if (!jarChannel) {
1332
        return NS_OK;
1333
    }
1334
1335
    PRBool deny;
1336
    *aAllowJavascript = NS_SUCCEEDED(jarChannel->GetDenyScripts(&deny))
1337
                        && !deny;
1317
    return NS_OK;
1338
    return NS_OK;
1318
}
1339
}
1319
1340
(-)a/modules/libjar/nsIJARChannel.idl (-1 / +6 lines)
Line     Link Here 
 Lines 37-43    Link Here 
37
37
38
#include "nsIChannel.idl"
38
#include "nsIChannel.idl"
39
39
40
[scriptable, uuid(c7e410d1-85f2-11d3-9f63-006008a6efe9)]
40
[scriptable, uuid(6e6cc56d-51eb-4299-a795-dcfd1229ab3d)]
41
interface nsIJARChannel : nsIChannel 
41
interface nsIJARChannel : nsIChannel 
42
{
42
{
43
    /**
44
     * Returns TRUE if scripting should be disabled for documents loaded
45
     * from this channel.
46
     */
47
    readonly attribute boolean denyScripts;
43
};
48
};
(-)a/modules/libjar/nsJARChannel.cpp (-1 / +39 lines)
Line     Link Here 
 Lines 222-227   nsJARChannel::nsJARChannel() Link Here 
222
    , mLoadFlags(LOAD_NORMAL)
222
    , mLoadFlags(LOAD_NORMAL)
223
    , mStatus(NS_OK)
223
    , mStatus(NS_OK)
224
    , mIsPending(PR_FALSE)
224
    , mIsPending(PR_FALSE)
225
    , mDenyScripts(PR_TRUE)
225
    , mJarInput(nsnull)
226
    , mJarInput(nsnull)
226
{
227
{
227
#if defined(PR_LOGGING)
228
#if defined(PR_LOGGING)
 Lines 325-330   nsJARChannel::EnsureJarInput(PRBool bloc Link Here 
325
    }
326
    }
326
327
327
    if (mJarFile) {
328
    if (mJarFile) {
329
        mDenyScripts = PR_FALSE;
330
328
        // NOTE: we do not need to deal with mSecurityInfo here,
331
        // NOTE: we do not need to deal with mSecurityInfo here,
329
        // because we're loading from a local file
332
        // because we're loading from a local file
330
        rv = CreateJarInput(gJarHandler->JarCache());
333
        rv = CreateJarInput(gJarHandler->JarCache());
 Lines 339-345   nsJARChannel::EnsureJarInput(PRBool bloc Link Here 
339
        if (NS_SUCCEEDED(rv))
342
        if (NS_SUCCEEDED(rv))
340
            rv = NS_OpenURI(mDownloader, nsnull, mJarBaseURI, nsnull,
343
            rv = NS_OpenURI(mDownloader, nsnull, mJarBaseURI, nsnull,
341
                            mLoadGroup, mCallbacks,
344
                            mLoadGroup, mCallbacks,
342
                            mLoadFlags & ~LOAD_DOCUMENT_URI);
345
                            mLoadFlags & ~(LOAD_DOCUMENT_URI | LOAD_CALL_CONTENT_SNIFFERS));
343
    }
346
    }
344
    return rv;
347
    return rv;
345
348
 Lines 642-647   nsJARChannel::Open(nsIInputStream **stre Link Here 
642
    NS_ENSURE_TRUE(!mJarInput, NS_ERROR_IN_PROGRESS);
645
    NS_ENSURE_TRUE(!mJarInput, NS_ERROR_IN_PROGRESS);
643
    NS_ENSURE_TRUE(!mIsPending, NS_ERROR_IN_PROGRESS);
646
    NS_ENSURE_TRUE(!mIsPending, NS_ERROR_IN_PROGRESS);
644
647
648
    mJarFile = nsnull;
649
    mDenyScripts = PR_TRUE;
650
645
    nsresult rv = EnsureJarInput(PR_TRUE);
651
    nsresult rv = EnsureJarInput(PR_TRUE);
646
    if (NS_FAILED(rv)) return rv;
652
    if (NS_FAILED(rv)) return rv;
647
653
 Lines 664-669   nsJARChannel::AsyncOpen(nsIStreamListene Link Here 
664
    NS_ENSURE_ARG_POINTER(listener);
670
    NS_ENSURE_ARG_POINTER(listener);
665
    NS_ENSURE_TRUE(!mIsPending, NS_ERROR_IN_PROGRESS);
671
    NS_ENSURE_TRUE(!mIsPending, NS_ERROR_IN_PROGRESS);
666
672
673
    mJarFile = nsnull;
674
    mDenyScripts = PR_TRUE;
675
667
    // Initialize mProgressSink
676
    // Initialize mProgressSink
668
    NS_QueryNotificationCallbacks(mCallbacks, mLoadGroup, mProgressSink);
677
    NS_QueryNotificationCallbacks(mCallbacks, mLoadGroup, mProgressSink);
669
678
 Lines 685-690   nsJARChannel::AsyncOpen(nsIStreamListene Link Here 
685
    mListener = listener;
694
    mListener = listener;
686
    mListenerContext = ctx;
695
    mListenerContext = ctx;
687
    mIsPending = PR_TRUE;
696
    mIsPending = PR_TRUE;
697
    return NS_OK;
698
}
699
700
//-----------------------------------------------------------------------------
701
// nsIJARChannel
702
//-----------------------------------------------------------------------------
703
NS_IMETHODIMP
704
nsJARChannel::GetDenyScripts(PRBool *denyScripts)
705
{
706
    *denyScripts = mDenyScripts;
688
    return NS_OK;
707
    return NS_OK;
689
}
708
}
690
709
 Lines 717-722   nsJARChannel::OnDownloadComplete(nsIDown Link Here 
717
            channel->GetURI(getter_AddRefs(innerURI));
736
            channel->GetURI(getter_AddRefs(innerURI));
718
            mJarURI->SetJARFile(innerURI);
737
            mJarURI->SetJARFile(innerURI);
719
        }
738
        }
739
740
        // We only want to run scripts if the server really intended to
741
        // send us a JAR file.  Check the server-supplied content type for
742
        // a JAR type.
743
        nsCAutoString contentType;
744
        nsCOMPtr<nsIHttpChannel> httpChannel(do_QueryInterface(channel));
745
        if (httpChannel) {
746
            nsCAutoString header;
747
            httpChannel->GetResponseHeader(NS_LITERAL_CSTRING("Content-Type"),
748
                                           header);
749
750
            nsCAutoString charset;
751
            NS_ParseContentType(header, contentType, charset);
752
        } else {
753
            channel->GetContentType(contentType);
754
        }
755
756
        mDenyScripts = !contentType.EqualsLiteral("application/java-archive") &&
757
                       !contentType.EqualsLiteral("application/x-jar");
720
    }
758
    }
721
759
722
    if (NS_SUCCEEDED(status)) {
760
    if (NS_SUCCEEDED(status)) {
(-)a/modules/libjar/nsJARChannel.h (-1 / +2 lines)
Line     Link Here 
 Lines 97-103   private: Link Here 
97
    PRInt32                         mContentLength;
97
    PRInt32                         mContentLength;
98
    PRUint32                        mLoadFlags;
98
    PRUint32                        mLoadFlags;
99
    nsresult                        mStatus;
99
    nsresult                        mStatus;
100
    PRBool                          mIsPending;
100
    PRPackedBool                    mIsPending;
101
    PRPackedBool                    mDenyScripts;
101
102
102
    nsJARInputThunk                *mJarInput;
103
    nsJARInputThunk                *mJarInput;
103
    nsCOMPtr<nsIStreamListener>     mDownloader;
104
    nsCOMPtr<nsIStreamListener>     mDownloader;

Return to bug 369814