summaryrefslogtreecommitdiff
path: root/gnu/packages/patches/icecat-CVE-2014-1592.patch
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/patches/icecat-CVE-2014-1592.patch')
-rw-r--r--gnu/packages/patches/icecat-CVE-2014-1592.patch400
1 files changed, 0 insertions, 400 deletions
diff --git a/gnu/packages/patches/icecat-CVE-2014-1592.patch b/gnu/packages/patches/icecat-CVE-2014-1592.patch
deleted file mode 100644
index 6de1b6fe4a..0000000000
--- a/gnu/packages/patches/icecat-CVE-2014-1592.patch
+++ /dev/null
@@ -1,400 +0,0 @@
-commit 7efadbb03cdffa11ebfc2da3113377d2f33b893b
-Author: Henri Sivonen <hsivonen@hsivonen.fi>
-Date: Mon Nov 3 15:23:26 2014 +0200
-
- Bug 1088635. r=smaug, a=bkerensa
-
- Modified content/base/src/nsDocument.cpp
-diff --git a/content/base/src/nsDocument.cpp b/content/base/src/nsDocument.cpp
-index cbed38d..3493bce 100644
---- a/content/base/src/nsDocument.cpp
-+++ b/content/base/src/nsDocument.cpp
-@@ -3916,7 +3916,7 @@ nsDocument::InsertChildAt(nsIContent* aKid, uint32_t aIndex,
- bool aNotify)
- {
- if (aKid->IsElement() && GetRootElement()) {
-- NS_ERROR("Inserting element child when we already have one");
-+ NS_WARNING("Inserting root element when we already have one");
- return NS_ERROR_DOM_HIERARCHY_REQUEST_ERR;
- }
-
- Modified parser/html/nsHtml5Parser.cpp
-diff --git a/parser/html/nsHtml5Parser.cpp b/parser/html/nsHtml5Parser.cpp
-index a485be4..f28adb4 100644
---- a/parser/html/nsHtml5Parser.cpp
-+++ b/parser/html/nsHtml5Parser.cpp
-@@ -237,7 +237,8 @@ nsHtml5Parser::Parse(const nsAString& aSourceBuffer,
- * WillBuildModel to be called before the document has had its
- * script global object set.
- */
-- mExecutor->WillBuildModel(eDTDMode_unknown);
-+ rv = mExecutor->WillBuildModel(eDTDMode_unknown);
-+ NS_ENSURE_SUCCESS(rv, rv);
- }
-
- // Return early if the parser has processed EOF
-@@ -255,7 +256,7 @@ nsHtml5Parser::Parse(const nsAString& aSourceBuffer,
- }
- mDocumentClosed = true;
- if (!mBlocked && !mInDocumentWrite) {
-- ParseUntilBlocked();
-+ return ParseUntilBlocked();
- }
- return NS_OK;
- }
-@@ -378,7 +379,8 @@ nsHtml5Parser::Parse(const nsAString& aSourceBuffer,
-
- if (mTreeBuilder->HasScript()) {
- mTreeBuilder->Flush(); // Move ops to the executor
-- mExecutor->FlushDocumentWrite(); // run the ops
-+ rv = mExecutor->FlushDocumentWrite(); // run the ops
-+ NS_ENSURE_SUCCESS(rv, rv);
- // Flushing tree ops can cause all sorts of things.
- // Return early if the parser got terminated.
- if (mExecutor->IsComplete()) {
-@@ -437,7 +439,8 @@ nsHtml5Parser::Parse(const nsAString& aSourceBuffer,
- "Buffer wasn't tokenized to completion?");
- // Scripting semantics require a forced tree builder flush here
- mTreeBuilder->Flush(); // Move ops to the executor
-- mExecutor->FlushDocumentWrite(); // run the ops
-+ rv = mExecutor->FlushDocumentWrite(); // run the ops
-+ NS_ENSURE_SUCCESS(rv, rv);
- } else if (stackBuffer.hasMore()) {
- // The buffer wasn't tokenized to completion. Tokenize the untokenized
- // content in order to preload stuff. This content will be retokenized
-@@ -594,11 +597,13 @@ nsHtml5Parser::IsScriptCreated()
- /* End nsIParser */
-
- // not from interface
--void
-+nsresult
- nsHtml5Parser::ParseUntilBlocked()
- {
-- if (mBlocked || mExecutor->IsComplete() || NS_FAILED(mExecutor->IsBroken())) {
-- return;
-+ nsresult rv = mExecutor->IsBroken();
-+ NS_ENSURE_SUCCESS(rv, rv);
-+ if (mBlocked || mExecutor->IsComplete()) {
-+ return NS_OK;
- }
- NS_ASSERTION(mExecutor->HasStarted(), "Bad life cycle.");
- NS_ASSERTION(!mInDocumentWrite,
-@@ -611,7 +616,7 @@ nsHtml5Parser::ParseUntilBlocked()
- if (mFirstBuffer == mLastBuffer) {
- if (mExecutor->IsComplete()) {
- // something like cache manisfests stopped the parse in mid-flight
-- return;
-+ return NS_OK;
- }
- if (mDocumentClosed) {
- NS_ASSERTION(!GetStreamParser(),
-@@ -620,8 +625,10 @@ nsHtml5Parser::ParseUntilBlocked()
- mTreeBuilder->StreamEnded();
- mTreeBuilder->Flush();
- mExecutor->FlushDocumentWrite();
-+ // The below call does memory cleanup, so call it even if the
-+ // parser has been marked as broken.
- mTokenizer->end();
-- return;
-+ return NS_OK;
- }
- // never release the last buffer.
- NS_ASSERTION(!mLastBuffer->getStart() && !mLastBuffer->getEnd(),
-@@ -643,14 +650,14 @@ nsHtml5Parser::ParseUntilBlocked()
- NS_ASSERTION(mExecutor->IsInFlushLoop(),
- "How did we come here without being in the flush loop?");
- }
-- return; // no more data for now but expecting more
-+ return NS_OK; // no more data for now but expecting more
- }
- mFirstBuffer = mFirstBuffer->next;
- continue;
- }
-
- if (mBlocked || mExecutor->IsComplete()) {
-- return;
-+ return NS_OK;
- }
-
- // now we have a non-empty buffer
-@@ -667,10 +674,11 @@ nsHtml5Parser::ParseUntilBlocked()
- }
- if (mTreeBuilder->HasScript()) {
- mTreeBuilder->Flush();
-- mExecutor->FlushDocumentWrite();
-+ nsresult rv = mExecutor->FlushDocumentWrite();
-+ NS_ENSURE_SUCCESS(rv, rv);
- }
- if (mBlocked) {
-- return;
-+ return NS_OK;
- }
- }
- continue;
- Modified parser/html/nsHtml5Parser.h
-diff --git a/parser/html/nsHtml5Parser.h b/parser/html/nsHtml5Parser.h
-index aff79c7..e2ef2f8 100644
---- a/parser/html/nsHtml5Parser.h
-+++ b/parser/html/nsHtml5Parser.h
-@@ -262,7 +262,7 @@ class nsHtml5Parser : public nsIParser,
- /**
- * Parse until pending data is exhausted or a script blocks the parser
- */
-- void ParseUntilBlocked();
-+ nsresult ParseUntilBlocked();
-
- private:
-
- Modified parser/html/nsHtml5StreamParser.cpp
-diff --git a/parser/html/nsHtml5StreamParser.cpp b/parser/html/nsHtml5StreamParser.cpp
-index 4790568..7e3917b 100644
---- a/parser/html/nsHtml5StreamParser.cpp
-+++ b/parser/html/nsHtml5StreamParser.cpp
-@@ -796,7 +796,7 @@ nsHtml5StreamParser::WriteStreamBytes(const uint8_t* aFromSegment,
- // NS_HTML5_STREAM_PARSER_READ_BUFFER_SIZE.
- if (!mLastBuffer) {
- NS_WARNING("mLastBuffer should not be null!");
-- MarkAsBroken();
-+ MarkAsBroken(NS_ERROR_NULL_POINTER);
- return NS_ERROR_NULL_POINTER;
- }
- if (mLastBuffer->getEnd() == NS_HTML5_STREAM_PARSER_READ_BUFFER_SIZE) {
-@@ -902,7 +902,8 @@ nsHtml5StreamParser::OnStartRequest(nsIRequest* aRequest, nsISupports* aContext)
- * WillBuildModel to be called before the document has had its
- * script global object set.
- */
-- mExecutor->WillBuildModel(eDTDMode_unknown);
-+ rv = mExecutor->WillBuildModel(eDTDMode_unknown);
-+ NS_ENSURE_SUCCESS(rv, rv);
-
- nsRefPtr<nsHtml5OwningUTF16Buffer> newBuf =
- nsHtml5OwningUTF16Buffer::FalliblyCreate(
-@@ -1003,8 +1004,9 @@ nsHtml5StreamParser::DoStopRequest()
-
- if (!mUnicodeDecoder) {
- uint32_t writeCount;
-- if (NS_FAILED(FinalizeSniffing(nullptr, 0, &writeCount, 0))) {
-- MarkAsBroken();
-+ nsresult rv;
-+ if (NS_FAILED(rv = FinalizeSniffing(nullptr, 0, &writeCount, 0))) {
-+ MarkAsBroken(rv);
- return;
- }
- } else if (mFeedChardet) {
-@@ -1076,7 +1078,7 @@ nsHtml5StreamParser::DoDataAvailable(const uint8_t* aBuffer, uint32_t aLength)
- rv = SniffStreamBytes(aBuffer, aLength, &writeCount);
- }
- if (NS_FAILED(rv)) {
-- MarkAsBroken();
-+ MarkAsBroken(rv);
- return;
- }
- NS_ASSERTION(writeCount == aLength, "Wrong number of stream bytes written/sniffed.");
-@@ -1662,13 +1664,13 @@ nsHtml5StreamParser::TimerFlush()
- }
-
- void
--nsHtml5StreamParser::MarkAsBroken()
-+nsHtml5StreamParser::MarkAsBroken(nsresult aRv)
- {
- NS_ASSERTION(IsParserThread(), "Wrong thread!");
- mTokenizerMutex.AssertCurrentThreadOwns();
-
- Terminate();
-- mTreeBuilder->MarkAsBroken();
-+ mTreeBuilder->MarkAsBroken(aRv);
- mozilla::DebugOnly<bool> hadOps = mTreeBuilder->Flush(false);
- NS_ASSERTION(hadOps, "Should have had the markAsBroken op!");
- if (NS_FAILED(NS_DispatchToMainThread(mExecutorFlusher))) {
- Modified parser/html/nsHtml5StreamParser.h
-diff --git a/parser/html/nsHtml5StreamParser.h b/parser/html/nsHtml5StreamParser.h
-index c7dcbbe..476ef16 100644
---- a/parser/html/nsHtml5StreamParser.h
-+++ b/parser/html/nsHtml5StreamParser.h
-@@ -218,7 +218,7 @@ class nsHtml5StreamParser : public nsICharsetDetectionObserver {
- }
- #endif
-
-- void MarkAsBroken();
-+ void MarkAsBroken(nsresult aRv);
-
- /**
- * Marks the stream parser as interrupted. If you ever add calls to this
- Modified parser/html/nsHtml5TreeBuilderCppSupplement.h
-diff --git a/parser/html/nsHtml5TreeBuilderCppSupplement.h b/parser/html/nsHtml5TreeBuilderCppSupplement.h
-index 4cd5c7c..1e65394 100644
---- a/parser/html/nsHtml5TreeBuilderCppSupplement.h
-+++ b/parser/html/nsHtml5TreeBuilderCppSupplement.h
-@@ -949,14 +949,14 @@ nsHtml5TreeBuilder::DropHandles()
- }
-
- void
--nsHtml5TreeBuilder::MarkAsBroken()
-+nsHtml5TreeBuilder::MarkAsBroken(nsresult aRv)
- {
- if (MOZ_UNLIKELY(mBuilder)) {
- MOZ_ASSUME_UNREACHABLE("Must not call this with builder.");
- return;
- }
- mOpQueue.Clear(); // Previous ops don't matter anymore
-- mOpQueue.AppendElement()->Init(eTreeOpMarkAsBroken);
-+ mOpQueue.AppendElement()->Init(aRv);
- }
-
- void
- Modified parser/html/nsHtml5TreeBuilderHSupplement.h
-diff --git a/parser/html/nsHtml5TreeBuilderHSupplement.h b/parser/html/nsHtml5TreeBuilderHSupplement.h
-index a321e80..8d380eb 100644
---- a/parser/html/nsHtml5TreeBuilderHSupplement.h
-+++ b/parser/html/nsHtml5TreeBuilderHSupplement.h
-@@ -223,4 +223,4 @@
-
- void errEndWithUnclosedElements(nsIAtom* aName);
-
-- void MarkAsBroken();
-+ void MarkAsBroken(nsresult aRv);
- Modified parser/html/nsHtml5TreeOpExecutor.cpp
-diff --git a/parser/html/nsHtml5TreeOpExecutor.cpp b/parser/html/nsHtml5TreeOpExecutor.cpp
-index ebcafca..6c52e5f 100644
---- a/parser/html/nsHtml5TreeOpExecutor.cpp
-+++ b/parser/html/nsHtml5TreeOpExecutor.cpp
-@@ -411,7 +411,11 @@ nsHtml5TreeOpExecutor::RunFlushLoop()
- GetParser()->GetStreamParser();
- // Now parse content left in the document.write() buffer queue if any.
- // This may generate tree ops on its own or dequeue a speculation.
-- GetParser()->ParseUntilBlocked();
-+ nsresult rv = GetParser()->ParseUntilBlocked();
-+ if (NS_FAILED(rv)) {
-+ MarkAsBroken(rv);
-+ return;
-+ }
- }
-
- if (mOpQueue.IsEmpty()) {
-@@ -496,21 +500,24 @@ nsHtml5TreeOpExecutor::RunFlushLoop()
- }
- }
-
--void
-+nsresult
- nsHtml5TreeOpExecutor::FlushDocumentWrite()
- {
-+ nsresult rv = IsBroken();
-+ NS_ENSURE_SUCCESS(rv, rv);
-+
- FlushSpeculativeLoads(); // Make sure speculative loads never start after the
- // corresponding normal loads for the same URLs.
-
- if (MOZ_UNLIKELY(!mParser)) {
- // The parse has ended.
- mOpQueue.Clear(); // clear in order to be able to assert in destructor
-- return;
-+ return rv;
- }
-
- if (mFlushState != eNotFlushing) {
- // XXX Can this happen? In case it can, let's avoid crashing.
-- return;
-+ return rv;
- }
-
- mFlushState = eInFlush;
-@@ -545,7 +552,7 @@ nsHtml5TreeOpExecutor::FlushDocumentWrite()
- }
- NS_ASSERTION(mFlushState == eInDocUpdate,
- "Tried to perform tree op outside update batch.");
-- nsresult rv = iter->Perform(this, &scriptElement);
-+ rv = iter->Perform(this, &scriptElement);
- if (NS_FAILED(rv)) {
- MarkAsBroken(rv);
- break;
-@@ -560,13 +567,14 @@ nsHtml5TreeOpExecutor::FlushDocumentWrite()
-
- if (MOZ_UNLIKELY(!mParser)) {
- // Ending the doc update caused a call to nsIParser::Terminate().
-- return;
-+ return rv;
- }
-
- if (scriptElement) {
- // must be tail call when mFlushState is eNotFlushing
- RunScript(scriptElement);
- }
-+ return rv;
- }
-
- // copied from HTML content sink
- Modified parser/html/nsHtml5TreeOpExecutor.h
-diff --git a/parser/html/nsHtml5TreeOpExecutor.h b/parser/html/nsHtml5TreeOpExecutor.h
-index 9617dcb..1f81448 100644
---- a/parser/html/nsHtml5TreeOpExecutor.h
-+++ b/parser/html/nsHtml5TreeOpExecutor.h
-@@ -173,7 +173,7 @@ class nsHtml5TreeOpExecutor : public nsHtml5DocumentBuilder,
-
- void RunFlushLoop();
-
-- void FlushDocumentWrite();
-+ nsresult FlushDocumentWrite();
-
- void MaybeSuspend();
-
- Modified parser/html/nsHtml5TreeOperation.cpp
-diff --git a/parser/html/nsHtml5TreeOperation.cpp b/parser/html/nsHtml5TreeOperation.cpp
-index 48b71dc..7ad65247 100644
---- a/parser/html/nsHtml5TreeOperation.cpp
-+++ b/parser/html/nsHtml5TreeOperation.cpp
-@@ -214,6 +214,9 @@ nsHtml5TreeOperation::AppendToDocument(nsIContent* aNode,
- nsIDocument* doc = aBuilder->GetDocument();
- uint32_t childCount = doc->GetChildCount();
- rv = doc->AppendChildTo(aNode, false);
-+ if (rv == NS_ERROR_DOM_HIERARCHY_REQUEST_ERR) {
-+ return NS_OK;
-+ }
- NS_ENSURE_SUCCESS(rv, rv);
- nsNodeUtils::ContentInserted(doc, aNode, childCount);
-
-@@ -739,8 +742,7 @@ nsHtml5TreeOperation::Perform(nsHtml5TreeOpExecutor* aBuilder,
- return NS_OK;
- }
- case eTreeOpMarkAsBroken: {
-- aBuilder->MarkAsBroken(NS_ERROR_OUT_OF_MEMORY);
-- return NS_OK;
-+ return mOne.result;
- }
- case eTreeOpRunScript: {
- nsIContent* node = *(mOne.node);
- Modified parser/html/nsHtml5TreeOperation.h
-diff --git a/parser/html/nsHtml5TreeOperation.h b/parser/html/nsHtml5TreeOperation.h
-index 2727733..06d0274 100644
---- a/parser/html/nsHtml5TreeOperation.h
-+++ b/parser/html/nsHtml5TreeOperation.h
-@@ -435,6 +435,15 @@ class nsHtml5TreeOperation {
- mFour.integer = aInt;
- }
-
-+ inline void Init(nsresult aRv)
-+ {
-+ NS_PRECONDITION(mOpCode == eTreeOpUninitialized,
-+ "Op code must be uninitialized when initializing.");
-+ NS_PRECONDITION(NS_FAILED(aRv), "Initialized tree op with non-failure.");
-+ mOpCode = eTreeOpMarkAsBroken;
-+ mOne.result = aRv;
-+ }
-+
- inline void InitAddClass(nsIContentHandle* aNode, const char16_t* aClass)
- {
- NS_PRECONDITION(mOpCode == eTreeOpUninitialized,
-@@ -487,11 +496,12 @@ class nsHtml5TreeOperation {
- nsIAtom* atom;
- nsHtml5HtmlAttributes* attributes;
- nsHtml5DocumentMode mode;
-- char16_t* unicharPtr;
-+ char16_t* unicharPtr;
- char* charPtr;
- nsHtml5TreeOperationStringPair* stringPair;
- nsAHtml5TreeBuilderState* state;
- int32_t integer;
-+ nsresult result;
- } mOne, mTwo, mThree, mFour;
- };
-