Closed
Bug 266532
Opened 20 years ago
Closed 11 years ago
###!!! ASSERTION: unexpected progress values: 'progress <= progressMax', file r:/mozilla/netwerk/protocol/http/src/nsHttpChannel.cpp, line 3796
Categories
(Core :: Networking: HTTP, defect)
Core
Networking: HTTP
Tracking
()
RESOLVED
FIXED
mozilla29
People
(Reporter: timeless, Assigned: mcmanus)
References
()
Details
(Keywords: assertion, reproducible)
Attachments
(1 file)
2.45 KB,
patch
|
jduell.mcbugs
:
review+
|
Details | Diff | Splinter Review |
###!!! ASSERTION: unexpected progress values: 'progress <= progressMax', file
r:/mozilla/netwerk/protocol/http/src/nsHttpChannel.cpp, line 3796
Break: at file r:/mozilla/netwerk/protocol/http/src/nsHttpChannel.cpp, line 3796
xpcom_core.dll!nsDebug::Assertion(const char * aStr=0x012db8a8, const char *
aExpr=0x012db8c4, const char * aFile=0x012dae50, int aLine=0x00000ed4) Line 109 C++
necko.dll!nsHttpChannel::OnDataAvailable(nsIRequest * request=0x031fb740,
nsISupports * ctxt=0x00000000, nsIInputStream * input=0x034dc330, unsigned int
offset=0x00000000, unsigned int count=0x0000052d) Line 3796 + 0x2d C++
> necko.dll!nsInputStreamPump::OnStateTransfer() Line 438 C++
necko.dll!nsInputStreamPump::OnInputStreamReady(nsIAsyncInputStream *
stream=0x034dc330) Line 339 C++
xpcom_core.dll!nsInputStreamReadyEvent::EventHandler(PLEvent *
plevent=0x0326e194) Line 119 C++
xpcom_core.dll!PL_HandleEvent(PLEvent * self=0x0326e194) Line 693 C
xpcom_core.dll!PL_ProcessPendingEvents(PLEventQueue * self=0x01062af8) Line 628 C
xpcom_core.dll!_md_EventReceiverProc(HWND__ * hwnd=0x00272420, unsigned int
uMsg=0x0000c14e, unsigned int wParam=0x00000000, long lParam=0x01062af8) Line
1434 C
user32.dll!77d43a50()
user32.dll!77d43b1f()
user32.dll!GetMessageW() + 0x125
user32.dll!DispatchMessageW() + 0xb
appshell.dll!nsAppShellService::Run() Line 484 C++
mozilla.exe!main1(int argc=0x00000000, char * * argv=0x80000000, nsISupports *
nativeApp=0x031fb744) Line 1336 C++
mozilla.exe!main(int argc=0x00000001, char * * argv=0x003f7c10) Line 1827 +
0x16 C++
mozilla.exe!mainCRTStartup() Line 400 + 0x11 C
kernel32.dll!TermsrvAppInstallMode() + 0x269
+ progressMax {mValue=0x0000000000000437 } nsTInt64<unsigned __int64>
+ progress {mValue=0x000000000000052d } nsTInt64<unsigned __int64>
- this 0x031fb744 {mRefCnt={mValue=0x00000002 }
_mOwningThread={mThread=0x003f5c80 } mState=0x00000002 ...} nsInputStreamPump *
const
|+ nsIInputStreamPump {...} nsIInputStreamPump
|+ nsIInputStreamCallback {...} nsIInputStreamCallback
|+ mRefCnt {mValue=0x00000002 } nsAutoRefCnt
|+ _mOwningThread {mThread=0x003f5c80 } nsAutoOwningThread
| mState 0x00000002 unsigned int
|+ mLoadGroup {mRawPtr=0x00000000 } nsCOMPtr<nsILoadGroup>
|- mListener {mRawPtr=0x02d41930 {mRefCnt={mValue=0x00000002 }
_mOwningThread={mThread=0x003f5c80 } mOriginalURI={mRawPtr=0x03549558
{mRefCnt={...} _mOwningThread={...} mSpec={...} ...} } ...} }
nsCOMPtr<nsIStreamListener>
|\- mRawPtr 0x02d41930 {mRefCnt={mValue=0x00000002 }
_mOwningThread={mThread=0x003f5c80 } mOriginalURI={mRawPtr=0x03549558
{mRefCnt={mValue=0x00000003 } _mOwningThread={mThread=0x003f5c80 } mSpec={...}
...} } ...} nsIStreamListener *
| |- [nsHttpChannel] {mRefCnt={mValue=0x00000002 }
_mOwningThread={mThread=0x003f5c80 } mOriginalURI={mRawPtr=0x03549558
{mRefCnt={mValue=0x00000003 } _mOwningThread={mThread=0x003f5c80 } mSpec={...}
...} } ...} nsHttpChannel
| ||+ nsIHttpChannel {...} nsIHttpChannel
| ||+ nsIHttpChannelInternal {...} nsIHttpChannelInternal
| ||+ nsIStreamListener {...} nsIStreamListener
| ||+ nsICachingChannel {...} nsICachingChannel
| ||+ nsIUploadChannel {...} nsIUploadChannel
| ||+ nsICacheListener {...} nsICacheListener
| ||+ nsIEncodedChannel {...} nsIEncodedChannel
| ||+ nsITransportEventSink {...} nsITransportEventSink
| ||+ nsIResumableChannel {...} nsIResumableChannel
| ||+ mRefCnt {mValue=0x00000002 } nsAutoRefCnt
| ||+ _mOwningThread {mThread=0x003f5c80 } nsAutoOwningThread
| ||+ mOriginalURI {mRawPtr=0x03549558 {mRefCnt={mValue=0x00000003 }
_mOwningThread={mThread=0x003f5c80 } mSpec={...} ...} } nsCOMPtr<nsIURI>
| ||+ mURI {mRawPtr=0x03261c88 {mRefCnt={mValue=0x00000001 }
_mOwningThread={mThread=0x003f5c80 } mSpec={...} ...} } nsCOMPtr<nsIURI>
| ||+ mDocumentURI {mRawPtr=0x03e87cc0 {mRefCnt={mValue=0x0000000c }
_mOwningThread={mThread=0x003f5c80 } mSpec={...} ...} } nsCOMPtr<nsIURI>
| ||+ mListener {mRawPtr=0x03f90a28 {mRefCnt={mValue=0x00000001 }
_mOwningThread={mThread=0x003f5c80 } mInputTee={mRawPtr=0x00000000 } ...} }
nsCOMPtr<nsIStreamListener>
| ||+ mListenerContext {...} nsCOMPtr<nsISupports>
| ||+ mLoadGroup {mRawPtr=0x00000000 } nsCOMPtr<nsILoadGroup>
| ||+ mOwner {...} nsCOMPtr<nsISupports>
| ||+ mCallbacks {mRawPtr=0x043592c0 } nsCOMPtr<nsIInterfaceRequestor>
| ||+ mProgressSink {mRawPtr=0x029baf80 {mRefCnt={mValue=0x0000001b }
_mOwningThread={mThread=0x003f5c80 } mDocumentRequest={mRawPtr=0x02ca4ff0
{mRefCnt={...} _mOwningThread={...} mOriginalURI={...} ...} } ...} }
nsCOMPtr<nsIProgressEventSink>
| ||+ mHttpEventSink {mRawPtr=0x029baf8c {mRefCnt={mValue=0x0000001b }
_mOwningThread={mThread=0x003f5c80 } mDocumentRequest={mRawPtr=0x02ca4ff0
{mRefCnt={...} _mOwningThread={...} mOriginalURI={...} ...} } ...} }
nsCOMPtr<nsIHttpEventSink>
| ||+ mUploadStream {mRawPtr=0x00000000 } nsCOMPtr<nsIInputStream>
| ||+ mReferrer {mRawPtr=0x031b9038 {mRefCnt={mValue=0x00000001 }
_mOwningThread={mThread=0x003f5c80 } mSpec={...} ...} } nsCOMPtr<nsIURI>
| ||+ mSecurityInfo {...} nsCOMPtr<nsISupports>
| ||+ mEventQ {mRawPtr=0x01062a38 {mRefCnt={mValue=0x0000001f }
_mOwningThread={mThread=0x003f5c80 } mEventQueue=0x01062af8 {name=0x00390c08
"Thread event queue..." queue={next=0x039effa0 prev=0x04387b38 }
monitor=0x01062b48 ...} ...} } nsCOMPtr<nsIEventQueue>
| ||- mRequestHead {mHeaders={mHeaders={mAutoBuf=0x02d41994 "" } }
mMethod={_val=0x012da804 "GET" } mVersion=0x0b '␋' ...} nsHttpRequestHead
| |||+ mHeaders {mHeaders={mAutoBuf=0x02d41994 "" } } nsHttpHeaderArray
| |||+ mMethod {_val=0x012da804 "GET" } nsHttpAtom
| ||| mVersion 0x0b '␋' unsigned char
| ||\- mRequestURI {...} nsCString
| || \- nsCSubstring {...} nsCSubstring
| || \- nsACString {mVTable=0x00394a58 const nsObsoleteACStringThunk::`vftable'
mData=0x04119b98
"/?0.6883918567393155&s=130479&im=103&r=http%3A//webtools.mozilla.org/buster/test_url_27.html&pg=http%3A//www.dp.ru/index.php&c=Y&j=N&wh=1600x1200&px=16&js=1.3&"
mLength=0x0000009f ...} nsACString
| || | mVTable 0x00394a58 const nsObsoleteACStringThunk::`vftable' const void *
| || |+ mData 0x04119b98
"/?0.6883918567393155&s=130479&im=103&r=http%3A//webtools.mozilla.org/buster/test_url_27.html&pg=http%3A//www.dp.ru/index.php&c=Y&j=N&wh=1600x1200&px=16&js=1.3&"
char *
| || | mLength 0x0000009f unsigned int
| || \ mFlags 0x00000005 unsigned int
| ||- mResponseHead 0x03f907c0 {mHeaders={mHeaders={mAutoBuf=0x03f907c8 "" } }
mVersion=0x0b '␋' mStatus=0x00c8 ...} nsHttpResponseHead *
| |||- mHeaders {mHeaders={mAutoBuf=0x03f907c8 "" } } nsHttpHeaderArray
| |||\- mHeaders {mAutoBuf=0x03f907c8 "" } nsAutoVoidArray
| ||| |- nsVoidArray {mImpl=0x039f02b0 {mBits=0x80000010 mCount=0x0000000d
mArray=0x039f02b8 } } nsVoidArray
| ||| ||+ __vfptr 0x00387ca4 const nsAutoVoidArray::`vftable' *
| ||| |\- mImpl 0x039f02b0 {mBits=0x80000010 mCount=0x0000000d
mArray=0x039f02b8 } nsVoidArray::Impl *
| ||| | | mBits 0x80000010 unsigned int
| ||| | | mCount 0x0000000d int
| ||| | \+ mArray 0x039f02b8 void * [1]
| ||| \+ mAutoBuf 0x03f907c8 "" char [40]
| ||| mVersion 0x0b '␋' unsigned char
| ||| mStatus 0x00c8 unsigned short
| |||+ mStatusText {...} nsCString
| ||| mContentLength 0x0000000000000437 __int64
| |||- mContentType {...} nsCString
| |||\- nsCSubstring {...} nsCSubstring
| ||| \- nsACString {mVTable=0x00394a58 const nsObsoleteACStringThunk::`vftable'
mData=0x02960a48 "image/gif" mLength=0x00000009 ...} nsACString
| ||| | mVTable 0x00394a58 const nsObsoleteACStringThunk::`vftable' const void *
| ||| |+ mData 0x02960a48 "image/gif" char *
| ||| | mLength 0x00000009 unsigned int
| ||| \ mFlags 0x00000005 unsigned int
| |||+ mContentCharset {...} nsCString
| ||| mCacheControlNoStore 0x00 unsigned char
| ||| mCacheControlNoCache 0x01 '␁' unsigned char
| ||\ mPragmaNoCache 0x01 '␁' unsigned char
| ||+ mTransactionPump {mRawPtr=0x031fb740 {mRefCnt={mValue=0x00000002 }
_mOwningThread={mThread=0x003f5c80 } mState=0x00000002 ...} }
nsCOMPtr<nsIInputStreamPump>
| ||+ mTransaction 0x034cccb8 {mRefCnt={mValue=0x00000001 }
_mOwningThread={mThread=0x003f5c80 } mCallbacks={mRawPtr=0x043592c0 } ...}
nsHttpTransaction *
| ||+ mConnectionInfo 0x01912e48 {mRef=0x00000003 mHashKey={...} mHost={...}
...} nsHttpConnectionInfo *
| ||+ mSpec {...} nsCString
| || mLoadFlags 0x00040000 unsigned int
| || mStatus 0x00000000 unsigned int
| ||+ mLogicalOffset {mValue=0x0000000000000000 } nsTInt64<unsigned __int64>
| || mCaps 0x01 '␁' unsigned char
| ||+ mContentTypeHint {...} nsCString
| ||+ mContentCharsetHint {...} nsCString
| ||+ mCacheEntry {mRawPtr=0x03aa8700 {mRefCnt={mValue=0x00000002 }
_mOwningThread={mThread=0x003f5c80 } mCacheEntry=0x02bb9f38 {mKey=0x04010ef0
mFetchCount=0x00000001 mLastFetched=0x41811ee5 ...} ...} }
nsCOMPtr<nsICacheEntryDescriptor>
| ||+ mCachePump {mRawPtr=0x00000000 } nsCOMPtr<nsIInputStreamPump>
| ||+ mCachedResponseHead 0x00000000 {mHeaders={mHeaders={mAutoBuf=0x00000008
<Bad Ptr> } } mVersion=??? mStatus=??? ...} nsHttpResponseHead *
| || mCacheAccess 0x00000002 int
| || mPostID 0x00000000 unsigned int
| || mRequestTime 0x41811ee5 unsigned int
| ||+ mAuthContinuationState 0x00000000 nsISupports *
| ||+ mAuthType {...} nsCString
| ||+ mIdent {mUser=0x00000000 <Bad Ptr> mPass=0x00000000 <Bad Ptr>
mDomain=0x00000000 <Bad Ptr> } nsHttpAuthIdentity
| ||+ mProxyIdent {mUser=0x00000000 <Bad Ptr> mPass=0x00000000 <Bad Ptr>
mDomain=0x00000000 <Bad Ptr> } nsHttpAuthIdentity
| ||+ mEntityID {...} nsCString
| || mStartPos 0xffffffffffffffff unsigned __int64
| || mRedirectionLimit 0x13 '␓' unsigned char
| || mIsPending 0x00000001 unsigned int
| || mApplyConversion 0x00000001 unsigned int
| || mAllowPipelining 0x00000001 unsigned int
| || mCachedContentIsValid 0x00000000 unsigned int
| || mCachedContentIsPartial 0x00000000 unsigned int
| || mResponseHeadersModified 0x00000000 unsigned int
| || mCanceled 0x00000000 unsigned int
| || mTransactionReplaced 0x00000000 unsigned int
| || mUploadStreamHasHeaders 0x00000000 unsigned int
| || mAuthRetryPending 0x00000000 unsigned int
| || mSuppressDefensiveAuth 0x00000000 unsigned int
| |\ mResuming 0x00000000 unsigned int
| \+ nsIRequestObserver {...} nsIRequestObserver
|+ mListenerContext {...} nsCOMPtr<nsISupports>
|+ mEventQ {mRawPtr=0x01062a38 {mRefCnt={mValue=0x0000001f }
_mOwningThread={mThread=0x003f5c80 } mEventQueue=0x01062af8 {name=0x00390c08
"Thread event queue..." queue={next=0x039effa0 prev=0x04387b38 }
monitor=0x01062b48 ...} ...} } nsCOMPtr<nsIEventQueue>
|+ mStream {mRawPtr=0x00000000 } nsCOMPtr<nsIInputStream>
|+ mAsyncStream {mRawPtr=0x034dc330 {mPipe=0x034dc320
{mRefCnt={mValue=0x00000005 } _mOwningThread={mThread=0x003f5c80 }
mInput={mPipe=0x034dc320 mReaderRefCnt=0x00000004 mLogicalOffset={...} ...} ...}
mReaderRefCnt=0x00000004 mLogicalOffset={mValue=0x0000000000000000 } ...} }
nsCOMPtr<nsIAsyncInputStream>
|+ mStreamOffset {mValue=0x0000000000000000 } nsTInt64<unsigned __int64>
|+ mStreamLength {mValue=0xffffffffffffffff } nsTInt64<unsigned __int64>
| mSegSize 0x00000000 unsigned int
| mSegCount 0x00000000 unsigned int
| mStatus 0x00000000 unsigned int
| mSuspendCount 0x00000000 unsigned int
| mLoadFlags 0x00000000 unsigned int
| mIsPending 0xcd 'Í' unsigned char
| mWaiting 0x01 '␁' unsigned char
\ mCloseWhenDone 0x00 unsigned char
TestProtocols "http://hb.lycos.com/header?VID=6105&LHIG=1&ord=178853"
44 <= 43
TestProtocols "http://servedby.advertising.com/site=0000195695/mnum=0000252367/c
str=58087413=_42522e52,3691142943,195695%5E252367_/rimp=1"
15 <= 13
self.close();
1234567890123XY
X = \r
Y = \n
Comment 3•18 years ago
|
||
-> default owner
Assignee: darin → nobody
Component: Networking: HTTP → Networking
QA Contact: networking.http → networking
Comment 4•17 years ago
|
||
Confirmed on Mac trunk: loading
http://hb.lycos.com/header?VID=6105&LHIG=1&ord=178853
triggers this assertion.
I also see it if I load http://hotbot.com/.
Component: Networking → Networking: HTTP
OS: Windows XP → All
QA Contact: networking → networking.http
Hardware: PC → All
Comment 5•16 years ago
|
||
OK, in comment 0 the HTTP version in question was 0xb = 11 = NS_HTTP_VERSION_1_1, so this is not limited to HTTP/1.0 servers. Unfortunately I can't tell if keep-alive was used or not.
(context: Bug 475444)
Comment 6•15 years ago
|
||
Loading those hotbot URLs no longer triggers this assertion for me.
Comment 7•11 years ago
|
||
I hit this assertion failure in Firefox 28 every time I use the "DownThemAll" addon.
STR:
1. Install https://addons.mozilla.org/en-US/firefox/addon/downthemall/
2. Load any website with images, such as http://imgur.com, http://pinterest.com/all, or even http://cnn.com
3. Select Tools > DownThemAll Tools > DownThemAll menu item
4. In the DownThemAll dialog, select "Pictures and Media" then click the "Start" button
RESULT:
Assertion failure because, in one example, progress was 60462 but progressMax was 32116.
[Parent 65106] WARNING: unexpected progress values - is server exceeding content length?: file /Users/cpeterson/Code/mozilla/inbound/netwerk/protocol/http/nsHttpChannel.cpp, line 5279
Assertion failure: progress <= progressMax (unexpected progress values), at /Users/cpeterson/Code/mozilla/inbound/netwerk/protocol/http/nsHttpChannel.cpp:5407
0 mozilla::net::nsHttpChannel::OnTransportStatus(nsITransport*, tag_nsresult, unsigned long long, unsigned long long) + 1159 (nsHttpChannel.cpp:5381)
1 mozilla::net::nsHttpChannel::OnDataAvailable(nsIRequest*, nsISupports*, nsIInputStream*, unsigned long long, unsigned int) + 343 (nsHttpChannel.cpp:5282)
2 nsInputStreamPump::OnStateTransfer() + 559 (nsInputStreamPump.cpp:592)
3 nsInputStreamPump::OnInputStreamReady(nsIAsyncInputStream*) + 280 (nsInputStreamPump.cpp:431)
4 nsInputStreamReadyEvent::Run() + 41 (nsCOMPtr.h:494)
5 nsThread::ProcessNextEvent(bool, bool*) + 1272 (nsThread.cpp:612)
6 NS_ProcessPendingEvents(nsIThread*, unsigned int) + 77 (nsThreadUtils.cpp:210)
7 nsBaseAppShell::NativeEventCallback() + 106 (nsBaseAppShell.cpp:96)
8 nsAppShell::ProcessGeckoEvents(void*) + 191 (nsAppShell.mm:389)
...
Keywords: reproducible
Assignee | ||
Comment 8•11 years ago
|
||
re comment 7 - this is a bug in downthemall.. the OnDataAvailable handler in that addon is not consuming all of the data presented to it which it is required by contract to do:
https://mxr.mozilla.org/mozilla-central/source/netwerk/base/public/nsIStreamListener.idl#19
you will see that nsInputStreamPump is tolerant to this
https://mxr.mozilla.org/mozilla-central/source/netwerk/base/src/nsInputStreamPump.cpp#561
however, nsHttpChannel.cpp isn't.
I think its a good idea to make httpchannel robust to it, but I'll put in an annoying NS_WARNING when the contract is violated.
Assignee | ||
Comment 9•11 years ago
|
||
Attachment #8343128 -
Flags: review?(jduell.mcbugs)
Assignee | ||
Updated•11 years ago
|
Assignee: nobody → mcmanus
Status: NEW → ASSIGNED
Comment 10•11 years ago
|
||
Comment on attachment 8343128 [details] [diff] [review]
addons with broken OnDataAvailable contract break http channel progress offsets
Review of attachment 8343128 [details] [diff] [review]:
-----------------------------------------------------------------
Good stuff. A couple nits/ideas.
::: netwerk/protocol/http/nsHttpChannel.cpp
@@ +5309,5 @@
> count);
> + if (NS_SUCCEEDED(rv)) {
> + // by contract mListener must read all of "count" bytes, but
> + // nsInputStreamPump is tolerant to seekable streams that violate that
> + // and it will redliver incompletely read data. So we need to do
greenliver. (Am I bikeshedding here?)
@@ +5315,5 @@
> + int64_t offsetAfter, delta;
> + if (seekable && NS_SUCCEEDED(seekable->Tell(&offsetAfter))) {
> + delta = offsetAfter - offsetBefore;
> + if (delta != count) {
> + NS_WARNING("Listener OnDataAvailable contract violation");
Given that addons are the most obvious culprits here, would it be worth dumping this warning to the web console instead/additionally?
Attachment #8343128 -
Flags: review?(jduell.mcbugs) → review+
Assignee | ||
Comment 11•11 years ago
|
||
added a console log and fixed the typo
remote: https://hg.mozilla.org/integration/mozilla-inbound/rev/0d7d5af0b1b1
Comment 12•11 years ago
|
||
Assignee | ||
Comment 13•11 years ago
|
||
c:/builds/moz2_slave/m-in-w32-d-0000000000000000000/build/netwerk/protocol/http/nsHttpChannel.cpp(5328) : error C2308: concatenating mismatched strings
Concatenating wide "http channel Listener OnDataAvailable " with narrow "contract violation"
Apparently NS_LITERAL_STRING("foo " "bar") runs into problems in preprocessor land on windows.. this was the review nit fixup.
try with new syntax:
remote: https://tbpl.mozilla.org/?tree=Try&rev=c36ac780dc8c
Assignee | ||
Comment 14•11 years ago
|
||
Status: ASSIGNED → RESOLVED
Closed: 11 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla29
You need to log in
before you can comment on or make changes to this bug.
Description
•