mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-10 11:55:49 +00:00
Fixed crash when calling nsJARInputStream from nsJARChannel.
This commit is contained in:
parent
c8f26bc66c
commit
5c520e108c
@ -271,7 +271,7 @@ nsJAR::GetInputStream(const char *aFilename, nsIInputStream **result)
|
||||
{
|
||||
if (!result)
|
||||
return NS_OK;
|
||||
return CreateInputStream(aFilename, result);
|
||||
return CreateInputStream(aFilename, PR_TRUE, result);
|
||||
}
|
||||
|
||||
//-- The following #defines are used by ParseManifest()
|
||||
@ -412,20 +412,18 @@ nsJAR::GetCertificatePrincipal(const char* aFilename, nsIPrincipal** aPrincipal,
|
||||
//----------------------------------------------
|
||||
// nsJAR private implementation
|
||||
//----------------------------------------------
|
||||
|
||||
nsresult
|
||||
nsJAR::CreateInputStream(const char* aFilename, nsIInputStream **is)
|
||||
nsresult nsJAR::CreateInputStream(const char* aFilename, PRBool verify,
|
||||
nsIInputStream** result)
|
||||
{
|
||||
nsresult rv;
|
||||
nsJARInputStream* jis = nsnull;
|
||||
rv = nsJARInputStream::Create(nsnull, NS_GET_IID(nsIInputStream), (void**)&jis);
|
||||
if (!jis) return NS_ERROR_FAILURE;
|
||||
|
||||
rv = jis->Init(this, aFilename);
|
||||
rv = jis->Init(this, aFilename, verify);
|
||||
if (NS_FAILED(rv)) return NS_ERROR_FAILURE;
|
||||
|
||||
*is = (nsIInputStream*)jis;
|
||||
// NS_ADDREF(*is); // done by Create, above
|
||||
*result = (nsIInputStream*)jis;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
@ -435,7 +433,7 @@ nsJAR::LoadEntry(const char* aFilename, char** aBuf, PRUint32* aBufLen)
|
||||
//-- Get a stream for reading the manifest file
|
||||
nsresult rv;
|
||||
nsCOMPtr<nsIInputStream> manifestStream;
|
||||
rv = CreateInputStream(aFilename, getter_AddRefs(manifestStream));
|
||||
rv = CreateInputStream(aFilename, PR_FALSE, getter_AddRefs(manifestStream));
|
||||
if (NS_FAILED(rv)) return NS_ERROR_FILE_TARGET_DOES_NOT_EXIST;
|
||||
|
||||
//-- Read the manifest file into memory
|
||||
@ -450,7 +448,6 @@ nsJAR::LoadEntry(const char* aFilename, char** aBuf, PRUint32* aBufLen)
|
||||
if (bytesRead != len)
|
||||
rv = NS_ERROR_FILE_CORRUPTED;
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
(void)manifestStream->Close();
|
||||
buf[len] = '\0'; //Null-terminate the buffer
|
||||
*aBuf = buf;
|
||||
if (aBufLen)
|
||||
|
@ -73,8 +73,6 @@ class nsJAR : public nsIZipReader
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
NS_DECL_NSIZIPREADER
|
||||
|
||||
friend class nsJARInputStream;
|
||||
|
||||
private:
|
||||
//-- Private data members
|
||||
@ -84,7 +82,8 @@ class nsJAR : public nsIZipReader
|
||||
PRBool step1Complete; // True if manifest has been parsed
|
||||
|
||||
//-- Private functions
|
||||
nsresult CreateInputStream(const char* aFilename, nsIInputStream** is);
|
||||
nsresult CreateInputStream(const char* aFilename, PRBool verify,
|
||||
nsIInputStream** result);
|
||||
nsresult LoadEntry(const char* aFilename, char** aBuf,
|
||||
PRUint32* aBufLen = nsnull);
|
||||
PRInt32 ReadLine(const char** src);
|
||||
|
@ -64,13 +64,13 @@ nsJARInputStream::Read(char* buf, PRUint32 count, PRUint32 *bytesRead)
|
||||
NS_IMETHODIMP
|
||||
nsJARInputStream::Close()
|
||||
{
|
||||
NS_RELEASE(mJAR);
|
||||
NS_IF_RELEASE(mJAR);
|
||||
delete mReadInfo;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsJARInputStream::Init(nsJAR* aJAR, const char* aFilename)
|
||||
nsJARInputStream::Init(nsJAR* aJAR, const char* aFilename, PRBool verify)
|
||||
{
|
||||
if (!aFilename)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
@ -83,8 +83,8 @@ nsJARInputStream::Init(nsJAR* aJAR, const char* aFilename)
|
||||
if (result != ZIP_OK)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
// Pass the file (already in memory) on to the JAR parser
|
||||
if (aJAR)
|
||||
// Pass the file (already in memory) on to the signature verifier
|
||||
if (verify)
|
||||
return aJAR->VerifyEntry(mEntryName, mReadInfo->mFileBuffer,
|
||||
mReadInfo->mItem->realsize);
|
||||
return NS_OK;
|
||||
|
@ -56,7 +56,7 @@ class nsJARInputStream : public nsIInputStream
|
||||
Create(nsISupports* aOuter, const nsIID& aIID, void* *aResult);
|
||||
|
||||
nsresult
|
||||
Init(nsJAR* jar, const char* aFilename);
|
||||
Init(nsJAR* jar, const char* aFilename, PRBool verify);
|
||||
|
||||
protected:
|
||||
nsZipArchive* Zip() { return &mJAR->mZip; }
|
||||
|
Loading…
Reference in New Issue
Block a user