Fixes top crash in nsFileTransport::Process [nsFileTransport.cpp, line 753] and hoping to fix the move-email-crash-issue. This change inforces that a Async(Read|Write) of the file or socket transport must have a valid mProvider|mListener. sr=darin@netscape.com, r=pavlov, bug=107214

This commit is contained in:
dougt%netscape.com 2002-06-04 05:36:15 +00:00
Родитель 06917f5972
Коммит 060a87578f
2 изменённых файлов: 23 добавлений и 9 удалений

Просмотреть файл

@ -509,7 +509,8 @@ nsFileTransport::AsyncRead(nsIStreamListener *aListener,
if (mXferState != CLOSED)
return NS_ERROR_IN_PROGRESS;
NS_ASSERTION(aListener, "need to supply an nsIStreamListener");
NS_ENSURE_TRUE(aListener, NS_ERROR_INVALID_ARG);
rv = NS_NewStreamListenerProxy(getter_AddRefs(mListener),
aListener, nsnull,
mBufferSegmentSize,
@ -555,7 +556,8 @@ nsFileTransport::AsyncWrite(nsIStreamProvider *aProvider,
if (mXferState != CLOSED)
return NS_ERROR_IN_PROGRESS;
NS_ASSERTION(aProvider, "need to supply an nsIStreamProvider");
NS_ENSURE_TRUE(aProvider, NS_ERROR_INVALID_ARG);
rv = NS_NewStreamProviderProxy(getter_AddRefs(mProvider),
aProvider, nsnull,
mBufferSegmentSize,
@ -746,9 +748,13 @@ nsFileTransport::Process(nsIProgressEventSink *progressSink)
// Give the listener a chance to read at most transferAmt bytes from
// the source input stream.
nsresult status = mListener->OnDataAvailable(this, mContext,
mSourceWrapper,
mOffset, transferAmt);
nsresult status = NS_ERROR_NOT_INITIALIZED;
if (mListener)
status = mListener->OnDataAvailable(this,
mContext,
mSourceWrapper,
mOffset,
transferAmt);
if (NS_SUCCEEDED(status)) {
// Find out what was read.
@ -947,9 +953,13 @@ nsFileTransport::Process(nsIProgressEventSink *progressSink)
PRUint32 total = 0, offset = mSinkWrapper->GetBytesWritten();
// Ask the provider for data
nsresult status = mProvider->OnDataWritable(this, mContext,
mSinkWrapper,
mOffset, transferAmt);
nsresult status = NS_ERROR_NOT_INITIALIZED;
if (mProvider)
mProvider->OnDataWritable(this,
mContext,
mSinkWrapper,
mOffset,
transferAmt);
if (NS_SUCCEEDED(status)) {
// Find out what was written.

Просмотреть файл

@ -1652,6 +1652,8 @@ nsSocketTransport::AsyncRead(nsIStreamListener* aListener,
if (GetReadType() != eSocketRead_None)
rv = NS_ERROR_IN_PROGRESS;
NS_ENSURE_TRUE(aListener, NS_ERROR_INVALID_ARG);
nsCOMPtr<nsIStreamListener> listener;
nsCOMPtr<nsIRequestObserver> observer;
@ -1730,6 +1732,8 @@ nsSocketTransport::AsyncWrite(nsIStreamProvider* aProvider,
if (GetWriteType() != eSocketWrite_None)
rv = NS_ERROR_IN_PROGRESS;
NS_ENSURE_TRUE(aProvider, NS_ERROR_INVALID_ARG);
nsCOMPtr<nsIStreamProvider> provider;
nsCOMPtr<nsIRequestObserver> observer;