Fixed crash when calling nsJARInputStream from nsJARChannel.

This commit is contained in:
mstoltz%netscape.com 2000-04-05 00:12:20 +00:00
parent c8f26bc66c
commit 5c520e108c
4 changed files with 13 additions and 17 deletions

View File

@ -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)

View File

@ -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);

View File

@ -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;

View File

@ -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; }