Closed
Bug 293046
Opened 20 years ago
Closed 20 years ago
XMLHttpRequest.overrideMimeType() makes loading abort for non-XML
Categories
(Core :: XML, defect)
Core
XML
Tracking
()
RESOLVED
FIXED
People
(Reporter: jwkbugzilla, Assigned: jwkbugzilla)
References
Details
(Keywords: fixed1.8)
Attachments
(2 files, 2 obsolete files)
410 bytes,
text/html
|
Details | |
3.74 KB,
patch
|
jwkbugzilla
:
review+
jwkbugzilla
:
superreview+
asa
:
approval1.8rc1+
|
Details | Diff | Splinter Review |
It seems that XMLHttpRequest.overrideMimeType() has been only meant to set an
XML content type. If you use something like text/plain instead, NS_ERROR_FAILURE
is produced and loading is aborted (you can see it on the length of
XMLHttpRequest.responseText - it is something around 4096).
The problem: XMLHttpRequest is widely used for loading text data, not just XML.
One might use overrideMimeType('text/plain') to avoid useless parsing of an XML
document, or overrideMimeType('text/plain; charset=windows-1251') to set the
charset for a non-XML document. If you do this, in most cases you will only get
the first 4096 bytes of the document.
Testcase and patch with the next posts...
Assignee | ||
Comment 1•20 years ago
|
||
Loads Bugzilla's main page after calling overrideMimeType(). This results in
the message: "Error: 4096". The real size of the page is somewhere around 7000
bytes, so one would expect the message: "Loaded: 7063".
Assignee: xml → trev
Status: NEW → ASSIGNED
Assignee | ||
Comment 2•20 years ago
|
||
This actually fixes two problems.
1. Loading isn't aborted anymore if mXMLParserStreamListener->OnDataAvailable()
returns an error. We stop parsing XML but finish reading the stream so that we
still have a valid result in responseText.
2. A call to overrideMimeType() doesn't always mean that we will get an XML
document. We still need to check the content type and determine whether we
should try to parse the document.
Assignee | ||
Updated•20 years ago
|
Attachment #182712 -
Flags: review?(jst)
Comment 3•20 years ago
|
||
Comment on attachment 182712 [details] [diff] [review]
Patch
- rv = NS_NewByteInputStream(getter_AddRefs(copyStream), fromRawSegment,
count);
+ nsresult parsingResult = NS_NewByteInputStream(getter_AddRefs(copyStream),
fromRawSegment, count);
- if (NS_SUCCEEDED(rv)) {
+ if (NS_SUCCEEDED(parsingResult)) {
NS_ASSERTION(copyStream, "NS_NewByteInputStream lied");
- rv =
xmlHttpRequest->mXMLParserStreamListener->OnDataAvailable(xmlHttpRequest->mRead
Request,xmlHttpRequest->mContext,copyStream,toOffset,count);
+ parsingResult =
xmlHttpRequest->mXMLParserStreamListener->OnDataAvailable(xmlHttpRequest->mRead
Request,xmlHttpRequest->mContext,copyStream,toOffset,count);
+ }
+
+ // No use to continue parsing if we failed here, but we
+ // should still finish reading the stream
+ if (NS_FAILED(parsingResult)) {
+ xmlHttpRequest->mState &= ~XML_HTTP_REQUEST_PARSEBODY;
}
I think we should still abort the parsing if NS_NewByteInputStream() fails,
that will only fail if something goes really wrong and callers should know...
So just use parsingResult inside the first if statement above, and move the
second one inside the first one.
- In nsXMLHttpRequest::OnStartRequest():
+ nsresult status;
+ request->GetStatus(&status);
+
+ if (NS_SUCCEEDED(status) && !mOverrideMimeType.IsEmpty()) {
+ channel->SetContentType(mOverrideMimeType);
+ }
+
+ if (NS_SUCCEEDED(status)) {
Move the first if inside the second one to avoid double-checking
NS_SUCCEEDED(status) here.
r=jst with those changes made.
Attachment #182712 -
Flags: superreview?(darin)
Attachment #182712 -
Flags: review?(jst)
Attachment #182712 -
Flags: review+
Assignee | ||
Comment 4•20 years ago
|
||
Requested changes made, taking review flags over from the old version.
Assignee | ||
Updated•20 years ago
|
Attachment #182712 -
Attachment is obsolete: true
Attachment #190123 -
Flags: superreview?(darin)
Attachment #190123 -
Flags: review+
Assignee | ||
Updated•20 years ago
|
Attachment #182712 -
Flags: superreview?(darin)
Comment 5•20 years ago
|
||
Comment on attachment 190123 [details] [diff] [review]
Updated and corrected patch
Please break long lines of code at 80 characters for readability.
You should always put a space after a comma in the parameter list of a function
that you are calling.
sr=darin with those two nits fixed.
Attachment #190123 -
Flags: superreview?(darin) → superreview+
Assignee | ||
Comment 6•20 years ago
|
||
(In reply to comment #5)
> Please break long lines of code at 80 characters for readability.
>
> You should always put a space after a comma in the parameter list of a function
> that you are calling.
Heh... That line isn't really my code and it is by far not the last line with
bad style in this file. But I guess I can still fix it while we are already at it.
Assignee | ||
Comment 7•20 years ago
|
||
Attachment #190123 -
Attachment is obsolete: true
Attachment #190501 -
Flags: superreview+
Attachment #190501 -
Flags: review+
Comment 8•20 years ago
|
||
Checking in extensions/xmlextras/base/src/nsXMLHttpRequest.cpp;
/cvsroot/mozilla/extensions/xmlextras/base/src/nsXMLHttpRequest.cpp,v <--
nsXMLHttpRequest.cpp
new revision: 1.135; previous revision: 1.134
done
Assignee | ||
Updated•20 years ago
|
Status: ASSIGNED → RESOLVED
Closed: 20 years ago
Resolution: --- → FIXED
Comment 9•20 years ago
|
||
*** Bug 312482 has been marked as a duplicate of this bug. ***
Comment 10•20 years ago
|
||
Wladimir, Johnny, Darin, can you all tell us what kind of risk we'd be taking if
we tried to get this into the 1.8 branch? The bug duped against this was
nominated for blocking so I'm moving that over to this bug.
Flags: blocking1.8rc1?
Assignee | ||
Comment 11•20 years ago
|
||
I voted against getting this into the 1.8 branch before as it seemed that the
probability of this becoming a real problem is rather low whereas this patch
changes the way how XMLHttpRequest works quite significantly. On the other hand,
the changes are pretty straightforward, we don't break anything anybody could
reasonably rely on and bug 312482 now shows a more obvious way to get into
trouble. In my opinion getting this into the 1.8 branch is reasonable but I'm
not experienced enough to have the last word here.
Comment 12•20 years ago
|
||
(In reply to comment #10)
> Wladimir, Johnny, Darin, can you all tell us what kind of risk we'd be taking if
> we tried to get this into the 1.8 branch?
I don't see much risk here at all, not by looking at the change (again) or for
the fact that there's no known regressions from this after 2 months on the
trunk. My vote would be to take this, but it's not an absolute showstopper IMO.
Comment 13•20 years ago
|
||
Comment on attachment 190501 [details] [diff] [review]
Patch to be checked in
I think we're going to want to end up taking this patch based on the responses
I've read so far.
Attachment #190501 -
Flags: approval1.8rc1?
Updated•20 years ago
|
Attachment #190501 -
Flags: approval1.8rc1? → approval1.8rc1+
Updated•20 years ago
|
Flags: blocking1.8rc1? → blocking1.8rc1+
Comment 14•20 years ago
|
||
Wladimir, can you get this landed on the branch today? If not, lemme know and
I'll land it for you. Thanks!
Assignee | ||
Comment 15•20 years ago
|
||
I don't have CVS access, you have to do this.
Comment 16•20 years ago
|
||
ok, i've checked this into the branch. Any testing help folks can provide in
tomorrow's builds would be greatly appreciated.
Keywords: fixed1.8
Comment 17•20 years ago
|
||
I'll check it out tomorrow.
Comment 18•20 years ago
|
||
In terms of the issue in this bug, todays build now appears to work correctly.
I tested with:
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8b5) Gecko/20051019 Firefox/1.5
and the result set was as expected.
You need to log in
before you can comment on or make changes to this bug.
Description
•