Firefox · Core
CVE-2026-92059
Logic Error in Core
Overview
Moderate
Severity
—
CVSS
No
Exploited ITW
Fixed
Fix Status
Changed Functions
| Function | Change | Notes |
|---|---|---|
ifeditor/libeditor/EditorBase.cpp |
modified | |
ifeditor/libeditor/HTMLEditSubActionHandler.cpp |
modified | |
ifeditor/libeditor/HTMLEditor.cpp |
modified |
Files Changed
editor/libeditor/EditorBase.cppeditor/libeditor/EditorBase.heditor/libeditor/HTMLEditSubActionHandler.cppeditor/libeditor/HTMLEditor.cppeditor/libeditor/HTMLEditor.heditor/libeditor/TextEditSubActionHandler.cppeditor/libeditor/WhiteSpaceVisibilityKeeper.cppeditor/libeditor/WhiteSpaceVisibilityKeeper.h
Patch
diff --git a/editor/libeditor/EditorBase.cpp b/editor/libeditor/EditorBase.cpp
index 33c66f29cea..07a22bd5d06 100644
--- a/editor/libeditor/EditorBase.cpp
+++ b/editor/libeditor/EditorBase.cpp
@@ -3488,7 +3488,7 @@ EditorDOMPoint EditorBase::ComputePointToInsertText(
Result<InsertTextResult, nsresult> EditorBase::InsertTextWithTransaction(
const nsAString& aStringToInsert, const EditorDOMPoint& aPointToInsert,
- InsertTextTo aInsertTextTo) {
+ InsertTextTo aInsertTextTo, InsertTextFor aPurpose) {
MOZ_ASSERT_IF(IsTextEditor(),
aInsertTextTo == InsertTextTo::ExistingTextNodeIfAvailable);
@@ -3504,7 +3504,7 @@ Result<InsertTextResult, nsresult> EditorBase::InsertTextWithTransaction(
EditorDOMPoint pointToInsert =
ComputePointToInsertText(aPointToInsert, aInsertTextTo);
- if (ShouldHandleIMEComposition()) {
+ if (ShouldHandleIMEComposition() && InsertingTextForComposition(aPurpose)) {
if (!pointToInsert.IsInTextNode()) {
// create a text node
RefPtr<nsTextNode> newTextNode = CreateTextNode(u""_ns);
@@ -3522,8 +3522,8 @@ Result<InsertTextResult, nsresult> EditorBase::InsertTextWithTransaction(
pointToInsert.Set(newTextNode, 0u);
}
Result<InsertTextResult, nsresult> insertTextResult =
- InsertTextIntoTextNodeWithTransaction(aStringToInsert,
- pointToInsert.AsInText());
+ InsertTextIntoTextNodeWithTransaction(
+ aStringToInsert, pointToInsert.AsInText(), aPurpose);
NS_WARNING_ASSERTION(
insertTextResult.isOk(),
"EditorBase::InsertTextIntoTextNodeWithTransaction() failed");
@@ -3533,8 +3533,8 @@ Result<InsertTextResult, nsresult> EditorBase::InsertTextWithTransaction(
if (pointToInsert.IsInTextNode()) {
// we are inserting text into an existing text node.
Result<InsertTextResult, nsresult> insertTextResult =
- InsertTextIntoTextNodeWithTransaction(aStringToInsert,
- pointToInsert.AsInText());
+ InsertTextIntoTextNodeWithTransaction(
+ aStringToInsert, pointToInsert.AsInText(), aPurpose);
NS_WARNING_ASSERTION(
insertTextResult.isOk(),
"EditorBase::InsertTextIntoTextNodeWithTransaction() failed");
@@ -3569,23 +3569,24 @@ EditorBase::ComputeInsertedRange(const EditorDOMPointInText& aInsertedPoint,
EditorDOMPointInText endOfInsertion(
aInsertedPoint.ContainerAs<Text>(),
- aInsertedPoint.Offset() + aInsertedString.Length());
+ std::min<uint32_t>(aInsertedPoint.Offset() + aInsertedString.Length(),
+ aInsertedPoint.ContainerAs<Text>()->TextDataLength()));
return {aInsertedPoint, endOfInsertion};
}
Result<InsertTextResult, nsresult>
EditorBase::InsertTextIntoTextNodeWithTransaction(
const nsAString& aStringToInsert,
- const EditorDOMPointInText& aPointToInsert) {
+ const EditorDOMPointInText& aPointToInsert, InsertTextFor aPurpose) {
MOZ_ASSERT(IsEditActionDataAvailable());
MOZ_ASSERT(aPointToInsert.IsSetAndValid());
RefPtr<EditTransactionBase> transaction;
- bool isIMETransaction = false;
- if (ShouldHandleIMEComposition()) {
+ const bool isIMETransaction =
+ ShouldHandleIMEComposition() && InsertingTextForComposition(aPurpose);
+ if (isIMETransaction) {
transaction =
CompositionTransaction::Create(*this, aStringToInsert, aPointToInsert);
- isIMETransaction = true;
} else {
transaction =
InsertTextTransaction::Create(*this, aStringToInsert, aPointToInsert);
@@ -4404,12 +4405,14 @@ void EditorBase::OnCompositionEnd(
if (editAction == EditAction::eCancelComposition && placeholderTransaction) {
const nsTArray<OwningNonNull<EditTransactionBase>>& childTransactions =
placeholderTransaction->ChildTransactions();
- MOZ_ASSERT(!childTransactions.IsEmpty());
// If the first transaction is inserting composition string, we didn't
// replace selection with the composition string. Then, all of the
- // operations during the composition is canceled by the user. So, we should
- // not record it as an undo transaction.
- if (childTransactions[0]->GetAsCompositionTransaction()) {
+ // operations during the composition is canceled by the user. So, we
+ // should not record it as an undo transaction.
+ // FYI: If non-related action of the composition, we already closed the
+ // previous transaction.
+ if (!childTransactions.IsEmpty() &&
+ childTransactions[0]->GetAsCompositionTransaction()) {
nsCOMPtr<nsITransaction> transaction =
mTransactionManager->PopUndoStack();
MOZ_DIAGNOSTIC_ASSERT(transaction == placeholderTransaction);
diff --git a/editor/libeditor/EditorBase.h b/editor/libeditor/EditorBase.h
index 1fb992dfef3..a4c58298e69 100644
--- a/editor/libeditor/EditorBase.h
+++ b/editor/libeditor/EditorBase.h
@@ -1899,12 +1899,12 @@ class EditorBase : public nsIEditor,
SpecifiedPoint,
ExistingTextNodeIfAvailable,
ExistingTextNodeIfAvailableAndNotStart,
- AlwaysCreateNewTextNode
+ AlwaysCreateNewTextNode,
};
[[nodiscard]] MOZ_CAN_RUN_SCRIPT virtual Result<InsertTextResult, nsresult>
InsertTextWithTransaction(const nsAString& aStringToInsert,
const EditorDOMPoint& aPointToInsert,
- InsertTextTo aInsertTextTo);
+ InsertTextTo aInsertTextTo, InsertTextFor aPurpose);
/**
* Compute insertion point from aPoint and aInsertTextTo.
@@ -1918,7 +1918,7 @@ class EditorBase : public nsIEditor,
[[nodiscard]] MOZ_CAN_RUN_SCRIPT Result<InsertTextResult, nsresult>
InsertTextIntoTextNodeWithTransaction(
const nsAString& aStringToInsert,
- const EditorDOMPointInText& aPointToInsert);
+ const EditorDOMPointInText& aPointToInsert, InsertTextFor aPurpose);
/**
* SetTextNodeWithoutTransaction() is optimized path to set new value to
diff --git a/editor/libeditor/HTMLEditSubActionHandler.cpp b/editor/libeditor/HTMLEditSubActionHandler.cpp
index ff44a0d6762..cf93631abe5 100644
--- a/editor/libeditor/HTMLEditSubActionHandler.cpp
+++ b/editor/libeditor/HTMLEditSubActionHandler.cpp
@@ -1178,7 +1178,8 @@ Result<EditActionResult, nsresult> HTMLEditor::HandleInsertText(
// since empty strings are meaningful there.
Result<InsertTextResult, nsresult> insertEmptyTextResultOrError =
InsertTextWithTransaction(aInsertionString, pointToInsert,
- InsertTextTo::ExistingTextNodeIfAvailable);
+ InsertTextTo::ExistingTextNodeIfAvailable,
+ aPurpose);
if (MOZ_UNLIKELY(insertEmptyTextResultOrError.isErr())) {
NS_WARNING("HTMLEditor::InsertTextWithTransaction() failed");
return insertEmptyTextResultOrError.propagateErr();
@@ -1426,9 +1427,9 @@ Result<EditActionResult, nsresult> HTMLEditor::HandleInsertText(
// not assumed that inserted text is split at every linefeed.
MOZ_ASSERT(*lineBreakType == LineBreakType::Linefeed);
Result<InsertTextResult, nsresult> insertTextResult =
- InsertTextWithTransaction(
- aInsertionString, currentPoint,
- InsertTextTo::ExistingTextNodeIfAvailable);
+ InsertTextWithTransaction(aInsertionString, currentPoint,
+ InsertTextTo::ExistingTextNodeIfAvailable,
+ aPurpose);
if (MOZ_UNLIKELY(insertTextResult.isErr())) {
NS_WARNING("HTMLEditor::InsertTextWithTransaction() failed");
return insertTextResult.propagateErr();
@@ -1463,7 +1464,8 @@ Result<EditActionResult, nsresult> HTMLEditor::HandleInsertText(
InsertTextWithTransaction(
lineText, currentPoint,
GetInsertTextTo(inclusiveNextLinefeedOffset,
- lineStartOffset));
+ lineStartOffset),
+ aPurpose);
if (MOZ_UNLIKELY(insertTextResult.isErr())) {
NS_WARNING("HTMLEditor::InsertTextWithTransaction() failed");
return insertTextResult.propagateErr();
@@ -2610,7 +2612,7 @@ HTMLEditor::DeleteTextAndNormalizeSurroundingWhiteSpaces(
ReplaceTextWithTransaction(
MOZ_KnownLive(*startToDelete.ContainerAs<Text>()),
startToDelete.Offset(), lengthToReplaceInFirstTextNode,
- normalizedWhiteSpacesInFirstNode);
+ normalizedWhiteSpacesInFirstNode, InsertTextFor::NormalText);
if (MOZ_UNLIKELY(replaceTextResult.isErr())) {
NS_WARNING("HTMLEditor::ReplaceTextWithTransaction() failed");
return replaceTextResult.propagateErr();
@@ -2686,7 +2688,7 @@ HTMLEditor::DeleteTextAndNormalizeSurroundingWhiteSpaces(
MOZ_KnownLive(*startToDelete.ContainerAs<Text>()),
startToDelete.Offset(),
endToDelete.Offset() - startToDelete.Offset(),
- normalizedWhiteSpacesInLastNode);
+ normalizedWhiteSpacesInLastNode, InsertTextFor::NormalText);
if (MOZ_UNLIKELY(replaceTextResult.isErr())) {
NS_WARNING("HTMLEditor::ReplaceTextWithTransaction() failed");
return replaceTextResult.propagateErr();
@@ -2835,7 +2837,8 @@ HTMLEditor::JoinTextNodesWithNormalizeWhiteSpaces(Text& aLeftText,
lastLeftChar && !IsCollapsibleChar(lastLeftChar)) {
if (firstRightChar != HTMLEditUtils::kSpace) {
Result<InsertTextResult, nsresult> replaceWhiteSpaceResultOrError =
- ReplaceTextWithTransaction(aRightText, 0u, 1u, u" "_ns);
+ ReplaceTextWithTransaction(aRightText, 0u, 1u, u" "_ns,
+ InsertTextFor::NormalText);
if (MOZ_UNLIKELY(replaceWhiteSpaceResultOrError.isErr())) {
NS_WARNING("HTMLEditor::ReplaceTextWithTransaction() failed");
return replaceWhiteSpaceResultOrError.propagateErr();
@@ -2872,8 +2875,9 @@ HTMLEditor::JoinTextNodesWithNormalizeWhiteSpaces(Text& aLeftText,
if (!IsCollapsibleCharOrNBSP(secondLastChar) &&
!IsCollapsibleCharOrNBSP(firstRightChar)) {
Result<InsertTextResult, nsresult> replaceWhiteSpaceResultOrError =
- ReplaceTextWithTransaction(
- aLeftText, aLeftText.DataBuffer().GetLength() - 1u, 1u, u" "_ns);
+ ReplaceTextWithTransaction(aLeftText,
+ aLeftText.DataBuffer().GetLength() - 1u,
+ 1u, u" "_ns, InsertTextFor::NormalText);
if (MOZ_UNLIKELY(replaceWhiteSpaceResultOrError.isErr())) {
NS_WARNING("HTMLEditor::ReplaceTextWithTransaction() failed");
return replaceWhiteSpaceResultOrError.propagateErr();
diff --git a/editor/libeditor/HTMLEditor.cpp b/editor/libeditor/HTMLEditor.cpp
index 7faba1b8831..53cece1867d 100644
--- a/editor/libeditor/HTMLEditor.cpp
+++ b/editor/libeditor/HTMLEditor.cpp
@@ -4031,11 +4031,12 @@ Result<CaretPoint, nsresult> HTMLEditor::DeleteTextWithTransaction(
}
Result<InsertTextResult, nsresult> HTMLEditor::ReplaceTextWithTransaction(
- dom::Text& aTextNode, const ReplaceWhiteSpacesData& aData) {
+ dom::Text& aTextNode, const ReplaceWhiteSpacesData& aData,
+ InsertTextFor aPurpose) {
Result<InsertTextResult, nsresult> insertTextResultOrError =
ReplaceTextWithTransaction(aTextNode, aData.mReplaceStartOffset,
- aData.ReplaceLength(),
- aData.mNormalizedString);
+ aData.ReplaceLength(), aData.mNormalizedString,
+ aPurpose);
if (MOZ_UNLIKELY(insertTextResultOrError.isErr()) ||
aData.mNewOffsetAfterReplace > aTextNode.TextDataLength()) {
return insertTextResultOrError;
@@ -4049,7 +4050,7 @@ Result<InsertTextResult, nsresult> HTMLEditor::ReplaceTextWithTransaction(
Result<InsertTextResult, nsresult> HTMLEditor::ReplaceTextWithTransaction(
Text& aTextNode, uint32_t aOffset, uint32_t aLength,
- const nsAString& aStringToInsert) {
+ const nsAString& aStringToInsert, InsertTextFor aPurpose) {
MOZ_ASSERT(IsEditActionDataAvailable());
MOZ_ASSERT(aLength > 0 || !aStringToInsert.IsEmpty());
@@ -4066,9 +4067,9 @@ Result<InsertTextResult, nsresult> HTMLEditor::ReplaceTextWithTransaction(
if (!aLength) {
Result<InsertTextResult, nsresult> insertTextResult =
- InsertTextWithTransaction(aStringToInsert,
- EditorDOMPoint(&aTextNode, aOffset),
- InsertTextTo::ExistingTextNodeIfAvailable);
+ InsertTextWithTransaction(
+ aStringToInsert, EditorDOMPoint(&aTextNode, aOffset),
+ InsertTextTo::ExistingTextNodeIfAvailable, aPurpose);
NS_WARNING_ASSERTION(insertTextResult.isOk(),
"HTMLEditor::InsertTextWithTransaction() failed");
return insertTextResult;
@@ -4152,18 +4153,18 @@ Result<InsertTextResult, nsresult> HTMLEditor::ReplaceTextWithTransaction(
Result<InsertTextResult, nsresult>
HTMLEditor::InsertOrReplaceTextWithTransaction(
const EditorDOMPoint& aPointToInsert,
- const NormalizedStringToInsertText& aData) {
+ const NormalizedStringToInsertText& aData, InsertTextFor aPurpose) {
MOZ_ASSERT(aPointToInsert.IsInContentNodeAndValid());
MOZ_ASSERT_IF(aData.ReplaceLength(), aPointToInsert.IsInTextNode());
Result<InsertTextResult, nsresult> insertTextResultOrError =
!aData.ReplaceLength()
? InsertTextWithTransaction(aData.mNormalizedString, aPointToInsert,
- InsertTextTo::SpecifiedPoint)
+ InsertTextTo::SpecifiedPoint, aPurpose)
: ReplaceTextWithTransaction(
MOZ_KnownLive(*aPointToInsert.ContainerAs<Text>()),
aData.mReplaceStartOffset, aData.ReplaceLength(),
- aData.mNormalizedString);
+ aData.mNormalizedString, aPurpose);
if (MOZ_UNLIKELY(insertTextResultOrError.isErr())) {
NS_WARNING(!aData.ReplaceLength()
? "HTMLEditor::InsertTextWithTransaction() failed"
@@ -4202,7 +4203,7 @@ HTMLEditor::InsertOrReplaceTextWithTransaction(
Result<InsertTextResult, nsresult> HTMLEditor::InsertTextWithTransaction(
const nsAString& aStringToInsert, const EditorDOMPoint& aPointToInsert,
- InsertTextTo aInsertTextTo) {
+ InsertTextTo aInsertTextTo, InsertTextFor aPurpose) {
if (NS_WARN_IF(!aPointToInsert.IsSet())) {
return Err(NS_ERROR_INVALID_ARG);
}
@@ -4214,7 +4215,7 @@ Result<InsertTextResult, nsresult> HTMLEditor::InsertTextWithTransaction(
}
return EditorBase::InsertTextWithTransaction(aStringToInsert, aPointToInsert,
- aInsertTextTo);
+ aInsertTextTo, aPurpose);
}
Result<EditorDOMPoint, nsresult> HTMLEditor::PrepareToInsertLineBreak(
diff --git a/editor/libeditor/HTMLEditor.h b/editor/libeditor/HTMLEditor.h
index 09d321f352a..5b01daffcf2 100644
--- a/editor/libeditor/HTMLEditor.h
+++ b/editor/libeditor/HTMLEditor.h
@@ -858,8 +858,8 @@ class HTMLEditor final : public EditorBase,
*/
[[nodiscard]] MOZ_CAN_RUN_SCRIPT Result<InsertTextResult, nsresult>
ReplaceTextWithTransaction(dom::Text& aTextNode, uint32_t aOffset,
- uint32_t aLength,
- const nsAString& aStringToInsert);
+ uint32_t aLength, const nsAString& aStringToInsert,
+ InsertTextFor aPurpose);
struct NormalizedStringToInsertText;
@@ -871,7 +871,8 @@ class HTMLEditor final : public EditorBase,
*/
[[nodiscard]] MOZ_CAN_RUN_SCRIPT Result<InsertTextResult, nsresult>
InsertOrReplaceTextWithTransaction(const EditorDOMPoint& aPointToInsert,
- const NormalizedStringToInsertText& aData);
+ const NormalizedStringToInsertText& aData,
+ InsertTextFor aPurpose);
struct ReplaceWhiteSpacesData;
@@ -880,7 +881,8 @@ class HTMLEditor final : public EditorBase,
*/
[[nodiscard]] MOZ_CAN_RUN_SCRIPT Result<InsertTextResult, nsresult>
ReplaceTextWithTransaction(dom::Text& aTextNode,
- const ReplaceWhiteSpacesData& aData);
+ const ReplaceWhiteSpacesData& aData,
+ InsertTextFor aPurpose);
/**
* Insert aStringToInsert to aPointToInsert. If the point is not editable,
@@ -889,7 +891,8 @@ class HTMLEditor final : public EditorBase,
[[nodiscard]] MOZ_CAN_RUN_SCRIPT Result<InsertTextResult, nsresult>
InsertTextWithTransaction(const nsAString& aStringToInsert,
const EditorDOMPoint& aPointToInsert,
- InsertTextTo aInsertTextTo) final;
+ InsertTextTo aInsertTextTo,
+ InsertTextFor aPurpose) final;
/**
* CopyLastEditableChildStyles() clones inline container elements into
diff --git a/editor/libeditor/TextEditSubActionHandler.cpp b/editor/libeditor/TextEditSubActionHandler.cpp
index ed04e4fcd1d..bc58868f5fd 100644
--- a/editor/libeditor/TextEditSubActionHandler.cpp
+++ b/editor/libeditor/TextEditSubActionHandler.cpp
@@ -218,7 +218,8 @@ TextEditor::InsertLineFeedCharacterAtSelection() {
// Insert a linefeed character.
Result<InsertTextResult, nsresult> insertTextResult =
InsertTextWithTransaction(u"\n"_ns, pointToInsert,
- InsertTextTo::ExistingTextNodeIfAvailable);
+ InsertTextTo::ExistingTextNodeIfAvailable,
+ InsertTextFor::NormalText);
if (MOZ_UNLIKELY(insertTextResult.isErr())) {
NS_WARNING("TextEditor::InsertTextWithTransaction(\"\\n\") failed");
return insertTextResult.propagateErr();
@@ -454,7 +455,8 @@ Result<EditActionResult, nsresult> TextEditor::HandleInsertText(
}
Result<InsertTextResult, nsresult> insertTextResult =
InsertTextWithTransaction(insertionString, compositionStartPoint,
- InsertTextTo::ExistingTextNodeIfAvailable);
+ InsertTextTo::ExistingTextNodeIfAvailable,
+ aPurpose);
if (MOZ_UNLIKELY(insertTextResult.isErr())) {
NS_WARNING("EditorBase::InsertTextWithTransaction() failed");
return insertTextResult.propagateErr();
@@ -475,7 +477,8 @@ Result<EditActionResult, nsresult> TextEditor::HandleInsertText(
Result<InsertTextResult, nsresult> insertTextResult =
InsertTextWithTransaction(insertionString, atStartOfSelection,
- InsertTextTo::ExistingTextNodeIfAvailable);
+ InsertTextTo::ExistingTextNodeIfAvailable,
+ aPurpose);
if (MOZ_UNLIKELY(insertTextResult.isErr())) {
NS_WARNING("EditorBase::InsertTextWithTransaction() failed");
return insertTextResult.propagateErr();
diff --git a/editor/libeditor/WhiteSpaceVisibilityKeeper.cpp b/editor/libeditor/WhiteSpaceVisibilityKeeper.cpp
index f8dde72d782..7d6470701bf 100644
--- a/editor/libeditor/WhiteSpaceVisibilityKeeper.cpp
+++ b/editor/libeditor/WhiteSpaceVisibilityKeeper.cpp
@@ -892,7 +892,8 @@ WhiteSpaceVisibilityKeeper::NormalizeWhiteSpacesAt(
const OwningNonNull<Text> textNode = *aPoint.ContainerAs<Text>();
Result<InsertTextResult, nsresult> insertTextResultOrError =
- aHTMLEditor.ReplaceTextWithTransaction(textNode, normalizedWhiteSpaces);
+ aHTMLEditor.ReplaceTextWithTransaction(textNode, normalizedWhiteSpaces,
+ InsertTextFor::NormalText);
if (MOZ_UNLIKELY(insertTextResultOrError.isErr())) {
NS_WARNING("HTMLEditor::ReplaceTextWithTransaction() failed");
return insertTextResultOrError.propagateErr();
@@ -986,7 +987,8 @@ WhiteSpaceVisibilityKeeper::NormalizeWhiteSpacesBefore(
continue;
}
Result<InsertTextResult, nsresult> replaceWhiteSpacesResultOrError =
- aHTMLEditor.ReplaceTextWithTransaction(*precedingTextNode, replaceData);
+ aHTMLEditor.ReplaceTextWithTransaction(*precedingTextNode, replaceData,
+ InsertTextFor::NormalText);
if (MOZ_UNLIKELY(replaceWhiteSpacesResultOrError.isErr())) {
NS_WARNING("HTMLEditor::ReplaceTextWithTransaction() failed");
return replaceWhiteSpacesResultOrError.propagateErr();
@@ -1102,7 +1104,8 @@ WhiteSpaceVisibilityKeeper::NormalizeWhiteSpacesAfter(
continue;
}
Result<InsertTextResult, nsresult> replaceWhiteSpacesResultOrError =
- aHTMLEditor.ReplaceTextWithTransaction(*followingTextNode, replaceData);
+ aHTMLEditor.ReplaceTextWithTransaction(*followingTextNode, replaceData,
+ InsertTextFor::NormalText);
if (MOZ_UNLIKELY(replaceWhiteSpacesResultOrError.isErr())) {
NS_WARNING("HTMLEditor::ReplaceTextWithTransaction() failed");
return replaceWhiteSpacesResultOrError.propagateErr();
@@ -1212,7 +1215,8 @@ WhiteSpaceVisibilityKeeper::NormalizeWhiteSpacesToSplitTextNodeAt(
: EditorDOMPoint::AtEndOf(*parentNode);
}
Result<InsertTextResult, nsresult> replaceWhiteSpacesResultOrError =
- aHTMLEditor.ReplaceTextWithTransaction(textNode, replaceWhiteSpacesData);
+ aHTMLEditor.ReplaceTextWithTransaction(textNode, replaceWhiteSpacesData,
+ InsertTextFor::NormalText);
... (file diff truncated)
Loading diff…
References
On This Page