Skip to content

Validate required fields in corsIframes entries to avoid throwing on malformed input#2125

Merged
bhokaremoin merged 3 commits intoPPLT-4949-add-cors-iframe-handling-and-multi-dom-width-configfrom
copilot/sub-pr-2121-again
Feb 28, 2026
Merged

Validate required fields in corsIframes entries to avoid throwing on malformed input#2125
bhokaremoin merged 3 commits intoPPLT-4949-add-cors-iframe-handling-and-multi-dom-width-configfrom
copilot/sub-pr-2121-again

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Feb 28, 2026

processCorsIframesInDomSnapshot() would throw on any corsIframes entry missing iframeSnapshot or iframeSnapshot.html, failing the entire snapshot rather than gracefully handling the bad entry.

Changes

  • packages/core/src/utils.js — Added a guard at the top of the corsIframes loop that skips entries missing frameUrl or iframeSnapshot.html, logging them at debug level:

    if (!frameUrl || !iframeSnapshot?.html) {
      logger('core:utils').debug('Skipping malformed corsIframes entry: missing frameUrl or iframeSnapshot.html', frame);
      continue;
    }
  • packages/core/test/utils.test.js — Added test cases covering: missing frameUrl, missing iframeSnapshot, missing iframeSnapshot.html, and mixed valid/invalid entry arrays.


💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

…sInDomSnapshot

Co-authored-by: bhokaremoin <75439850+bhokaremoin@users.noreply.github.com>
Copilot AI changed the title [WIP] Update responsive widths config endpoint and CORS processing Validate required fields in corsIframes entries to avoid throwing on malformed input Feb 28, 2026
@bhokaremoin bhokaremoin marked this pull request as ready for review February 28, 2026 18:45
@bhokaremoin bhokaremoin requested a review from a team as a code owner February 28, 2026 18:45
@bhokaremoin bhokaremoin requested review from Shivanshu-07 and ninadbstack and removed request for a team February 28, 2026 18:45
@bhokaremoin bhokaremoin merged commit 5ac3cb8 into PPLT-4949-add-cors-iframe-handling-and-multi-dom-width-config Feb 28, 2026
35 of 36 checks passed
@bhokaremoin bhokaremoin deleted the copilot/sub-pr-2121-again branch February 28, 2026 18:45
@bhokaremoin bhokaremoin restored the copilot/sub-pr-2121-again branch March 1, 2026 06:04
@bhokaremoin bhokaremoin deleted the copilot/sub-pr-2121-again branch March 1, 2026 06:04
prklm10 pushed a commit that referenced this pull request Mar 10, 2026
…g to core (#2121)

* feat: add responsive widths endpoint for multi-DOM capture

- Add GET /percy/widths-config endpoint to compute responsive widths
- Implement computeResponsiveWidths() in core utils for width/height calculation
- Add getResponsiveWidths() SDK method to fetch computed widths
- Mobile device widths include height, other widths are height-agnostic
- Returns widths sorted in ascending order

* adding unit tests

* fixing test coverage

* fixing test coverage

* feat: add CORS iframe processing support for domSnapshots

- Add processCorsIframes and processCorsIframesInDomSnapshot utilities in utils.js
- Add appendUrlSearchParam utility for adding query parameters to URLs
- Integrate CORS iframe processing in snapshot method before validation
- Process iframe resources and update HTML src attributes with width-aware URLs
- Support both single domSnapshot object and array of domSnapshots

* adding tests for cors iframes functionality

* moving creatating of iframe resource object logic to CLI from sdk, since its common

* fixing test

* adding nosemgrep comment for the regex error

* Fix regex injection via unescaped percyElementId in processCorsIframesInDomSnapshot (#2124)

* Initial plan

* fix: escape percyElementId before using in RegExp to prevent regex injection

Co-authored-by: bhokaremoin <75439850+bhokaremoin@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: bhokaremoin <75439850+bhokaremoin@users.noreply.github.com>

* Guard getResponsiveWidths return type with Array.isArray (#2126)

* Initial plan

* Use Array.isArray check in getResponsiveWidths to ensure stable array return type

Co-authored-by: bhokaremoin <75439850+bhokaremoin@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: bhokaremoin <75439850+bhokaremoin@users.noreply.github.com>

* Validate required fields in corsIframes entries to avoid throwing on malformed input (#2125)

* Initial plan

* Add validation for malformed corsIframes entries in processCorsIframesInDomSnapshot

Co-authored-by: bhokaremoin <75439850+bhokaremoin@users.noreply.github.com>

* adding validation for widths as well

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: bhokaremoin <75439850+bhokaremoin@users.noreply.github.com>
Co-authored-by: bhokaremoin <bhokaremoin@gmail.com>

* adding no semgrep

* fix: prioritize user-passed widths over mobile widths in computeResponsiveWidths

* fixing test

* adding cors iframe in config so it can become part of domSnapshot

* fixing test with the config change

---------

Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
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.

2 participants