Skip to content

fix(window-sharing): harden convertWindowsToPixels against malformed share links#18563

Draft
posthog[bot] wants to merge 1 commit into
masterfrom
posthog-code/harden-window-share-parsing
Draft

fix(window-sharing): harden convertWindowsToPixels against malformed share links#18563
posthog[bot] wants to merge 1 commit into
masterfrom
posthog-code/harden-window-share-parsing

Conversation

@posthog

@posthog posthog Bot commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Changes

A shared window-sharing link missing its size/position data crashed the page with an unhandled TypeError: Cannot read properties of undefined (reading 'width'). The windows query param is run through convertWindowsToPixels, which read parseFloat(win.size.width) (and .size.height, .position.x/y) with no validation — so an entry carrying only a path (e.g. a truncated share URL) took down the whole render.

convertWindowsToPixels is now defensive:

  • Bails to an empty array when windows isn't a well-formed array.
  • Skips entries without a valid path.
  • Leaves size/position undefined when their percentages are missing or non-numeric, so createNewWindow falls back to its existing sensible defaults.

The caller also bails gracefully instead of dereferencing an undefined initialWindow.

Why: A malformed or truncated share link circulating would otherwise crash the page for anyone who clicks it.

Checklist

  • I've read the docs and/or content style guides.
  • Words are spelled using American English
  • Use relative URLs for internal links
  • I've checked the pages added or changed in the Vercel preview build
  • If I moved a page, I added a redirect in vercel.json

Created with PostHog Code from an inbox report.

…share links

A shared window-sharing URL missing its `size`/`position` data (e.g. an entry
carrying only a `path`) crashed the page with an unhandled TypeError when
`convertWindowsToPixels` read `win.size.width` on an undefined `size`.

Make the conversion defensive: bail on non-array input, skip entries without a
valid path, and leave `size`/`position` undefined when the percentages are
missing or non-numeric so `createNewWindow` falls back to its sensible defaults.
The caller now also bails gracefully when no usable window remains.

Generated-By: PostHog Code
Task-Id: f452db89-1195-42f1-b8b0-563d90c08fed
@github-actions

github-actions Bot commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Deploy preview

Status Details Updated (UTC)
🟢 Ready View preview Jul 15, 2026 06:47PM

@github-actions

Copy link
Copy Markdown
Contributor

Bundle report

Total JS (gzip)

6.31 MiB (+0.3 KiB / +0.0%)

Eager graph (modules shipped in each entrypoint's initial chunks)

Entrypoint Eager size Budget Modules
app 15.60 MiB (+1.5 KiB / +0.0%) report-only 1945
Largest modules in the app closure
Module Size
css ./node_modules/.pnpm/css-loader@5.2.7_webpack@5.101.3/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[8].oneOf[1].use[1]!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.5.6_webpack@5.101.3/node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[8].oneOf[1].use[2]!./src/styles/global.css 711.1 KiB
./src/components/Stickers/Stickers.tsx 696.4 KiB
./.cache/caches/gatsby-plugin-mdx/mdx-scopes-dir/31a094f140f119e73085d847ae81b99b.js + 2 modules 627.7 KiB
./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.3.1/node_modules/@radix-ui/react-icons/dist/react-icons.esm.js 481.4 KiB
./node_modules/.pnpm/rehype-raw@7.0.0/node_modules/rehype-raw/lib/index.js + 29 modules 395.1 KiB
./node_modules/.pnpm/@posthog+icons@0.36.6_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/icons/dist/posthog-icons.cjs.js 364.8 KiB
./src/hooks/useCustomers.tsx + 54 modules 355.1 KiB
./node_modules/.pnpm/@posthog+icons@0.36.6_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/icons/dist/posthog-icons.es.js 354.8 KiB
./node_modules/.pnpm/react-markdown@8.0.7_@types+react@16.14.66_react@18.3.1/node_modules/react-markdown/lib/react-markdown.js + 88 modules 351.4 KiB
./node_modules/.pnpm/cloudinary-core@2.14.0_lodash@4.17.21/node_modules/cloudinary-core/cloudinary-core.js 281.9 KiB
./src/components/ProductComparisonTable/index.tsx + 120 modules 278.5 KiB
./node_modules/.pnpm/d3@7.9.0/node_modules/d3/src/index.js + 208 modules 247.4 KiB
./src/components/Pricing/PricingSlider/Slider.tsx + 87 modules 239.9 KiB
./gatsby-browser.tsx + 41 modules 239.8 KiB
./src/components/SearchUI/index.tsx + 73 modules 223.4 KiB

Eager-graph budgets are report-only until a baseline is established. Sizes are gzip of public/**/*.js; eager size is webpack module source bytes for the modules actually shipped in the entrypoint's initial chunks (post-tree-shake).

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.

0 participants