/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
// INT32_MAX is (2^31)-1. Therefore, the highest power-of-two that fits // is 2^30. Note that this is counting char16_t units. The underlying // bytes will be twice that, but they fit even in 32-bit size_t even // if a contiguous chunk of memory of that size is pretty unlikely to // be available on a 32-bit system. #define MAX_POWER_OF_TWO_IN_INT32 0x40000000
bool nsHtml5Tokenizer::EnsureBufferSpace(int32_t aLength) {
MOZ_RELEASE_ASSERT(aLength >= 0, "Negative length."); if (aLength > MAX_POWER_OF_TWO_IN_INT32) { // Can't happen when loading from network. returnfalse;
}
mozilla::CheckedInt<int32_t> worstCase(strBufLen);
worstCase += aLength;
worstCase += charRefBufLen; // Add 2 to account for emissions of LT_GT, LT_SOLIDUS and RSQB_RSQB. // Adding to the general worst case instead of only the // TreeBuilder-exposed worst case to avoid re-introducing a bug when // unifying the tokenizer and tree builder buffers in the future.
worstCase += 2; if (!worstCase.isValid()) { returnfalse;
} if (worstCase.value() > MAX_POWER_OF_TWO_IN_INT32) { returnfalse;
} // TODO: Unify nsHtml5Tokenizer::strBuf and nsHtml5TreeBuilder::charBuffer // so that the call below becomes unnecessary. if (!tokenHandler->EnsureBufferSpace(worstCase.value())) { returnfalse;
} if (!strBuf) { if (worstCase.value() < MAX_POWER_OF_TWO_IN_INT32) { // Add one to round to the next power of two to avoid immediate // reallocation once there are a few characters in the buffer.
worstCase += 1;
}
strBuf = jArray<char16_t, int32_t>::newFallibleJArray(
mozilla::RoundUpPow2(worstCase.value())); if (!strBuf) { returnfalse;
}
} elseif (worstCase.value() > strBuf.length) {
jArray<char16_t, int32_t> newBuf =
jArray<char16_t, int32_t>::newFallibleJArray(
mozilla::RoundUpPow2(worstCase.value())); if (!newBuf) { returnfalse;
}
memcpy(newBuf, strBuf, sizeof(char16_t) * size_t(strBufLen));
strBuf = newBuf;
} returntrue;
}
void nsHtml5Tokenizer::errBadCharBeforeAttributeNameOrNull(char16_t c) { if (MOZ_LIKELY(mViewSource)) { if (c == '<') {
mViewSource->AddErrorToCurrentNode("errBadCharBeforeAttributeNameLt");
} elseif (c == '=') {
errEqualsSignBeforeAttributeName();
} elseif (c != 0xFFFD) {
errQuoteBeforeAttributeName(c);
}
}
}
void nsHtml5Tokenizer::errBadCharAfterLt(char16_t c) { if (MOZ_LIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentNode("errBadCharAfterLt");
}
}
void nsHtml5Tokenizer::errQuoteOrLtInAttributeNameOrNull(char16_t c) { if (MOZ_LIKELY(mViewSource)) { if (c == '<') {
mViewSource->AddErrorToCurrentNode("errLtInAttributeName");
} elseif (c != 0xFFFD) {
mViewSource->AddErrorToCurrentNode("errQuoteInAttributeName");
}
}
}
void nsHtml5Tokenizer::maybeErrAttributesOnEndTag(
nsHtml5HtmlAttributes* attrs) { if (mViewSource && attrs->getLength() != 0) { /* * When an end tag token is emitted with attributes, that is a parse * error.
*/
mViewSource->AddErrorToCurrentRun("maybeErrAttributesOnEndTag");
}
}
void nsHtml5Tokenizer::errGarbageAfterLtSlash() { if (MOZ_LIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentNode("errGarbageAfterLtSlash");
}
}
void nsHtml5Tokenizer::errLtSlashGt() { if (MOZ_LIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentNode("errLtSlashGt");
}
}
void nsHtml5Tokenizer::errCharRefLacksSemicolon() { if (MOZ_UNLIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentNode("errCharRefLacksSemicolon");
}
}
void nsHtml5Tokenizer::errNoDigitsInNCR() { if (MOZ_UNLIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentNode("errNoDigitsInNCR");
}
}
void nsHtml5Tokenizer::errGtInSystemId() { if (MOZ_LIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentNode("errGtInSystemId");
}
}
void nsHtml5Tokenizer::errGtInPublicId() { if (MOZ_LIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentNode("errGtInPublicId");
}
}
void nsHtml5Tokenizer::errNamelessDoctype() { if (MOZ_LIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentNode("errNamelessDoctype");
}
}
void nsHtml5Tokenizer::errConsecutiveHyphens() { if (MOZ_UNLIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentNode("errConsecutiveHyphens");
}
}
void nsHtml5Tokenizer::errPrematureEndOfComment() { if (MOZ_LIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentNode("errPrematureEndOfComment");
}
}
void nsHtml5Tokenizer::errBogusComment() { if (MOZ_UNLIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentNode("errBogusComment");
}
}
void nsHtml5Tokenizer::errSlashNotFollowedByGt() { if (MOZ_LIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentSlash("errSlashNotFollowedByGt");
}
}
void nsHtml5Tokenizer::errNoSpaceBetweenAttributes() { if (MOZ_LIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentNode("errNoSpaceBetweenAttributes");
}
}
void nsHtml5Tokenizer::errAttributeValueMissing() { if (MOZ_LIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentNode("errAttributeValueMissing");
}
}
void nsHtml5Tokenizer::errEqualsSignBeforeAttributeName() { if (MOZ_LIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentNode("errEqualsSignBeforeAttributeName");
}
}
void nsHtml5Tokenizer::errLtGt() { if (MOZ_LIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentNode("errLtGt");
}
}
void nsHtml5Tokenizer::errProcessingInstruction() { if (MOZ_LIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentNode("errProcessingInstruction");
}
}
void nsHtml5Tokenizer::errUnescapedAmpersandInterpretedAsCharacterReference() { if (MOZ_UNLIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentAmpersand( "errUnescapedAmpersandInterpretedAsCharacterReference");
}
}
void nsHtml5Tokenizer::errNotSemicolonTerminated() { if (MOZ_UNLIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentNode("errNotSemicolonTerminated");
}
}
void nsHtml5Tokenizer::errNoNamedCharacterMatch() { if (MOZ_UNLIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentAmpersand("errNoNamedCharacterMatch");
}
}
void nsHtml5Tokenizer::errQuoteBeforeAttributeName(char16_t c) { if (MOZ_LIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentNode("errQuoteBeforeAttributeName");
}
}
void nsHtml5Tokenizer::errExpectedPublicId() { if (MOZ_LIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentNode("errExpectedPublicId");
}
}
void nsHtml5Tokenizer::errBogusDoctype() { if (MOZ_UNLIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentNode("errBogusDoctype");
}
}
void nsHtml5Tokenizer::errNcrSurrogate() { if (MOZ_UNLIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentNode("errNcrSurrogate");
}
}
void nsHtml5Tokenizer::errNcrInC1Range() { if (MOZ_UNLIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentNode("errNcrInC1Range");
}
}
void nsHtml5Tokenizer::errEofInPublicId() { if (MOZ_UNLIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentRun("errEofInPublicId");
}
}
void nsHtml5Tokenizer::errEofInComment() { if (MOZ_UNLIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentRun("errEofInComment");
}
}
void nsHtml5Tokenizer::errEofInDoctype() { if (MOZ_UNLIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentRun("errEofInDoctype");
}
}
void nsHtml5Tokenizer::errEofInAttributeValue() { if (MOZ_UNLIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentRun("errEofInAttributeValue");
}
}
void nsHtml5Tokenizer::errEofInAttributeName() { if (MOZ_UNLIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentRun("errEofInAttributeName");
}
}
void nsHtml5Tokenizer::errEofWithoutGt() { if (MOZ_UNLIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentRun("errEofWithoutGt");
}
}
void nsHtml5Tokenizer::errEofInTagName() { if (MOZ_UNLIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentRun("errEofInTagName");
}
}
void nsHtml5Tokenizer::errEofInEndTag() { if (MOZ_UNLIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentRun("errEofInEndTag");
}
}
void nsHtml5Tokenizer::errEofAfterLt() { if (MOZ_UNLIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentRun("errEofAfterLt");
}
}
void nsHtml5Tokenizer::errNcrOutOfRange() { if (MOZ_UNLIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentNode("errNcrOutOfRange");
}
}
void nsHtml5Tokenizer::errNcrUnassigned() { if (MOZ_UNLIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentNode("errNcrUnassigned");
}
}
void nsHtml5Tokenizer::errDuplicateAttribute() { if (attributes) { // There is an open issue for properly specifying this: // https://github.com/whatwg/html/issues/3257
attributes->setDuplicateAttributeError();
}
if (MOZ_UNLIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentNode("errDuplicateAttribute");
}
}
void nsHtml5Tokenizer::errEofInSystemId() { if (MOZ_UNLIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentRun("errEofInSystemId");
}
}
void nsHtml5Tokenizer::errExpectedSystemId() { if (MOZ_LIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentNode("errExpectedSystemId");
}
}
void nsHtml5Tokenizer::errMissingSpaceBeforeDoctypeName() { if (MOZ_LIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentNode("errMissingSpaceBeforeDoctypeName");
}
}
void nsHtml5Tokenizer::errNestedComment() { if (MOZ_LIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentNode("errNestedComment");
}
}
void nsHtml5Tokenizer::errNcrZero() { if (MOZ_UNLIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentNode("errNcrZero");
}
}
void nsHtml5Tokenizer::errNoSpaceBetweenDoctypeSystemKeywordAndQuote() { if (MOZ_LIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentNode( "errNoSpaceBetweenDoctypeSystemKeywordAndQuote");
}
}
void nsHtml5Tokenizer::errNoSpaceBetweenPublicAndSystemIds() { if (MOZ_LIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentNode("errNoSpaceBetweenPublicAndSystemIds");
}
}
void nsHtml5Tokenizer::errNoSpaceBetweenDoctypePublicKeywordAndQuote() { if (MOZ_LIKELY(mViewSource)) {
mViewSource->AddErrorToCurrentNode( "errNoSpaceBetweenDoctypePublicKeywordAndQuote");
}
}
¤ Dauer der Verarbeitung: 0.3 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.