diff --git a/dom/base/test/chrome/bug884693.sjs b/dom/base/test/chrome/bug884693.sjs index 30d4f8a033bd..0b865d7e528d 100644 --- a/dom/base/test/chrome/bug884693.sjs +++ b/dom/base/test/chrome/bug884693.sjs @@ -1,6 +1,7 @@ function handleRequest(request, response) { - let [status, statusText, body] = request.queryString.split("&"); + let [status, statusText, encodedBody] = request.queryString.split("&"); + let body = decodeURIComponent(encodedBody); response.setStatusLine(request.httpVersion, status, statusText); response.setHeader("Content-Type", "text/xml", false); response.setHeader("Content-Length", "" + body.length, false); diff --git a/dom/base/test/chrome/test_bug884693.xul b/dom/base/test/chrome/test_bug884693.xul index ee22a5f5df24..0223b49b3ffc 100644 --- a/dom/base/test/chrome/test_bug884693.xul +++ b/dom/base/test/chrome/test_bug884693.xul @@ -19,6 +19,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=884693 const SERVER_URL = "http://mochi.test:8888/tests/dom/base/test/chrome/bug884693.sjs"; const INVALID_XML = "InvalidXML"; + const XML_WITHOUT_ROOT = ""; let consoleService = Cc["@mozilla.org/consoleservice;1"]. getService(Ci.nsIConsoleService) @@ -63,7 +64,8 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=884693 then(() => { return runTest(205, "Reset Content", INVALID_XML, "", []); }). then(() => { return runTest(304, "Not modified", "", "", []); }). then(() => { return runTest(304, "Not modified", INVALID_XML, "", []); }). - then(() => { return runTest(200, "OK", "", "", ["no root element found"]); }). + then(() => { return runTest(200, "OK", "", "", []); }). + then(() => { return runTest(200, "OK", XML_WITHOUT_ROOT, XML_WITHOUT_ROOT, ["no root element found"]); }). then(() => { return runTest(200, "OK", INVALID_XML, INVALID_XML, ["syntax error"]); }). then(SimpleTest.finish); diff --git a/dom/xhr/XMLHttpRequestMainThread.cpp b/dom/xhr/XMLHttpRequestMainThread.cpp index 5dc99de52bb8..5c42a5dde48f 100644 --- a/dom/xhr/XMLHttpRequestMainThread.cpp +++ b/dom/xhr/XMLHttpRequestMainThread.cpp @@ -1888,6 +1888,15 @@ XMLHttpRequestMainThread::OnStartRequest(nsIRequest* request) { !(mRequestMethod.EqualsLiteral("HEAD") || mRequestMethod.EqualsLiteral("CONNECT")); + if (parseBody) { + // Do not try to parse documents if content-length = 0 + int64_t contentLength; + if (NS_SUCCEEDED(mChannel->GetContentLength(&contentLength)) && + contentLength == 0) { + parseBody = false; + } + } + mIsHtml = false; mWarnAboutSyncHtml = false; if (parseBody && NS_SUCCEEDED(status)) {