Skip to content

fix(react-charts): prevent Sankey prototype pollution - #36704

Open
Paul Mardling (PaulGMardling) wants to merge 6 commits into
microsoft:masterfrom
PaulGMardling:fix/sankey-prototype-pollution
Open

fix(react-charts): prevent Sankey prototype pollution#36704
Paul Mardling (PaulGMardling) wants to merge 6 commits into
microsoft:masterfrom
PaulGMardling:fix/sankey-prototype-pollution

Conversation

@PaulGMardling

@PaulGMardling Paul Mardling (PaulGMardling) commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

Previous Behavior

Sankey chart data used regular JavaScript objects for dictionaries keyed by node identifiers. Node identifiers that overlap with Object prototype properties could produce incorrect chart processing.

New Behavior

Sankey chart dictionaries now use prototype-free objects in both @fluentui/react-charting and @fluentui/react-charts. Regression tests confirm that charts render correctly when node identifiers use prototype-property names.

Related Issue(s)

  • Fixes [MSRC] [144291]

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@PaulGMardling
Paul Mardling (PaulGMardling) marked this pull request as draft September 7, 2026 12:42
@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown

📊 Bundle size report

Package & Exports Baseline (minified/GZIP) PR Change
react-charting
DeclarativeChart
680.459 kB
193.864 kB
680.529 kB
193.896 kB
70 B
32 B
react-charting
SankeyChart
158.576 kB
49.642 kB
158.646 kB
49.662 kB
70 B
20 B
react-charts
DeclarativeChart
758.446 kB
222.689 kB
758.512 kB
222.715 kB
66 B
26 B
react-charts
SankeyChart
213.797 kB
68.722 kB
213.863 kB
68.747 kB
66 B
25 B
Unchanged fixtures
Package & Exports Size (minified/GZIP)
react-charting
AreaChart
305.154 kB
95.909 kB
react-charting
ChartHoverCard
37.29 kB
12.738 kB
react-charting
DonutChart
204.416 kB
64.319 kB
react-charting
GanttChart
287.222 kB
90.82 kB
react-charting
GaugeChart
197.731 kB
61.769 kB
react-charting
GroupedVerticalBarChart
297.023 kB
93.155 kB
react-charting
HeatMapChart
287.919 kB
90.559 kB
react-charting
HorizontalBarChart
127.475 kB
40.118 kB
react-charting
HorizontalBarChartWithAxis
298.395 kB
93.219 kB
react-charting
Legends
152.037 kB
46.832 kB
react-charting
LineChart
334.72 kB
102.945 kB
react-charting
MultiStackedBarChart
182.57 kB
55.844 kB
react-charting
PieChart
135.059 kB
42.757 kB
react-charting
PolarChart
235.701 kB
74.718 kB
react-charting
ScatterChart
291.196 kB
92.181 kB
react-charting
Sparkline
88.144 kB
29.862 kB
react-charting
StackedBarChart
176.145 kB
53.411 kB
react-charting
TreeChart
85.764 kB
27.102 kB
react-charting
VerticalBarChart
308.085 kB
95.291 kB
react-charting
VerticalStackedBarChart
305.195 kB
94.973 kB
react-charts
AreaChart
406.902 kB
127.183 kB
react-charts
DonutChart
317.733 kB
97.977 kB
react-charts
FunnelChart
309.133 kB
94.775 kB
react-charts
GanttChart
390.032 kB
121.663 kB
react-charts
GaugeChart
317.083 kB
97.402 kB
react-charts
GroupedVerticalBarChart
398.115 kB
124.454 kB
react-charts
HeatMapChart
392.172 kB
122.702 kB
react-charts
HorizontalBarChart
297.409 kB
90.473 kB
react-charts
HorizontalBarChartWithAxis
63 B
83 B
react-charts
Legends
236.596 kB
71.053 kB
react-charts
LineChart
418.251 kB
130.314 kB
react-charts
PolarChart
345.588 kB
108.005 kB
react-charts
ScatterChart
397.575 kB
124.369 kB
react-charts
Sparkline
80.888 kB
26.864 kB
react-charts
VerticalBarChart
434.566 kB
129.339 kB
react-charts
VerticalStackedBarChart
404.13 kB
125.845 kB
🤖 This report was generated against a9b5070c2e539a9dc41e12638f966c8ddef4f3bc

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actions github-actions Bot added the CI label Sep 7, 2026
@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown

Pull request demo site: URL

if: ${{ github.repository_owner == 'microsoft' }}
steps:
- uses: actions/checkout@v6
with:

@github-actions github-actions Bot Sep 7, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🕵🏾‍♀️ visual changes to review in the Visual Change Report

vr-tests-react-components/Menu Converged - submenuIndicator slotted content 1 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/Menu Converged - submenuIndicator slotted content.default - RTL.submenus open.chromium.png 404 Changed
vr-tests-react-components/Positioning 2 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/Positioning.Positioning end.chromium.png 167 Changed
vr-tests-react-components/Positioning.Positioning end.updated 2 times.chromium.png 621 Changed
vr-tests-react-components/ProgressBar converged 3 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/ProgressBar converged.Indeterminate + thickness - Dark Mode.default.chromium.png 66 Changed
vr-tests-react-components/ProgressBar converged.Indeterminate + thickness.default.chromium.png 41 Changed
vr-tests-react-components/ProgressBar converged.Indeterminate + thickness - High Contrast.default.chromium.png 113 Changed
vr-tests-react-components/TagPicker 2 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/TagPicker.disabled - Dark Mode.chromium.png 658 Changed
vr-tests-react-components/TagPicker.disabled.disabled input hover.chromium.png 677 Changed
vr-tests/Callout 5 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests/Callout.Bottom center.default.chromium.png 2128 Changed
vr-tests/Callout.Bottom left edge - RTL.default.chromium.png 2199 Changed
vr-tests/Callout.Left bottom edge.default.chromium.png 3182 Changed
vr-tests/Callout.Root.default.chromium.png 2195 Changed
vr-tests/Callout.Bottom right edge.default.chromium.png 1130 Changed
vr-tests/Coachmark 1 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests/Coachmark.Collapsed.default.chromium.png 159 Changed
vr-tests/Keytip 3 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests/Keytip.Disabled.default.chromium.png 24 Changed
vr-tests/Keytip.Offset.default.chromium.png 86 Changed
vr-tests/Keytip.Root.default.chromium.png 51 Changed
vr-tests/react-charting-AreaChart 1 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests/react-charting-AreaChart.Custom Accessibility.default.chromium.png 11 Changed
vr-tests/react-charting-LineChart 4 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests/react-charting-LineChart.Events - Dark Mode.default.chromium.png 16 Changed
vr-tests/react-charting-LineChart.Multiple - RTL.default.chromium.png 200 Changed
vr-tests/react-charting-LineChart.Multiple.default.chromium.png 192 Changed
vr-tests/react-charting-LineChart.Multiple - Dark Mode.default.chromium.png 181 Changed
vr-tests/react-charting-MultiStackBarChart 2 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests/react-charting-MultiStackBarChart.Basic_Absolute - RTL.default.chromium.png 343 Changed
vr-tests/react-charting-MultiStackBarChart.Basic_PartToWhole - Dark Mode.default.chromium.png 363 Changed
vr-tests/react-charting-SankeyChart 1 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests/react-charting-SankeyChart.PlaceHolder - Dark Mode.default.chromium.png 78 Changed
vr-tests/react-charting-VerticalBarChart 2 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests/react-charting-VerticalBarChart.Grouped - Wrap Labels.default.chromium.png 3105 Changed
vr-tests/react-charting-VerticalBarChart.Basic - Secondary Y Axis.default.chromium.png 3 Changed

There were 3 duplicate changes discarded. Check the build logs for more information.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@github-actions github-actions Bot removed the CI label Sep 7, 2026
@PaulGMardling
Paul Mardling (PaulGMardling) marked this pull request as ready for review September 7, 2026 14:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant