Title: [283165] trunk/Source/WebCore
- Revision
- 283165
- Author
- [email protected]
- Date
- 2021-09-28 05:55:10 -0700 (Tue, 28 Sep 2021)
Log Message
REGRESSION(r283158): TestWebKitAPI.WebKit.AddAndRemoveDataDetectors is crashing on iOS
https://bugs.webkit.org/show_bug.cgi?id=230890
Unreviewed.
* editing/cocoa/DataDetection.mm:
(WebCore::DataDetection::detectContentInRange):
Scope TextIterator so it is not in stack when DOM is being mutated.
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (283164 => 283165)
--- trunk/Source/WebCore/ChangeLog 2021-09-28 12:44:11 UTC (rev 283164)
+++ trunk/Source/WebCore/ChangeLog 2021-09-28 12:55:10 UTC (rev 283165)
@@ -1,3 +1,15 @@
+2021-09-28 Antti Koivisto <[email protected]>
+
+ REGRESSION(r283158): TestWebKitAPI.WebKit.AddAndRemoveDataDetectors is crashing on iOS
+ https://bugs.webkit.org/show_bug.cgi?id=230890
+
+ Unreviewed.
+
+ * editing/cocoa/DataDetection.mm:
+ (WebCore::DataDetection::detectContentInRange):
+
+ Scope TextIterator so it is not in stack when DOM is being mutated.
+
2021-09-27 Myles C. Maxfield <[email protected]>
override-color has been renamed to override-colors
Modified: trunk/Source/WebCore/editing/cocoa/DataDetection.mm (283164 => 283165)
--- trunk/Source/WebCore/editing/cocoa/DataDetection.mm 2021-09-28 12:44:11 UTC (rev 283164)
+++ trunk/Source/WebCore/editing/cocoa/DataDetection.mm 2021-09-28 12:55:10 UTC (rev 283165)
@@ -485,47 +485,49 @@
}
Vector<Vector<SimpleRange>> allResultRanges;
- TextIterator iterator(contextRange);
- CFIndex iteratorCount = 0;
+ {
+ TextIterator iterator(contextRange);
+ CFIndex iteratorCount = 0;
- // Iterate through the array of the expanded results to create a vector of Range objects that indicate
- // where the DOM needs to be modified.
- // Each result can be contained all in one text node or can span multiple text nodes.
- for (auto& result : allResults) {
- DDQueryRange queryRange = PAL::softLink_DataDetectorsCore_DDResultGetQueryRangeForURLification(result.get());
- CFIndex iteratorTargetAdvanceCount = (CFIndex)PAL::softLink_DataDetectorsCore_DDScanQueryGetFragmentMetaData(scanQuery.get(), queryRange.start.queryIndex);
- for (; iteratorCount < iteratorTargetAdvanceCount; ++iteratorCount)
- iterator.advance();
-
- Vector<SimpleRange> fragmentRanges;
- CFIndex fragmentIndex = queryRange.start.queryIndex;
- if (fragmentIndex == queryRange.end.queryIndex) {
- CharacterRange fragmentRange;
- fragmentRange.location = queryRange.start.offset;
- fragmentRange.length = queryRange.end.offset - queryRange.start.offset;
- fragmentRanges.append(resolveCharacterRange(iterator.range(), fragmentRange));
- } else {
- auto range = iterator.range();
- range.start.offset += queryRange.start.offset;
- fragmentRanges.append(range);
- }
-
- while (fragmentIndex < queryRange.end.queryIndex) {
- ++fragmentIndex;
- iteratorTargetAdvanceCount = (CFIndex)PAL::softLink_DataDetectorsCore_DDScanQueryGetFragmentMetaData(scanQuery.get(), fragmentIndex);
+ // Iterate through the array of the expanded results to create a vector of Range objects that indicate
+ // where the DOM needs to be modified.
+ // Each result can be contained all in one text node or can span multiple text nodes.
+ for (auto& result : allResults) {
+ DDQueryRange queryRange = PAL::softLink_DataDetectorsCore_DDResultGetQueryRangeForURLification(result.get());
+ CFIndex iteratorTargetAdvanceCount = (CFIndex)PAL::softLink_DataDetectorsCore_DDScanQueryGetFragmentMetaData(scanQuery.get(), queryRange.start.queryIndex);
for (; iteratorCount < iteratorTargetAdvanceCount; ++iteratorCount)
iterator.advance();
- auto fragmentRange = iterator.range();
- if (fragmentIndex == queryRange.end.queryIndex)
- fragmentRange.end.offset = fragmentRange.start.offset + queryRange.end.offset;
- auto& previousRange = fragmentRanges.last();
- if (previousRange.start.container.ptr() == fragmentRange.start.container.ptr())
- previousRange.end = fragmentRange.end;
- else
- fragmentRanges.append(fragmentRange);
+ Vector<SimpleRange> fragmentRanges;
+ CFIndex fragmentIndex = queryRange.start.queryIndex;
+ if (fragmentIndex == queryRange.end.queryIndex) {
+ CharacterRange fragmentRange;
+ fragmentRange.location = queryRange.start.offset;
+ fragmentRange.length = queryRange.end.offset - queryRange.start.offset;
+ fragmentRanges.append(resolveCharacterRange(iterator.range(), fragmentRange));
+ } else {
+ auto range = iterator.range();
+ range.start.offset += queryRange.start.offset;
+ fragmentRanges.append(range);
+ }
+
+ while (fragmentIndex < queryRange.end.queryIndex) {
+ ++fragmentIndex;
+ iteratorTargetAdvanceCount = (CFIndex)PAL::softLink_DataDetectorsCore_DDScanQueryGetFragmentMetaData(scanQuery.get(), fragmentIndex);
+ for (; iteratorCount < iteratorTargetAdvanceCount; ++iteratorCount)
+ iterator.advance();
+
+ auto fragmentRange = iterator.range();
+ if (fragmentIndex == queryRange.end.queryIndex)
+ fragmentRange.end.offset = fragmentRange.start.offset + queryRange.end.offset;
+ auto& previousRange = fragmentRanges.last();
+ if (previousRange.start.container.ptr() == fragmentRange.start.container.ptr())
+ previousRange.end = fragmentRange.end;
+ else
+ fragmentRanges.append(fragmentRange);
+ }
+ allResultRanges.append(WTFMove(fragmentRanges));
}
- allResultRanges.append(WTFMove(fragmentRanges));
}
auto tz = adoptCF(CFTimeZoneCopyDefault());
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes