Skip to content

[0.84] fix: null dereference in get_SelectionContainer when no selection container exists#16111

Open
vineethkuttan wants to merge 2 commits into0.84-stablefrom
84null
Open

[0.84] fix: null dereference in get_SelectionContainer when no selection container exists#16111
vineethkuttan wants to merge 2 commits into0.84-stablefrom
84null

Conversation

@vineethkuttan
Copy link
Copy Markdown
Contributor

@vineethkuttan vineethkuttan commented May 11, 2026

Description

Type of Change

  • Bug fix (non-breaking change which fixes an issue)

Why

get_SelectionContainer (UIA SelectionItemPattern.SelectionContainer) crashes with a null dereference when the element has no ancestor with a selection container. GetSelectionContainer() walks the parent tree looking for a view with multiselectable and required props set; if none is found it returns nullptr, which was immediately dereferenced on the next line.

What

  • Added a null check on the return value of GetSelectionContainer() in get_SelectionContainer
  • Returns S_OK with *pRetVal == nullptr when no container is found — correct per UIA spec (element is simply not inside a selection container)
auto selectionContainerView = GetSelectionContainer();
// Per UIA spec, returning S_OK with *pRetVal == nullptr is correct when the element
// is not contained within a selection container.
if (!selectionContainerView)
  return S_OK;

Screenshots

N/A

Testing

Reproduced by calling get_SelectionContainer on a selection item whose ancestor tree contains no multiselectable container. Verified the null check prevents the crash and returns S_OK with a null provider pointer.

Changelog

Should this change be included in the release notes: yes

Fix crash (null dereference) in UIA SelectionItemPattern.get_SelectionContainer when the element has no selection

Microsoft Reviewers: Open in CodeFlow

…tainer exists (#16091)

* fix: null dereference in get_SelectionContainer when no container found

Agent-Logs-Url: https://github.com/microsoft/react-native-windows/sessions/dee66731-6253-459a-8ba1-f733d5bee554

Co-authored-by: vineethkuttan <66076509+vineethkuttan@users.noreply.github.com>

* Change files

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: vineethkuttan <66076509+vineethkuttan@users.noreply.github.com>
@vineethkuttan vineethkuttan requested a review from a team as a code owner May 11, 2026 00:51
@vineethkuttan vineethkuttan changed the title fix: null dereference in get_SelectionContainer when no selection container exists [0.84] fix: null dereference in get_SelectionContainer when no selection container exists May 11, 2026
@vineethkuttan vineethkuttan added the AutoMerge Causes a PR to be automatically merged once all requirements are passed (label drives bot activity) label May 11, 2026
@microsoft-github-policy-service microsoft-github-policy-service Bot enabled auto-merge (squash) May 11, 2026 01:16
@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 11, 2026

Performance Test Results

Branch: 84null
Commit: df19916e
Time: 2026-05-11T02:00:09.030Z
Tests: 161/161 passed

✅ Passed

161 scenario(s) across 28 suite(s) — no regressions

SectionList

Scenario Mean Median StdDev Renders vs Baseline
SectionList mount 5.00ms 5.00ms ±0.82ms 1 +0.0%
SectionList unmount 0.10ms 0.00ms ±0.32ms 0 +0.0%
SectionList rerender 12.20ms 12.00ms ±1.62ms 2 +14.3%
SectionList with-3-sections-15-items 5.30ms 5.50ms ±0.82ms 1 +0.0%
SectionList with-5-sections-50-items 6.10ms 6.00ms ±1.10ms 1 +0.0%
SectionList with-10-sections-200-items 5.60ms 5.00ms ±1.26ms 1 -9.1%
SectionList with-20-sections-200-items 4.80ms 5.00ms ±1.23ms 1 +0.0%
SectionList with-section-separator 1.90ms 2.00ms ±0.57ms 1 +0.0%
SectionList with-item-separator 2.00ms 2.00ms ±0.47ms 1 +0.0%
SectionList with-header-footer 1.90ms 2.00ms ±0.32ms 1 +0.0%
SectionList with-section-footer 2.50ms 2.00ms ±1.96ms 1 +0.0%
SectionList with-sticky-section-headers 1.30ms 1.00ms ±0.48ms 1 -50.0%
SectionList with-empty-list 0.50ms 0.50ms ±0.53ms 1 -50.0%
SectionList with-50-sections-1000-items 2.20ms 2.00ms ±1.40ms 1 +0.0%

FlatList

Scenario Mean Median StdDev Renders vs Baseline
FlatList mount 4.50ms 4.00ms ±1.08ms 1 +0.0%
FlatList unmount 0.10ms 0.00ms ±0.32ms 0 +0.0%
FlatList rerender 10.40ms 10.00ms ±0.97ms 2 +11.1%
FlatList with-10-items 5.00ms 5.00ms ±1.15ms 1 +25.0%
FlatList with-100-items 4.40ms 4.00ms ±0.52ms 1 -20.0%
FlatList with-500-items 4.90ms 4.50ms ±1.52ms 1 +12.5%
FlatList with-1000-items 3.90ms 4.00ms ±0.99ms 1 +0.0%
FlatList horizontal 4.50ms 4.50ms ±0.85ms 1 -10.0%
FlatList with-separator 1.60ms 2.00ms ±0.52ms 1 +0.0%
FlatList with-header-footer 1.60ms 2.00ms ±0.52ms 1 +0.0%
FlatList with-empty-list 0.50ms 0.50ms ±0.53ms 1 +0.0%
FlatList with-get-item-layout 1.50ms 1.00ms ±0.71ms 1 +0.0%
FlatList inverted 1.30ms 1.00ms ±0.48ms 1 -33.3%
FlatList with-num-columns 3.20ms 3.00ms ±1.75ms 1 +0.0%

TouchableOpacity

Scenario Mean Median StdDev Renders vs Baseline
TouchableOpacity mount 1.00ms 1.00ms ±0.00ms 1 +0.0%
TouchableOpacity unmount 0.10ms 0.00ms ±0.32ms 0 +0.0%
TouchableOpacity rerender 0.90ms 1.00ms ±0.74ms 2 +0.0%
TouchableOpacity custom-active-opacity 0.70ms 1.00ms ±0.48ms 1 +0.0%
TouchableOpacity disabled 0.60ms 1.00ms ±0.52ms 1 +0.0%
TouchableOpacity with-all-handlers 0.40ms 0.00ms ±0.52ms 1 -100.0%
TouchableOpacity with-hit-slop 0.90ms 1.00ms ±0.32ms 1 +0.0%
TouchableOpacity with-delay 0.70ms 1.00ms ±0.48ms 1 +0.0%
TouchableOpacity nested 1.30ms 1.00ms ±0.48ms 1 +0.0%
TouchableOpacity multiple-10 5.47ms 5.00ms ±1.55ms 1 -16.7%
TouchableOpacity multiple-50 26.20ms 25.00ms ±2.83ms 1 -13.8%
TouchableOpacity multiple-100 36.07ms 42.00ms ±11.93ms 1 -16.0%

ScrollView

Scenario Mean Median StdDev Renders vs Baseline
ScrollView mount 0.40ms 0.00ms ±0.52ms 1 +0.0%
ScrollView unmount 0.00ms 0.00ms ±0.00ms 0 +0.0%
ScrollView rerender 0.60ms 1.00ms ±0.52ms 2 +0.0%
ScrollView children-20 3.67ms 3.00ms ±1.23ms 1 -25.0%
ScrollView children-100 21.27ms 19.00ms ±12.09ms 1 +18.8%
ScrollView horizontal 3.50ms 3.50ms ±0.85ms 1 -12.5%
ScrollView sticky-headers 3.30ms 3.00ms ±0.67ms 1 +0.0%
ScrollView scroll-indicators 0.70ms 1.00ms ±0.48ms 1 +0.0%
ScrollView nested 1.30ms 1.00ms ±0.48ms 1 +0.0%
ScrollView content-container-style 0.70ms 1.00ms ±0.48ms 1 +0.0%
ScrollView children-500 20.93ms 21.00ms ±3.58ms 1 +10.5%

TouchableHighlight

Scenario Mean Median StdDev Renders vs Baseline
TouchableHighlight mount 0.50ms 0.50ms ±0.53ms 1 +0.0%
TouchableHighlight unmount 0.00ms 0.00ms ±0.00ms 0 +0.0%
TouchableHighlight rerender 0.60ms 1.00ms ±0.52ms 2 +0.0%
TouchableHighlight custom-underlay-color 0.50ms 0.50ms ±0.53ms 1 +Infinity%
TouchableHighlight custom-active-opacity 0.40ms 0.00ms ±0.52ms 1 +0.0%
TouchableHighlight disabled 0.50ms 0.50ms ±0.53ms 1 +Infinity%
TouchableHighlight with-all-handlers 0.30ms 0.00ms ±0.48ms 1 +0.0%
TouchableHighlight with-hit-slop 0.40ms 0.00ms ±0.52ms 1 +0.0%
TouchableHighlight nested-touchables 1.00ms 1.00ms ±0.00ms 1 +0.0%
TouchableHighlight multiple-touchables-10 2.50ms 2.50ms ±0.53ms 1 -16.7%
TouchableHighlight multiple-touchables-50 14.00ms 13.50ms ±1.56ms 1 +8.0%
TouchableHighlight multiple-touchables-100 24.90ms 25.00ms ±1.85ms 1 +11.1%

Pressable

Scenario Mean Median StdDev Renders vs Baseline
Pressable mount 0.60ms 1.00ms ±0.52ms 1 +Infinity%
Pressable unmount 0.10ms 0.00ms ±0.32ms 0 +0.0%
Pressable rerender 0.50ms 0.50ms ±0.53ms 2 +0.0%
Pressable with-all-handlers 0.40ms 0.00ms ±0.52ms 1 +0.0%
Pressable with-style-function 0.20ms 0.00ms ±0.42ms 1 +0.0%
Pressable disabled 0.40ms 0.00ms ±0.52ms 1 +0.0%
Pressable with-hit-slop 0.50ms 0.50ms ±0.53ms 1 +Infinity%
Pressable nested 0.70ms 1.00ms ±0.48ms 1 +0.0%
Pressable multiple-10 2.87ms 3.00ms ±0.35ms 1 +0.0%
Pressable multiple-50 16.60ms 16.00ms ±2.67ms 1 +14.3%
Pressable multiple-100 17.20ms 13.00ms ±10.32ms 1 +8.3%

Modal

Scenario Mean Median StdDev Renders vs Baseline
Modal mount 0.30ms 0.00ms ±0.48ms 1 +0.0%
Modal unmount 0.20ms 0.00ms ±0.42ms 0 +0.0%
Modal rerender 0.40ms 0.00ms ±0.52ms 2 +0.0%
Modal slide-animation 0.20ms 0.00ms ±0.42ms 1 +0.0%
Modal fade-animation 0.30ms 0.00ms ±0.48ms 1 +0.0%
Modal transparent 0.20ms 0.00ms ±0.42ms 1 +0.0%
Modal with-callbacks 0.30ms 0.00ms ±0.48ms 1 +0.0%
Modal rich-content 1.50ms 1.50ms ±0.53ms 1 -25.0%
Modal with-accessibility 0.20ms 0.00ms ±0.42ms 1 +0.0%

Image

Scenario Mean Median StdDev Renders vs Baseline
Image mount 0.20ms 0.00ms ±0.42ms 1 +0.0%
Image unmount 0.10ms 0.00ms ±0.32ms 0 +0.0%
Image rerender 0.20ms 0.00ms ±0.42ms 2 +0.0%
Image with-resize-mode 0.20ms 0.00ms ±0.42ms 1 +0.0%
Image with-border-radius 0.20ms 0.00ms ±0.42ms 1 +0.0%
Image with-tint-color 0.20ms 0.00ms ±0.42ms 1 +0.0%
Image with-blur-radius 0.20ms 0.00ms ±0.42ms 1 +0.0%
Image with-accessibility 0.00ms 0.00ms ±0.00ms 1 +0.0%
Image multiple-10 1.00ms 1.00ms ±0.00ms 1 +0.0%
Image multiple-50 3.73ms 4.00ms ±0.46ms 1 +33.3%
Image multiple-100 8.33ms 8.00ms ±1.54ms 1 +0.0%

ActivityIndicator

Scenario Mean Median StdDev Renders vs Baseline
ActivityIndicator mount 0.20ms 0.00ms ±0.42ms 1 +0.0%
ActivityIndicator unmount 0.10ms 0.00ms ±0.32ms 0 +0.0%
ActivityIndicator rerender 0.40ms 0.00ms ±0.52ms 2 +0.0%
ActivityIndicator size-large 0.00ms 0.00ms ±0.00ms 1 +0.0%
ActivityIndicator size-small 0.10ms 0.00ms ±0.32ms 1 +0.0%
ActivityIndicator with-color 0.10ms 0.00ms ±0.32ms 1 +0.0%
ActivityIndicator not-animating 0.20ms 0.00ms ±0.42ms 1 +0.0%
ActivityIndicator with-accessibility 0.10ms 0.00ms ±0.32ms 1 +0.0%
ActivityIndicator multiple-10 1.00ms 1.00ms ±0.00ms 1 +0.0%
ActivityIndicator multiple-50 3.73ms 4.00ms ±0.46ms 1 +0.0%
ActivityIndicator multiple-100 8.00ms 8.00ms ±1.00ms 1 +14.3%

Switch

Scenario Mean Median StdDev Renders vs Baseline
Switch mount 0.20ms 0.00ms ±0.42ms 1 +0.0%
Switch unmount 0.00ms 0.00ms ±0.00ms 0 +0.0%
Switch rerender 0.30ms 0.00ms ±0.48ms 2 -100.0%
Switch value-true 0.20ms 0.00ms ±0.42ms 1 +0.0%
Switch disabled 0.10ms 0.00ms ±0.32ms 1 +0.0%
Switch custom-colors 0.30ms 0.00ms ±0.48ms 1 +0.0%
Switch on-value-change 0.30ms 0.00ms ±0.48ms 1 +0.0%
Switch with-accessibility 0.30ms 0.00ms ±0.48ms 1 +0.0%
Switch multiple-10 1.73ms 2.00ms ±0.46ms 1 +0.0%
Switch multiple-50 9.53ms 8.00ms ±2.61ms 1 -11.1%
Switch multiple-100 18.33ms 17.00ms ±2.09ms 1 +6.3%

Button

Scenario Mean Median StdDev Renders vs Baseline
Button mount 0.60ms 1.00ms ±0.52ms 1 +0.0%
Button unmount 0.00ms 0.00ms ±0.00ms 0 +0.0%
Button rerender 1.40ms 1.00ms ±1.43ms 2 +0.0%
Button disabled 0.50ms 0.50ms ±0.53ms 1 -50.0%
Button with-color 0.70ms 1.00ms ±0.48ms 1 +100.0%
Button with-accessibility 0.50ms 0.50ms ±0.53ms 1 -50.0%
Button multiple-10 5.87ms 5.00ms ±1.41ms 1 -16.7%
Button multiple-50 21.67ms 26.00ms ±8.31ms 1 -3.7%
Button multiple-100 16.40ms 16.00ms ±3.27ms 1 -15.8%

TextInput

Scenario Mean Median StdDev Renders vs Baseline
TextInput mount 0.10ms 0.00ms ±0.32ms 1 +0.0%
TextInput unmount 0.00ms 0.00ms ±0.00ms 0 +0.0%
TextInput rerender 0.50ms 0.50ms ±0.53ms 2 +Infinity%
TextInput multiline 0.20ms 0.00ms ±0.42ms 1 +0.0%
TextInput with-value 0.10ms 0.00ms ±0.32ms 1 +0.0%
TextInput styled 0.20ms 0.00ms ±0.42ms 1 +0.0%
TextInput multiple-100 8.07ms 7.00ms ±1.49ms 1 +0.0%

View

Scenario Mean Median StdDev Renders vs Baseline
View mount 0.20ms 0.00ms ±0.42ms 1 +0.0%
View unmount 0.00ms 0.00ms ±0.00ms 0 +0.0%
View rerender 0.20ms 0.00ms ±0.42ms 2 +0.0%
View nested-50 4.00ms 4.00ms ±1.20ms 1 +33.3%
View nested-100 8.00ms 8.00ms ±1.41ms 1 +14.3%
View shadow 0.10ms 0.00ms ±0.32ms 1 +0.0%
View border-radius 0.10ms 0.00ms ±0.32ms 1 +0.0%
View nested-500 17.60ms 10.00ms ±12.87ms 1 +0.0%

Text

Scenario Mean Median StdDev Renders vs Baseline
Text mount 0.20ms 0.00ms ±0.42ms 1 +0.0%
Text unmount 0.00ms 0.00ms ±0.00ms 0 +0.0%
Text rerender 0.20ms 0.00ms ±0.42ms 2 +0.0%
Text long-1000 0.20ms 0.00ms ±0.42ms 1 +0.0%
Text nested 0.20ms 0.00ms ±0.42ms 1 +0.0%
Text styled 0.10ms 0.00ms ±0.32ms 1 +0.0%
Text multiple-100 8.47ms 8.00ms ±1.55ms 1 +14.3%

SectionList.native-perf-test.ts

Scenario Mean Median StdDev Renders vs Baseline
SectionList native mount 4.51ms 4.26ms ±0.51ms 1 -34.5%

FlatList.native-perf-test.ts

Scenario Mean Median StdDev Renders vs Baseline
FlatList native mount 4.61ms 4.65ms ±0.74ms 1 -49.6%

TouchableHighlight.native-perf-test.ts

Scenario Mean Median StdDev Renders vs Baseline
TouchableHighlight native mount 1.26ms 1.26ms ±0.06ms 1 -39.8%

TouchableOpacity.native-perf-test.ts

Scenario Mean Median StdDev Renders vs Baseline
TouchableOpacity native mount 1.50ms 1.47ms ±0.09ms 1 -53.3%

Pressable.native-perf-test.ts

Scenario Mean Median StdDev Renders vs Baseline
Pressable native mount 1.56ms 1.32ms ±0.62ms 1 -47.6%

ScrollView.native-perf-test.ts

Scenario Mean Median StdDev Renders vs Baseline
ScrollView native mount 3.75ms 3.49ms ±0.73ms 1 -13.7%

ActivityIndicator.native-perf-test.ts

Scenario Mean Median StdDev Renders vs Baseline
ActivityIndicator native mount 1.50ms 1.37ms ±0.23ms 1 -45.0%

TextInput.native-perf-test.ts

Scenario Mean Median StdDev Renders vs Baseline
TextInput native mount 2.28ms 2.02ms ±0.70ms 1 -50.5%

Switch.native-perf-test.ts

Scenario Mean Median StdDev Renders vs Baseline
Switch native mount 1.27ms 1.23ms ±0.14ms 1 -29.0%

Button.native-perf-test.ts

Scenario Mean Median StdDev Renders vs Baseline
Button native mount 1.82ms 1.78ms ±0.22ms 1 -31.6%

Modal.native-perf-test.ts

Scenario Mean Median StdDev Renders vs Baseline
Modal native mount 1.12ms 0.96ms ±0.55ms 1 -21.4%

Image.native-perf-test.ts

Scenario Mean Median StdDev Renders vs Baseline
Image native mount 2.00ms 1.74ms ±0.85ms 1 -23.1%

View.native-perf-test.ts

Scenario Mean Median StdDev Renders vs Baseline
View native mount 1.00ms 0.96ms ±0.14ms 1 -33.0%

Text.native-perf-test.ts

Scenario Mean Median StdDev Renders vs Baseline
Text native mount 1.23ms 1.13ms ±0.17ms 1 -34.8%

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

AutoMerge Causes a PR to be automatically merged once all requirements are passed (label drives bot activity)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants