Skip to content

fix(core): Ensure fill only patches functions - #15632

Merged
Lms24 merged 3 commits into
developfrom
lms/fix-core-history-check
Mar 11, 2025
Merged

fix(core): Ensure fill only patches functions#15632
Lms24 merged 3 commits into
developfrom
lms/fix-core-history-check

Conversation

@Lms24

@Lms24Lms24 commented Mar 11, 2025

Copy link
Copy Markdown
Member

This PR adds a guard to our fill utility that we use to instrument/wrap methods defined on an object. However, due to a misleading type cast in fill we didn't check if the name of the method to be patched actually corresponded to a function on an object.

This was surfaced via #15552 where we'd call fill on window.history(pushState|replaceState) without checking if these two methods were actually available or functions.

Note: I initially solved this on the instrumentHistory level but then noticed that this is a more general bug in fill. Therefore I added some history-specific tests as well but I'd rather keep them than removing them. Fun fact: The more general fix saves ~8 Bytes of bundle size compared to my initial history-based fix 😅

closes#15552

@Lms24Lms24 self-assigned this Mar 11, 2025
*/
export function supportsHistory(): boolean {
return 'history' in WINDOW;
return 'history' in WINDOW && !!WINDOW.history;

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Improved this check so that if history was undefined or null we'd also return false here

@Lms24
Lms24 requested review from andreiborza and lforstMarch 11, 2025 15:02
@github-actions

github-actionsBot commented Mar 11, 2025

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser23.15 KB+0.05%+10 B 🔺
@sentry/browser - with treeshaking flags22.94 KB+0.06%+13 B 🔺
@sentry/browser (incl. Tracing)36.21 KB+0.03%+9 B 🔺
@sentry/browser (incl. Tracing, Replay)73.39 KB+0.02%+10 B 🔺
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags66.8 KB+0.02%+9 B 🔺
@sentry/browser (incl. Tracing, Replay with Canvas)78.01 KB+0.02%+10 B 🔺
@sentry/browser (incl. Tracing, Replay, Feedback)90.57 KB+0.02%+11 B 🔺
@sentry/browser (incl. Feedback)40.3 KB+0.03%+10 B 🔺
@sentry/browser (incl. sendFeedback)27.79 KB+0.04%+9 B 🔺
@sentry/browser (incl. FeedbackAsync)32.58 KB+0.03%+10 B 🔺
@sentry/react24.97 KB+0.04%+10 B 🔺
@sentry/react (incl. Tracing)38.1 KB+0.03%+10 B 🔺
@sentry/vue27.4 KB+0.05%+12 B 🔺
@sentry/vue (incl. Tracing)37.9 KB+0.03%+9 B 🔺
@sentry/svelte23.18 KB+0.05%+10 B 🔺
CDN Bundle24.36 KB+0.05%+12 B 🔺
CDN Bundle (incl. Tracing)36.26 KB+0.03%+11 B 🔺
CDN Bundle (incl. Tracing, Replay)71.27 KB+0.02%+12 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback)76.44 KB+0.02%+12 B 🔺
CDN Bundle - uncompressed71.19 KB+0.07%+49 B 🔺
CDN Bundle (incl. Tracing) - uncompressed107.57 KB+0.05%+49 B 🔺
CDN Bundle (incl. Tracing, Replay) - uncompressed218.84 KB+0.03%+49 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed231.4 KB+0.03%+49 B 🔺
@sentry/nextjs (client)39.27 KB+0.04%+13 B 🔺
@sentry/sveltekit (client)36.63 KB+0.03%+9 B 🔺
@sentry/node142.15 KB+0.01%+5 B 🔺
@sentry/node - without tracing95.58 KB+0.01%+4 B 🔺
@sentry/aws-serverless119.92 KB+0.01%+4 B 🔺

View base workflow run

@Lms24

Lms24 commented Mar 11, 2025

Copy link
Copy Markdown
MemberAuthor

I will rework this to more generally fix the wird behaviour in our fill patching utility.
EDIT: Done


expect(WINDOW.history).toEqual({
replaceState: expect.any(Function), // patched function
pushState: undefined, // unpatched

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

prior to this PR, pushState would have become a Function, resulting in the wrapper function calling undefined.apply on the "original function".

@Lms24Lms24 changed the title fix(browser): Only patch available window.history propertiesfix(core): Ensure fill only patches functionsMar 11, 2025
@Lms24
Lms24 marked this pull request as ready for review March 11, 2025 15:24

@andreiborzaandreiborza left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

nice, thanks for guarding this

@Lms24
Lms24 merged commit 47f95e5 into developMar 11, 2025
@Lms24
Lms24 deleted the lms/fix-core-history-check branch March 11, 2025 16:27
aviator-appBot added a commit to reisene/HulajDusza-serwis that referenced this pull request Apr 10, 2025
![snyk-io[bot]](https://badgen.net/badge/icon/snyk-io%5Bbot%5D/green?label=) ![Contributor](https://badgen.net/badge/icon/Contributor/000000?label=) [<img width="16" alt="Powered by Pull Request Badge" src="https://user-images.githubusercontent.com/1393946/111216524-d2bb8e00-85d4-11eb-821b-ed4c00989c02.png">](https://pullrequestbadge.com/?utm_medium=github&utm_source=reisene&utm_campaign=badge_info)<!-- PR-BADGE: PLEASE DO NOT REMOVE THIS COMMENT -->
![snyk-top-banner](https://res.cloudinary.com/snyk/image/upload/r-d/scm-platform/snyk-pull-requests/pr-banner-default.svg)
<h3>Snyk has created this PR to upgrade @sentry/browser from 9.5.0 to 9.6.1.</h3>
:information_source: Keep your dependencies up-to-date. This makes it easier to fix existing vulnerabilities and to more quickly identify and fix newly disclosed vulnerabilities when they affect your project.
<hr/>
- The recommended version is **3 versions** ahead of your current version.
- The recommended version was released **22 days ago**.
<details>
<summary><b>Release notes</b></summary>
<br/>
<details>
<summary>Package name: <b>@sentry/browser</b></summary>
<ul>
<li>
<b>9.6.1</b> - <a href="https://redirect.github.com/getsentry/sentry-javascript/releases/tag/9.6.1">2025-03-19</a></br><ul>
<li>feat(deps): bump @ prisma/instrumentation from 6.4.1 to 6.5.0 (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15714" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15714/hovercard">#15714</a>)</li>
<li>feat(deps): bump @ sentry/cli from 2.42.2 to 2.42.3 (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15711" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15711/hovercard">#15711</a>)</li>
<li>fix(nextjs): Re-patch router if it is overridden by Next.js (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15721" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15721/hovercard">#15721</a>)</li>
<li>fix(nuxt): Add Nitro Rollup plugin to inject Sentry server config (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15710" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15710/hovercard">#15710</a>)</li>
<li>chore(deps): Bump rollup to 4.35.0 (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15651" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15651/hovercard">#15651</a>)</li>
</ul>
<h2>Bundle size 📦</h2>
<table>
<thead>
<tr>
<th>Path</th>
<th>Size</th>
</tr>
</thead>
<tbody>
<tr>
<td>@ sentry/browser</td>
<td>23.15 KB</td>
</tr>
<tr>
<td>@ sentry/browser - with treeshaking flags</td>
<td>22.94 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing)</td>
<td>36.21 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay)</td>
<td>73.39 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay) - with treeshaking flags</td>
<td>66.81 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay with Canvas)</td>
<td>78.01 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay, Feedback)</td>
<td>90.57 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Feedback)</td>
<td>40.3 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. sendFeedback)</td>
<td>27.79 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. FeedbackAsync)</td>
<td>32.58 KB</td>
</tr>
<tr>
<td>@ sentry/react</td>
<td>24.97 KB</td>
</tr>
<tr>
<td>@ sentry/react (incl. Tracing)</td>
<td>38.1 KB</td>
</tr>
<tr>
<td>@ sentry/vue</td>
<td>27.4 KB</td>
</tr>
<tr>
<td>@ sentry/vue (incl. Tracing)</td>
<td>37.9 KB</td>
</tr>
<tr>
<td>@ sentry/svelte</td>
<td>23.18 KB</td>
</tr>
<tr>
<td>CDN Bundle</td>
<td>24.36 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing)</td>
<td>36.26 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay)</td>
<td>71.27 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback)</td>
<td>76.45 KB</td>
</tr>
<tr>
<td>CDN Bundle - uncompressed</td>
<td>71.19 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing) - uncompressed</td>
<td>107.57 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay) - uncompressed</td>
<td>218.83 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed</td>
<td>231.39 KB</td>
</tr>
<tr>
<td>@ sentry/nextjs (client)</td>
<td>39.38 KB</td>
</tr>
<tr>
<td>@ sentry/sveltekit (client)</td>
<td>36.63 KB</td>
</tr>
<tr>
<td>@ sentry/node</td>
<td>142.29 KB</td>
</tr>
<tr>
<td>@ sentry/node - without tracing</td>
<td>95.71 KB</td>
</tr>
<tr>
<td>@ sentry/aws-serverless</td>
<td>120.06 KB</td>
</tr>
</tbody>
</table>
</li>
<li>
<b>9.6.0</b> - <a href="https://redirect.github.com/getsentry/sentry-javascript/releases/tag/9.6.0">2025-03-17</a></br><h3>Important Changes</h3>
<ul>
<li>
<p><strong>feat(tanstackstart): Add <code>@ sentry/tanstackstart-react</code> package and make <code>@ sentry/tanstackstart</code> package a utility package (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15629" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15629/hovercard">#15629</a>)</strong></p>
<p>Since TanStack Start is supposed to be a generic framework that supports libraries like React and Solid, the <code>@ sentry/tanstackstart</code> SDK package was renamed to <code>@ sentry/tanstackstart-react</code> to reflect that the SDK is specifically intended to be used for React TanStack Start applications.<br>
Note that the TanStack Start SDK is still in alpha status and may be subject to breaking changes in non-major package updates.</p>
</li>
</ul>
<h3>Other Changes</h3>
<ul>
<li>feat(astro): Accept all vite-plugin options (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15638" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15638/hovercard">#15638</a>)</li>
<li>feat(deps): bump @ sentry/webpack-plugin from 3.2.1 to 3.2.2 (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15627" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15627/hovercard">#15627</a>)</li>
<li>feat(tanstackstart): Refine initial API (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15574" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15574/hovercard">#15574</a>)</li>
<li>fix(core): Ensure <code>fill</code> only patches functions (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15632" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15632/hovercard">#15632</a>)</li>
<li>fix(nextjs): Consider <code>pageExtensions</code> when looking for instrumentation file (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15701" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15701/hovercard">#15701</a>)</li>
<li>fix(remix): Null-check <code>options</code> (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15610" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15610/hovercard">#15610</a>)</li>
<li>fix(sveltekit): Correctly parse angle bracket type assertions for auto instrumentation (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15578" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15578/hovercard">#15578</a>)</li>
<li>fix(sveltekit): Guard process variable (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15605" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15605/hovercard">#15605</a>)</li>
</ul>
<p>Work in this release was contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/angelikatyborska/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/angelikatyborska">@ angelikatyborska</a> and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/nwalters512/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/nwalters512">@ nwalters512</a>. Thank you for your contributions!</p>
<h2>Bundle size 📦</h2>
<table>
<thead>
<tr>
<th>Path</th>
<th>Size</th>
</tr>
</thead>
<tbody>
<tr>
<td>@ sentry/browser</td>
<td>23.15 KB</td>
</tr>
<tr>
<td>@ sentry/browser - with treeshaking flags</td>
<td>22.94 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing)</td>
<td>36.21 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay)</td>
<td>73.39 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay) - with treeshaking flags</td>
<td>66.8 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay with Canvas)</td>
<td>78.01 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay, Feedback)</td>
<td>90.57 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Feedback)</td>
<td>40.3 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. sendFeedback)</td>
<td>27.79 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. FeedbackAsync)</td>
<td>32.58 KB</td>
</tr>
<tr>
<td>@ sentry/react</td>
<td>24.97 KB</td>
</tr>
<tr>
<td>@ sentry/react (incl. Tracing)</td>
<td>38.1 KB</td>
</tr>
<tr>
<td>@ sentry/vue</td>
<td>27.4 KB</td>
</tr>
<tr>
<td>@ sentry/vue (incl. Tracing)</td>
<td>37.9 KB</td>
</tr>
<tr>
<td>@ sentry/svelte</td>
<td>23.18 KB</td>
</tr>
<tr>
<td>CDN Bundle</td>
<td>24.36 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing)</td>
<td>36.26 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay)</td>
<td>71.27 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback)</td>
<td>76.45 KB</td>
</tr>
<tr>
<td>CDN Bundle - uncompressed</td>
<td>71.19 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing) - uncompressed</td>
<td>107.57 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay) - uncompressed</td>
<td>218.84 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed</td>
<td>231.4 KB</td>
</tr>
<tr>
<td>@ sentry/nextjs (client)</td>
<td>39.27 KB</td>
</tr>
<tr>
<td>@ sentry/sveltekit (client)</td>
<td>36.63 KB</td>
</tr>
<tr>
<td>@ sentry/node</td>
<td>142.15 KB</td>
</tr>
<tr>
<td>@ sentry/node - without tracing</td>
<td>95.58 KB</td>
</tr>
<tr>
<td>@ sentry/aws-serverless</td>
<td>119.92 KB</td>
</tr>
</tbody>
</table>
</li>
<li>
<b>9.6.0-alpha.0</b> - 2025-03-06
</li>
<li>
<b>9.5.0</b> - 2025-03-06
</li>
</ul>
from <a href="https://redirect.github.com/getsentry/sentry-javascript/releases">@sentry/browser GitHub release notes</a>
</details>
</details>
---
> [!IMPORTANT]
>
> - Check the changes in this PR to ensure they won't cause issues with your project.
> - This PR was automatically created by Snyk using the credentials of a real user.
---
**Note:** _You are seeing this because you or someone else with access to this repository has authorized Snyk to open upgrade PRs._
**For more information:** <img src="https://api.segment.io/v1/pixel/track?data=eyJ3cml0ZUtleSI6InJyWmxZcEdHY2RyTHZsb0lYd0dUcVg4WkFRTnNCOUEwIiwiYW5vbnltb3VzSWQiOiJhYjgwMDgxOS1lZTdkLTRiNzMtOGU2MS03ZWM1MWRlZDEwOWUiLCJldmVudCI6IlBSIHZpZXdlZCIsInByb3BlcnRpZXMiOnsicHJJZCI6ImFiODAwODE5LWVlN2QtNGI3My04ZTYxLTdlYzUxZGVkMTA5ZSJ9fQ==" width="0" height="0"/>
> - 🧐 [View latest project report](https://app.snyk.io/org/reisene/project/55e114f8-489e-4f14-b900-20574b041e59?utm_source&#x3D;github-cloud-app&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr)
> - 📜 [Customise PR templates](https://docs.snyk.io/scan-using-snyk/pull-requests/snyk-fix-pull-or-merge-requests/customize-pr-templates?utm_source=&utm_content=fix-pr-template)
> - 🛠 [Adjust upgrade PR settings](https://app.snyk.io/org/reisene/project/55e114f8-489e-4f14-b900-20574b041e59/settings/integration?utm_source&#x3D;github-cloud-app&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr)
> - 🔕 [Ignore this dependency or unsubscribe from future upgrade PRs](https://app.snyk.io/org/reisene/project/55e114f8-489e-4f14-b900-20574b041e59/settings/integration?pkg&#x3D;@sentry/browser&amp;utm_source&#x3D;github-cloud-app&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr#auto-dep-upgrades)
[//]: # 'snyk:metadata:{"customTemplate":{"variablesUsed":[],"fieldsUsed":[]},"dependencies":[{"name":"@sentry/browser","from":"9.5.0","to":"9.6.1"}],"env":"prod","hasFixes":false,"isBreakingChange":false,"isMajorUpgrade":false,"issuesToFix":[],"prId":"ab800819-ee7d-4b73-8e61-7ec51ded109e","prPublicId":"ab800819-ee7d-4b73-8e61-7ec51ded109e","packageManager":"npm","priorityScoreList":[],"projectPublicId":"55e114f8-489e-4f14-b900-20574b041e59","projectUrl":"https://app.snyk.io/org/reisene/project/55e114f8-489e-4f14-b900-20574b041e59?utm_source=github-cloud-app&utm_medium=referral&page=upgrade-pr","prType":"upgrade","templateFieldSources":{"branchName":"default","commitMessage":"default","description":"default","title":"default"},"templateVariants":[],"type":"auto","upgrade":[],"upgradeInfo":{"versionsDiff":3,"publishedDate":"2025-03-19T10:03:32.247Z"},"vulns":[]}'
## Podsumowanie od Sourcery
Ulepszenia:
- Aktualizacja pakietu Sentry dla przeglądarki do najnowszej wersji minor
<details>
<summary>Original summary in English</summary>
## Summary by Sourcery
Enhancements:
- Update Sentry browser package to the latest minor version
</details>
Sign up for freeto 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.

[@sentry-internal/browser-utils]: Cannot read properties of null (reading 'apply')

2 participants

@Lms24@andreiborza
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
fix(core): Ensure `fill` only patches functions by Lms24 · Pull Request #15632 · getsentry/sentry-javascript · GitHub
Skip to content

fix(core): Ensure fill only patches functions - #15632

Merged
Lms24 merged 3 commits into
developfrom
lms/fix-core-history-check
Mar 11, 2025
Merged

fix(core): Ensure fill only patches functions#15632
Lms24 merged 3 commits into
developfrom
lms/fix-core-history-check

Conversation

@Lms24

@Lms24Lms24 commented Mar 11, 2025

Copy link
Copy Markdown
Member

This PR adds a guard to our fill utility that we use to instrument/wrap methods defined on an object. However, due to a misleading type cast in fill we didn't check if the name of the method to be patched actually corresponded to a function on an object.

This was surfaced via #15552 where we'd call fill on window.history(pushState|replaceState) without checking if these two methods were actually available or functions.

Note: I initially solved this on the instrumentHistory level but then noticed that this is a more general bug in fill. Therefore I added some history-specific tests as well but I'd rather keep them than removing them. Fun fact: The more general fix saves ~8 Bytes of bundle size compared to my initial history-based fix 😅

closes#15552

@Lms24Lms24 self-assigned this Mar 11, 2025
*/
export function supportsHistory(): boolean {
return 'history' in WINDOW;
return 'history' in WINDOW && !!WINDOW.history;

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Improved this check so that if history was undefined or null we'd also return false here

@Lms24
Lms24 requested review from andreiborza and lforstMarch 11, 2025 15:02
@github-actions

github-actionsBot commented Mar 11, 2025

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser23.15 KB+0.05%+10 B 🔺
@sentry/browser - with treeshaking flags22.94 KB+0.06%+13 B 🔺
@sentry/browser (incl. Tracing)36.21 KB+0.03%+9 B 🔺
@sentry/browser (incl. Tracing, Replay)73.39 KB+0.02%+10 B 🔺
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags66.8 KB+0.02%+9 B 🔺
@sentry/browser (incl. Tracing, Replay with Canvas)78.01 KB+0.02%+10 B 🔺
@sentry/browser (incl. Tracing, Replay, Feedback)90.57 KB+0.02%+11 B 🔺
@sentry/browser (incl. Feedback)40.3 KB+0.03%+10 B 🔺
@sentry/browser (incl. sendFeedback)27.79 KB+0.04%+9 B 🔺
@sentry/browser (incl. FeedbackAsync)32.58 KB+0.03%+10 B 🔺
@sentry/react24.97 KB+0.04%+10 B 🔺
@sentry/react (incl. Tracing)38.1 KB+0.03%+10 B 🔺
@sentry/vue27.4 KB+0.05%+12 B 🔺
@sentry/vue (incl. Tracing)37.9 KB+0.03%+9 B 🔺
@sentry/svelte23.18 KB+0.05%+10 B 🔺
CDN Bundle24.36 KB+0.05%+12 B 🔺
CDN Bundle (incl. Tracing)36.26 KB+0.03%+11 B 🔺
CDN Bundle (incl. Tracing, Replay)71.27 KB+0.02%+12 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback)76.44 KB+0.02%+12 B 🔺
CDN Bundle - uncompressed71.19 KB+0.07%+49 B 🔺
CDN Bundle (incl. Tracing) - uncompressed107.57 KB+0.05%+49 B 🔺
CDN Bundle (incl. Tracing, Replay) - uncompressed218.84 KB+0.03%+49 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed231.4 KB+0.03%+49 B 🔺
@sentry/nextjs (client)39.27 KB+0.04%+13 B 🔺
@sentry/sveltekit (client)36.63 KB+0.03%+9 B 🔺
@sentry/node142.15 KB+0.01%+5 B 🔺
@sentry/node - without tracing95.58 KB+0.01%+4 B 🔺
@sentry/aws-serverless119.92 KB+0.01%+4 B 🔺

View base workflow run

@Lms24

Lms24 commented Mar 11, 2025

Copy link
Copy Markdown
MemberAuthor

I will rework this to more generally fix the wird behaviour in our fill patching utility.
EDIT: Done


expect(WINDOW.history).toEqual({
replaceState: expect.any(Function), // patched function
pushState: undefined, // unpatched

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

prior to this PR, pushState would have become a Function, resulting in the wrapper function calling undefined.apply on the "original function".

@Lms24Lms24 changed the title fix(browser): Only patch available window.history propertiesfix(core): Ensure fill only patches functionsMar 11, 2025
@Lms24
Lms24 marked this pull request as ready for review March 11, 2025 15:24

@andreiborzaandreiborza left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

nice, thanks for guarding this

@Lms24
Lms24 merged commit 47f95e5 into developMar 11, 2025
@Lms24
Lms24 deleted the lms/fix-core-history-check branch March 11, 2025 16:27
aviator-appBot added a commit to reisene/HulajDusza-serwis that referenced this pull request Apr 10, 2025
![snyk-io[bot]](https://badgen.net/badge/icon/snyk-io%5Bbot%5D/green?label=) ![Contributor](https://badgen.net/badge/icon/Contributor/000000?label=) [<img width="16" alt="Powered by Pull Request Badge" src="https://user-images.githubusercontent.com/1393946/111216524-d2bb8e00-85d4-11eb-821b-ed4c00989c02.png">](https://pullrequestbadge.com/?utm_medium=github&utm_source=reisene&utm_campaign=badge_info)<!-- PR-BADGE: PLEASE DO NOT REMOVE THIS COMMENT -->
![snyk-top-banner](https://res.cloudinary.com/snyk/image/upload/r-d/scm-platform/snyk-pull-requests/pr-banner-default.svg)
<h3>Snyk has created this PR to upgrade @sentry/browser from 9.5.0 to 9.6.1.</h3>
:information_source: Keep your dependencies up-to-date. This makes it easier to fix existing vulnerabilities and to more quickly identify and fix newly disclosed vulnerabilities when they affect your project.
<hr/>
- The recommended version is **3 versions** ahead of your current version.
- The recommended version was released **22 days ago**.
<details>
<summary><b>Release notes</b></summary>
<br/>
<details>
<summary>Package name: <b>@sentry/browser</b></summary>
<ul>
<li>
<b>9.6.1</b> - <a href="https://redirect.github.com/getsentry/sentry-javascript/releases/tag/9.6.1">2025-03-19</a></br><ul>
<li>feat(deps): bump @ prisma/instrumentation from 6.4.1 to 6.5.0 (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15714" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15714/hovercard">#15714</a>)</li>
<li>feat(deps): bump @ sentry/cli from 2.42.2 to 2.42.3 (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15711" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15711/hovercard">#15711</a>)</li>
<li>fix(nextjs): Re-patch router if it is overridden by Next.js (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15721" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15721/hovercard">#15721</a>)</li>
<li>fix(nuxt): Add Nitro Rollup plugin to inject Sentry server config (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15710" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15710/hovercard">#15710</a>)</li>
<li>chore(deps): Bump rollup to 4.35.0 (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15651" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15651/hovercard">#15651</a>)</li>
</ul>
<h2>Bundle size 📦</h2>
<table>
<thead>
<tr>
<th>Path</th>
<th>Size</th>
</tr>
</thead>
<tbody>
<tr>
<td>@ sentry/browser</td>
<td>23.15 KB</td>
</tr>
<tr>
<td>@ sentry/browser - with treeshaking flags</td>
<td>22.94 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing)</td>
<td>36.21 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay)</td>
<td>73.39 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay) - with treeshaking flags</td>
<td>66.81 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay with Canvas)</td>
<td>78.01 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay, Feedback)</td>
<td>90.57 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Feedback)</td>
<td>40.3 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. sendFeedback)</td>
<td>27.79 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. FeedbackAsync)</td>
<td>32.58 KB</td>
</tr>
<tr>
<td>@ sentry/react</td>
<td>24.97 KB</td>
</tr>
<tr>
<td>@ sentry/react (incl. Tracing)</td>
<td>38.1 KB</td>
</tr>
<tr>
<td>@ sentry/vue</td>
<td>27.4 KB</td>
</tr>
<tr>
<td>@ sentry/vue (incl. Tracing)</td>
<td>37.9 KB</td>
</tr>
<tr>
<td>@ sentry/svelte</td>
<td>23.18 KB</td>
</tr>
<tr>
<td>CDN Bundle</td>
<td>24.36 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing)</td>
<td>36.26 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay)</td>
<td>71.27 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback)</td>
<td>76.45 KB</td>
</tr>
<tr>
<td>CDN Bundle - uncompressed</td>
<td>71.19 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing) - uncompressed</td>
<td>107.57 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay) - uncompressed</td>
<td>218.83 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed</td>
<td>231.39 KB</td>
</tr>
<tr>
<td>@ sentry/nextjs (client)</td>
<td>39.38 KB</td>
</tr>
<tr>
<td>@ sentry/sveltekit (client)</td>
<td>36.63 KB</td>
</tr>
<tr>
<td>@ sentry/node</td>
<td>142.29 KB</td>
</tr>
<tr>
<td>@ sentry/node - without tracing</td>
<td>95.71 KB</td>
</tr>
<tr>
<td>@ sentry/aws-serverless</td>
<td>120.06 KB</td>
</tr>
</tbody>
</table>
</li>
<li>
<b>9.6.0</b> - <a href="https://redirect.github.com/getsentry/sentry-javascript/releases/tag/9.6.0">2025-03-17</a></br><h3>Important Changes</h3>
<ul>
<li>
<p><strong>feat(tanstackstart): Add <code>@ sentry/tanstackstart-react</code> package and make <code>@ sentry/tanstackstart</code> package a utility package (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15629" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15629/hovercard">#15629</a>)</strong></p>
<p>Since TanStack Start is supposed to be a generic framework that supports libraries like React and Solid, the <code>@ sentry/tanstackstart</code> SDK package was renamed to <code>@ sentry/tanstackstart-react</code> to reflect that the SDK is specifically intended to be used for React TanStack Start applications.<br>
Note that the TanStack Start SDK is still in alpha status and may be subject to breaking changes in non-major package updates.</p>
</li>
</ul>
<h3>Other Changes</h3>
<ul>
<li>feat(astro): Accept all vite-plugin options (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15638" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15638/hovercard">#15638</a>)</li>
<li>feat(deps): bump @ sentry/webpack-plugin from 3.2.1 to 3.2.2 (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15627" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15627/hovercard">#15627</a>)</li>
<li>feat(tanstackstart): Refine initial API (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15574" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15574/hovercard">#15574</a>)</li>
<li>fix(core): Ensure <code>fill</code> only patches functions (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15632" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15632/hovercard">#15632</a>)</li>
<li>fix(nextjs): Consider <code>pageExtensions</code> when looking for instrumentation file (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15701" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15701/hovercard">#15701</a>)</li>
<li>fix(remix): Null-check <code>options</code> (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15610" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15610/hovercard">#15610</a>)</li>
<li>fix(sveltekit): Correctly parse angle bracket type assertions for auto instrumentation (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15578" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15578/hovercard">#15578</a>)</li>
<li>fix(sveltekit): Guard process variable (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15605" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15605/hovercard">#15605</a>)</li>
</ul>
<p>Work in this release was contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/angelikatyborska/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/angelikatyborska">@ angelikatyborska</a> and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/nwalters512/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/nwalters512">@ nwalters512</a>. Thank you for your contributions!</p>
<h2>Bundle size 📦</h2>
<table>
<thead>
<tr>
<th>Path</th>
<th>Size</th>
</tr>
</thead>
<tbody>
<tr>
<td>@ sentry/browser</td>
<td>23.15 KB</td>
</tr>
<tr>
<td>@ sentry/browser - with treeshaking flags</td>
<td>22.94 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing)</td>
<td>36.21 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay)</td>
<td>73.39 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay) - with treeshaking flags</td>
<td>66.8 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay with Canvas)</td>
<td>78.01 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay, Feedback)</td>
<td>90.57 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Feedback)</td>
<td>40.3 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. sendFeedback)</td>
<td>27.79 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. FeedbackAsync)</td>
<td>32.58 KB</td>
</tr>
<tr>
<td>@ sentry/react</td>
<td>24.97 KB</td>
</tr>
<tr>
<td>@ sentry/react (incl. Tracing)</td>
<td>38.1 KB</td>
</tr>
<tr>
<td>@ sentry/vue</td>
<td>27.4 KB</td>
</tr>
<tr>
<td>@ sentry/vue (incl. Tracing)</td>
<td>37.9 KB</td>
</tr>
<tr>
<td>@ sentry/svelte</td>
<td>23.18 KB</td>
</tr>
<tr>
<td>CDN Bundle</td>
<td>24.36 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing)</td>
<td>36.26 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay)</td>
<td>71.27 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback)</td>
<td>76.45 KB</td>
</tr>
<tr>
<td>CDN Bundle - uncompressed</td>
<td>71.19 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing) - uncompressed</td>
<td>107.57 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay) - uncompressed</td>
<td>218.84 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed</td>
<td>231.4 KB</td>
</tr>
<tr>
<td>@ sentry/nextjs (client)</td>
<td>39.27 KB</td>
</tr>
<tr>
<td>@ sentry/sveltekit (client)</td>
<td>36.63 KB</td>
</tr>
<tr>
<td>@ sentry/node</td>
<td>142.15 KB</td>
</tr>
<tr>
<td>@ sentry/node - without tracing</td>
<td>95.58 KB</td>
</tr>
<tr>
<td>@ sentry/aws-serverless</td>
<td>119.92 KB</td>
</tr>
</tbody>
</table>
</li>
<li>
<b>9.6.0-alpha.0</b> - 2025-03-06
</li>
<li>
<b>9.5.0</b> - 2025-03-06
</li>
</ul>
from <a href="https://redirect.github.com/getsentry/sentry-javascript/releases">@sentry/browser GitHub release notes</a>
</details>
</details>
---
> [!IMPORTANT]
>
> - Check the changes in this PR to ensure they won't cause issues with your project.
> - This PR was automatically created by Snyk using the credentials of a real user.
---
**Note:** _You are seeing this because you or someone else with access to this repository has authorized Snyk to open upgrade PRs._
**For more information:** <img src="https://api.segment.io/v1/pixel/track?data=eyJ3cml0ZUtleSI6InJyWmxZcEdHY2RyTHZsb0lYd0dUcVg4WkFRTnNCOUEwIiwiYW5vbnltb3VzSWQiOiJhYjgwMDgxOS1lZTdkLTRiNzMtOGU2MS03ZWM1MWRlZDEwOWUiLCJldmVudCI6IlBSIHZpZXdlZCIsInByb3BlcnRpZXMiOnsicHJJZCI6ImFiODAwODE5LWVlN2QtNGI3My04ZTYxLTdlYzUxZGVkMTA5ZSJ9fQ==" width="0" height="0"/>
> - 🧐 [View latest project report](https://app.snyk.io/org/reisene/project/55e114f8-489e-4f14-b900-20574b041e59?utm_source&#x3D;github-cloud-app&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr)
> - 📜 [Customise PR templates](https://docs.snyk.io/scan-using-snyk/pull-requests/snyk-fix-pull-or-merge-requests/customize-pr-templates?utm_source=&utm_content=fix-pr-template)
> - 🛠 [Adjust upgrade PR settings](https://app.snyk.io/org/reisene/project/55e114f8-489e-4f14-b900-20574b041e59/settings/integration?utm_source&#x3D;github-cloud-app&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr)
> - 🔕 [Ignore this dependency or unsubscribe from future upgrade PRs](https://app.snyk.io/org/reisene/project/55e114f8-489e-4f14-b900-20574b041e59/settings/integration?pkg&#x3D;@sentry/browser&amp;utm_source&#x3D;github-cloud-app&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr#auto-dep-upgrades)
[//]: # 'snyk:metadata:{"customTemplate":{"variablesUsed":[],"fieldsUsed":[]},"dependencies":[{"name":"@sentry/browser","from":"9.5.0","to":"9.6.1"}],"env":"prod","hasFixes":false,"isBreakingChange":false,"isMajorUpgrade":false,"issuesToFix":[],"prId":"ab800819-ee7d-4b73-8e61-7ec51ded109e","prPublicId":"ab800819-ee7d-4b73-8e61-7ec51ded109e","packageManager":"npm","priorityScoreList":[],"projectPublicId":"55e114f8-489e-4f14-b900-20574b041e59","projectUrl":"https://app.snyk.io/org/reisene/project/55e114f8-489e-4f14-b900-20574b041e59?utm_source=github-cloud-app&utm_medium=referral&page=upgrade-pr","prType":"upgrade","templateFieldSources":{"branchName":"default","commitMessage":"default","description":"default","title":"default"},"templateVariants":[],"type":"auto","upgrade":[],"upgradeInfo":{"versionsDiff":3,"publishedDate":"2025-03-19T10:03:32.247Z"},"vulns":[]}'
## Podsumowanie od Sourcery
Ulepszenia:
- Aktualizacja pakietu Sentry dla przeglądarki do najnowszej wersji minor
<details>
<summary>Original summary in English</summary>
## Summary by Sourcery
Enhancements:
- Update Sentry browser package to the latest minor version
</details>
Sign up for freeto 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.

[@sentry-internal/browser-utils]: Cannot read properties of null (reading 'apply')

2 participants

@Lms24@andreiborza
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' fix(core): Ensure `fill` only patches functions by Lms24 · Pull Request #15632 · getsentry/sentry-javascript · GitHub
Skip to content

fix(core): Ensure fill only patches functions - #15632

Merged
Lms24 merged 3 commits into
developfrom
lms/fix-core-history-check
Mar 11, 2025
Merged

fix(core): Ensure fill only patches functions#15632
Lms24 merged 3 commits into
developfrom
lms/fix-core-history-check

Conversation

@Lms24

@Lms24Lms24 commented Mar 11, 2025

Copy link
Copy Markdown
Member

This PR adds a guard to our fill utility that we use to instrument/wrap methods defined on an object. However, due to a misleading type cast in fill we didn't check if the name of the method to be patched actually corresponded to a function on an object.

This was surfaced via #15552 where we'd call fill on window.history(pushState|replaceState) without checking if these two methods were actually available or functions.

Note: I initially solved this on the instrumentHistory level but then noticed that this is a more general bug in fill. Therefore I added some history-specific tests as well but I'd rather keep them than removing them. Fun fact: The more general fix saves ~8 Bytes of bundle size compared to my initial history-based fix 😅

closes#15552

@Lms24Lms24 self-assigned this Mar 11, 2025
*/
export function supportsHistory(): boolean {
return 'history' in WINDOW;
return 'history' in WINDOW && !!WINDOW.history;

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Improved this check so that if history was undefined or null we'd also return false here

@Lms24
Lms24 requested review from andreiborza and lforstMarch 11, 2025 15:02
@github-actions

github-actionsBot commented Mar 11, 2025

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser23.15 KB+0.05%+10 B 🔺
@sentry/browser - with treeshaking flags22.94 KB+0.06%+13 B 🔺
@sentry/browser (incl. Tracing)36.21 KB+0.03%+9 B 🔺
@sentry/browser (incl. Tracing, Replay)73.39 KB+0.02%+10 B 🔺
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags66.8 KB+0.02%+9 B 🔺
@sentry/browser (incl. Tracing, Replay with Canvas)78.01 KB+0.02%+10 B 🔺
@sentry/browser (incl. Tracing, Replay, Feedback)90.57 KB+0.02%+11 B 🔺
@sentry/browser (incl. Feedback)40.3 KB+0.03%+10 B 🔺
@sentry/browser (incl. sendFeedback)27.79 KB+0.04%+9 B 🔺
@sentry/browser (incl. FeedbackAsync)32.58 KB+0.03%+10 B 🔺
@sentry/react24.97 KB+0.04%+10 B 🔺
@sentry/react (incl. Tracing)38.1 KB+0.03%+10 B 🔺
@sentry/vue27.4 KB+0.05%+12 B 🔺
@sentry/vue (incl. Tracing)37.9 KB+0.03%+9 B 🔺
@sentry/svelte23.18 KB+0.05%+10 B 🔺
CDN Bundle24.36 KB+0.05%+12 B 🔺
CDN Bundle (incl. Tracing)36.26 KB+0.03%+11 B 🔺
CDN Bundle (incl. Tracing, Replay)71.27 KB+0.02%+12 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback)76.44 KB+0.02%+12 B 🔺
CDN Bundle - uncompressed71.19 KB+0.07%+49 B 🔺
CDN Bundle (incl. Tracing) - uncompressed107.57 KB+0.05%+49 B 🔺
CDN Bundle (incl. Tracing, Replay) - uncompressed218.84 KB+0.03%+49 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed231.4 KB+0.03%+49 B 🔺
@sentry/nextjs (client)39.27 KB+0.04%+13 B 🔺
@sentry/sveltekit (client)36.63 KB+0.03%+9 B 🔺
@sentry/node142.15 KB+0.01%+5 B 🔺
@sentry/node - without tracing95.58 KB+0.01%+4 B 🔺
@sentry/aws-serverless119.92 KB+0.01%+4 B 🔺

View base workflow run

@Lms24

Lms24 commented Mar 11, 2025

Copy link
Copy Markdown
MemberAuthor

I will rework this to more generally fix the wird behaviour in our fill patching utility.
EDIT: Done


expect(WINDOW.history).toEqual({
replaceState: expect.any(Function), // patched function
pushState: undefined, // unpatched

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

prior to this PR, pushState would have become a Function, resulting in the wrapper function calling undefined.apply on the "original function".

@Lms24Lms24 changed the title fix(browser): Only patch available window.history propertiesfix(core): Ensure fill only patches functionsMar 11, 2025
@Lms24
Lms24 marked this pull request as ready for review March 11, 2025 15:24

@andreiborzaandreiborza left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

nice, thanks for guarding this

@Lms24
Lms24 merged commit 47f95e5 into developMar 11, 2025
@Lms24
Lms24 deleted the lms/fix-core-history-check branch March 11, 2025 16:27
aviator-appBot added a commit to reisene/HulajDusza-serwis that referenced this pull request Apr 10, 2025
![snyk-io[bot]](https://badgen.net/badge/icon/snyk-io%5Bbot%5D/green?label=) ![Contributor](https://badgen.net/badge/icon/Contributor/000000?label=) [<img width="16" alt="Powered by Pull Request Badge" src="https://user-images.githubusercontent.com/1393946/111216524-d2bb8e00-85d4-11eb-821b-ed4c00989c02.png">](https://pullrequestbadge.com/?utm_medium=github&utm_source=reisene&utm_campaign=badge_info)<!-- PR-BADGE: PLEASE DO NOT REMOVE THIS COMMENT -->
![snyk-top-banner](https://res.cloudinary.com/snyk/image/upload/r-d/scm-platform/snyk-pull-requests/pr-banner-default.svg)
<h3>Snyk has created this PR to upgrade @sentry/browser from 9.5.0 to 9.6.1.</h3>
:information_source: Keep your dependencies up-to-date. This makes it easier to fix existing vulnerabilities and to more quickly identify and fix newly disclosed vulnerabilities when they affect your project.
<hr/>
- The recommended version is **3 versions** ahead of your current version.
- The recommended version was released **22 days ago**.
<details>
<summary><b>Release notes</b></summary>
<br/>
<details>
<summary>Package name: <b>@sentry/browser</b></summary>
<ul>
<li>
<b>9.6.1</b> - <a href="https://redirect.github.com/getsentry/sentry-javascript/releases/tag/9.6.1">2025-03-19</a></br><ul>
<li>feat(deps): bump @ prisma/instrumentation from 6.4.1 to 6.5.0 (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15714" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15714/hovercard">#15714</a>)</li>
<li>feat(deps): bump @ sentry/cli from 2.42.2 to 2.42.3 (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15711" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15711/hovercard">#15711</a>)</li>
<li>fix(nextjs): Re-patch router if it is overridden by Next.js (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15721" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15721/hovercard">#15721</a>)</li>
<li>fix(nuxt): Add Nitro Rollup plugin to inject Sentry server config (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15710" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15710/hovercard">#15710</a>)</li>
<li>chore(deps): Bump rollup to 4.35.0 (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15651" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15651/hovercard">#15651</a>)</li>
</ul>
<h2>Bundle size 📦</h2>
<table>
<thead>
<tr>
<th>Path</th>
<th>Size</th>
</tr>
</thead>
<tbody>
<tr>
<td>@ sentry/browser</td>
<td>23.15 KB</td>
</tr>
<tr>
<td>@ sentry/browser - with treeshaking flags</td>
<td>22.94 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing)</td>
<td>36.21 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay)</td>
<td>73.39 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay) - with treeshaking flags</td>
<td>66.81 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay with Canvas)</td>
<td>78.01 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay, Feedback)</td>
<td>90.57 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Feedback)</td>
<td>40.3 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. sendFeedback)</td>
<td>27.79 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. FeedbackAsync)</td>
<td>32.58 KB</td>
</tr>
<tr>
<td>@ sentry/react</td>
<td>24.97 KB</td>
</tr>
<tr>
<td>@ sentry/react (incl. Tracing)</td>
<td>38.1 KB</td>
</tr>
<tr>
<td>@ sentry/vue</td>
<td>27.4 KB</td>
</tr>
<tr>
<td>@ sentry/vue (incl. Tracing)</td>
<td>37.9 KB</td>
</tr>
<tr>
<td>@ sentry/svelte</td>
<td>23.18 KB</td>
</tr>
<tr>
<td>CDN Bundle</td>
<td>24.36 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing)</td>
<td>36.26 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay)</td>
<td>71.27 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback)</td>
<td>76.45 KB</td>
</tr>
<tr>
<td>CDN Bundle - uncompressed</td>
<td>71.19 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing) - uncompressed</td>
<td>107.57 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay) - uncompressed</td>
<td>218.83 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed</td>
<td>231.39 KB</td>
</tr>
<tr>
<td>@ sentry/nextjs (client)</td>
<td>39.38 KB</td>
</tr>
<tr>
<td>@ sentry/sveltekit (client)</td>
<td>36.63 KB</td>
</tr>
<tr>
<td>@ sentry/node</td>
<td>142.29 KB</td>
</tr>
<tr>
<td>@ sentry/node - without tracing</td>
<td>95.71 KB</td>
</tr>
<tr>
<td>@ sentry/aws-serverless</td>
<td>120.06 KB</td>
</tr>
</tbody>
</table>
</li>
<li>
<b>9.6.0</b> - <a href="https://redirect.github.com/getsentry/sentry-javascript/releases/tag/9.6.0">2025-03-17</a></br><h3>Important Changes</h3>
<ul>
<li>
<p><strong>feat(tanstackstart): Add <code>@ sentry/tanstackstart-react</code> package and make <code>@ sentry/tanstackstart</code> package a utility package (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15629" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15629/hovercard">#15629</a>)</strong></p>
<p>Since TanStack Start is supposed to be a generic framework that supports libraries like React and Solid, the <code>@ sentry/tanstackstart</code> SDK package was renamed to <code>@ sentry/tanstackstart-react</code> to reflect that the SDK is specifically intended to be used for React TanStack Start applications.<br>
Note that the TanStack Start SDK is still in alpha status and may be subject to breaking changes in non-major package updates.</p>
</li>
</ul>
<h3>Other Changes</h3>
<ul>
<li>feat(astro): Accept all vite-plugin options (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15638" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15638/hovercard">#15638</a>)</li>
<li>feat(deps): bump @ sentry/webpack-plugin from 3.2.1 to 3.2.2 (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15627" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15627/hovercard">#15627</a>)</li>
<li>feat(tanstackstart): Refine initial API (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15574" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15574/hovercard">#15574</a>)</li>
<li>fix(core): Ensure <code>fill</code> only patches functions (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15632" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15632/hovercard">#15632</a>)</li>
<li>fix(nextjs): Consider <code>pageExtensions</code> when looking for instrumentation file (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15701" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15701/hovercard">#15701</a>)</li>
<li>fix(remix): Null-check <code>options</code> (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15610" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15610/hovercard">#15610</a>)</li>
<li>fix(sveltekit): Correctly parse angle bracket type assertions for auto instrumentation (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15578" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15578/hovercard">#15578</a>)</li>
<li>fix(sveltekit): Guard process variable (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15605" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15605/hovercard">#15605</a>)</li>
</ul>
<p>Work in this release was contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/angelikatyborska/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/angelikatyborska">@ angelikatyborska</a> and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/nwalters512/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/nwalters512">@ nwalters512</a>. Thank you for your contributions!</p>
<h2>Bundle size 📦</h2>
<table>
<thead>
<tr>
<th>Path</th>
<th>Size</th>
</tr>
</thead>
<tbody>
<tr>
<td>@ sentry/browser</td>
<td>23.15 KB</td>
</tr>
<tr>
<td>@ sentry/browser - with treeshaking flags</td>
<td>22.94 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing)</td>
<td>36.21 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay)</td>
<td>73.39 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay) - with treeshaking flags</td>
<td>66.8 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay with Canvas)</td>
<td>78.01 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay, Feedback)</td>
<td>90.57 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Feedback)</td>
<td>40.3 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. sendFeedback)</td>
<td>27.79 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. FeedbackAsync)</td>
<td>32.58 KB</td>
</tr>
<tr>
<td>@ sentry/react</td>
<td>24.97 KB</td>
</tr>
<tr>
<td>@ sentry/react (incl. Tracing)</td>
<td>38.1 KB</td>
</tr>
<tr>
<td>@ sentry/vue</td>
<td>27.4 KB</td>
</tr>
<tr>
<td>@ sentry/vue (incl. Tracing)</td>
<td>37.9 KB</td>
</tr>
<tr>
<td>@ sentry/svelte</td>
<td>23.18 KB</td>
</tr>
<tr>
<td>CDN Bundle</td>
<td>24.36 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing)</td>
<td>36.26 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay)</td>
<td>71.27 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback)</td>
<td>76.45 KB</td>
</tr>
<tr>
<td>CDN Bundle - uncompressed</td>
<td>71.19 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing) - uncompressed</td>
<td>107.57 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay) - uncompressed</td>
<td>218.84 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed</td>
<td>231.4 KB</td>
</tr>
<tr>
<td>@ sentry/nextjs (client)</td>
<td>39.27 KB</td>
</tr>
<tr>
<td>@ sentry/sveltekit (client)</td>
<td>36.63 KB</td>
</tr>
<tr>
<td>@ sentry/node</td>
<td>142.15 KB</td>
</tr>
<tr>
<td>@ sentry/node - without tracing</td>
<td>95.58 KB</td>
</tr>
<tr>
<td>@ sentry/aws-serverless</td>
<td>119.92 KB</td>
</tr>
</tbody>
</table>
</li>
<li>
<b>9.6.0-alpha.0</b> - 2025-03-06
</li>
<li>
<b>9.5.0</b> - 2025-03-06
</li>
</ul>
from <a href="https://redirect.github.com/getsentry/sentry-javascript/releases">@sentry/browser GitHub release notes</a>
</details>
</details>
---
> [!IMPORTANT]
>
> - Check the changes in this PR to ensure they won't cause issues with your project.
> - This PR was automatically created by Snyk using the credentials of a real user.
---
**Note:** _You are seeing this because you or someone else with access to this repository has authorized Snyk to open upgrade PRs._
**For more information:** <img src="https://api.segment.io/v1/pixel/track?data=eyJ3cml0ZUtleSI6InJyWmxZcEdHY2RyTHZsb0lYd0dUcVg4WkFRTnNCOUEwIiwiYW5vbnltb3VzSWQiOiJhYjgwMDgxOS1lZTdkLTRiNzMtOGU2MS03ZWM1MWRlZDEwOWUiLCJldmVudCI6IlBSIHZpZXdlZCIsInByb3BlcnRpZXMiOnsicHJJZCI6ImFiODAwODE5LWVlN2QtNGI3My04ZTYxLTdlYzUxZGVkMTA5ZSJ9fQ==" width="0" height="0"/>
> - 🧐 [View latest project report](https://app.snyk.io/org/reisene/project/55e114f8-489e-4f14-b900-20574b041e59?utm_source&#x3D;github-cloud-app&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr)
> - 📜 [Customise PR templates](https://docs.snyk.io/scan-using-snyk/pull-requests/snyk-fix-pull-or-merge-requests/customize-pr-templates?utm_source=&utm_content=fix-pr-template)
> - 🛠 [Adjust upgrade PR settings](https://app.snyk.io/org/reisene/project/55e114f8-489e-4f14-b900-20574b041e59/settings/integration?utm_source&#x3D;github-cloud-app&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr)
> - 🔕 [Ignore this dependency or unsubscribe from future upgrade PRs](https://app.snyk.io/org/reisene/project/55e114f8-489e-4f14-b900-20574b041e59/settings/integration?pkg&#x3D;@sentry/browser&amp;utm_source&#x3D;github-cloud-app&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr#auto-dep-upgrades)
[//]: # 'snyk:metadata:{"customTemplate":{"variablesUsed":[],"fieldsUsed":[]},"dependencies":[{"name":"@sentry/browser","from":"9.5.0","to":"9.6.1"}],"env":"prod","hasFixes":false,"isBreakingChange":false,"isMajorUpgrade":false,"issuesToFix":[],"prId":"ab800819-ee7d-4b73-8e61-7ec51ded109e","prPublicId":"ab800819-ee7d-4b73-8e61-7ec51ded109e","packageManager":"npm","priorityScoreList":[],"projectPublicId":"55e114f8-489e-4f14-b900-20574b041e59","projectUrl":"https://app.snyk.io/org/reisene/project/55e114f8-489e-4f14-b900-20574b041e59?utm_source=github-cloud-app&utm_medium=referral&page=upgrade-pr","prType":"upgrade","templateFieldSources":{"branchName":"default","commitMessage":"default","description":"default","title":"default"},"templateVariants":[],"type":"auto","upgrade":[],"upgradeInfo":{"versionsDiff":3,"publishedDate":"2025-03-19T10:03:32.247Z"},"vulns":[]}'
## Podsumowanie od Sourcery
Ulepszenia:
- Aktualizacja pakietu Sentry dla przeglądarki do najnowszej wersji minor
<details>
<summary>Original summary in English</summary>
## Summary by Sourcery
Enhancements:
- Update Sentry browser package to the latest minor version
</details>
Sign up for freeto 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.

[@sentry-internal/browser-utils]: Cannot read properties of null (reading 'apply')

2 participants

@Lms24@andreiborza
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' fix(core): Ensure `fill` only patches functions by Lms24 · Pull Request #15632 · getsentry/sentry-javascript · GitHub
Skip to content

fix(core): Ensure fill only patches functions - #15632

Merged
Lms24 merged 3 commits into
developfrom
lms/fix-core-history-check
Mar 11, 2025
Merged

fix(core): Ensure fill only patches functions#15632
Lms24 merged 3 commits into
developfrom
lms/fix-core-history-check

Conversation

@Lms24

@Lms24Lms24 commented Mar 11, 2025

Copy link
Copy Markdown
Member

This PR adds a guard to our fill utility that we use to instrument/wrap methods defined on an object. However, due to a misleading type cast in fill we didn't check if the name of the method to be patched actually corresponded to a function on an object.

This was surfaced via #15552 where we'd call fill on window.history(pushState|replaceState) without checking if these two methods were actually available or functions.

Note: I initially solved this on the instrumentHistory level but then noticed that this is a more general bug in fill. Therefore I added some history-specific tests as well but I'd rather keep them than removing them. Fun fact: The more general fix saves ~8 Bytes of bundle size compared to my initial history-based fix 😅

closes#15552

@Lms24Lms24 self-assigned this Mar 11, 2025
*/
export function supportsHistory(): boolean {
return 'history' in WINDOW;
return 'history' in WINDOW && !!WINDOW.history;

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Improved this check so that if history was undefined or null we'd also return false here

@Lms24
Lms24 requested review from andreiborza and lforstMarch 11, 2025 15:02
@github-actions

github-actionsBot commented Mar 11, 2025

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser23.15 KB+0.05%+10 B 🔺
@sentry/browser - with treeshaking flags22.94 KB+0.06%+13 B 🔺
@sentry/browser (incl. Tracing)36.21 KB+0.03%+9 B 🔺
@sentry/browser (incl. Tracing, Replay)73.39 KB+0.02%+10 B 🔺
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags66.8 KB+0.02%+9 B 🔺
@sentry/browser (incl. Tracing, Replay with Canvas)78.01 KB+0.02%+10 B 🔺
@sentry/browser (incl. Tracing, Replay, Feedback)90.57 KB+0.02%+11 B 🔺
@sentry/browser (incl. Feedback)40.3 KB+0.03%+10 B 🔺
@sentry/browser (incl. sendFeedback)27.79 KB+0.04%+9 B 🔺
@sentry/browser (incl. FeedbackAsync)32.58 KB+0.03%+10 B 🔺
@sentry/react24.97 KB+0.04%+10 B 🔺
@sentry/react (incl. Tracing)38.1 KB+0.03%+10 B 🔺
@sentry/vue27.4 KB+0.05%+12 B 🔺
@sentry/vue (incl. Tracing)37.9 KB+0.03%+9 B 🔺
@sentry/svelte23.18 KB+0.05%+10 B 🔺
CDN Bundle24.36 KB+0.05%+12 B 🔺
CDN Bundle (incl. Tracing)36.26 KB+0.03%+11 B 🔺
CDN Bundle (incl. Tracing, Replay)71.27 KB+0.02%+12 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback)76.44 KB+0.02%+12 B 🔺
CDN Bundle - uncompressed71.19 KB+0.07%+49 B 🔺
CDN Bundle (incl. Tracing) - uncompressed107.57 KB+0.05%+49 B 🔺
CDN Bundle (incl. Tracing, Replay) - uncompressed218.84 KB+0.03%+49 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed231.4 KB+0.03%+49 B 🔺
@sentry/nextjs (client)39.27 KB+0.04%+13 B 🔺
@sentry/sveltekit (client)36.63 KB+0.03%+9 B 🔺
@sentry/node142.15 KB+0.01%+5 B 🔺
@sentry/node - without tracing95.58 KB+0.01%+4 B 🔺
@sentry/aws-serverless119.92 KB+0.01%+4 B 🔺

View base workflow run

@Lms24

Lms24 commented Mar 11, 2025

Copy link
Copy Markdown
MemberAuthor

I will rework this to more generally fix the wird behaviour in our fill patching utility.
EDIT: Done


expect(WINDOW.history).toEqual({
replaceState: expect.any(Function), // patched function
pushState: undefined, // unpatched

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

prior to this PR, pushState would have become a Function, resulting in the wrapper function calling undefined.apply on the "original function".

@Lms24Lms24 changed the title fix(browser): Only patch available window.history propertiesfix(core): Ensure fill only patches functionsMar 11, 2025
@Lms24
Lms24 marked this pull request as ready for review March 11, 2025 15:24

@andreiborzaandreiborza left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

nice, thanks for guarding this

@Lms24
Lms24 merged commit 47f95e5 into developMar 11, 2025
@Lms24
Lms24 deleted the lms/fix-core-history-check branch March 11, 2025 16:27
aviator-appBot added a commit to reisene/HulajDusza-serwis that referenced this pull request Apr 10, 2025
![snyk-io[bot]](https://badgen.net/badge/icon/snyk-io%5Bbot%5D/green?label=) ![Contributor](https://badgen.net/badge/icon/Contributor/000000?label=) [<img width="16" alt="Powered by Pull Request Badge" src="https://user-images.githubusercontent.com/1393946/111216524-d2bb8e00-85d4-11eb-821b-ed4c00989c02.png">](https://pullrequestbadge.com/?utm_medium=github&utm_source=reisene&utm_campaign=badge_info)<!-- PR-BADGE: PLEASE DO NOT REMOVE THIS COMMENT -->
![snyk-top-banner](https://res.cloudinary.com/snyk/image/upload/r-d/scm-platform/snyk-pull-requests/pr-banner-default.svg)
<h3>Snyk has created this PR to upgrade @sentry/browser from 9.5.0 to 9.6.1.</h3>
:information_source: Keep your dependencies up-to-date. This makes it easier to fix existing vulnerabilities and to more quickly identify and fix newly disclosed vulnerabilities when they affect your project.
<hr/>
- The recommended version is **3 versions** ahead of your current version.
- The recommended version was released **22 days ago**.
<details>
<summary><b>Release notes</b></summary>
<br/>
<details>
<summary>Package name: <b>@sentry/browser</b></summary>
<ul>
<li>
<b>9.6.1</b> - <a href="https://redirect.github.com/getsentry/sentry-javascript/releases/tag/9.6.1">2025-03-19</a></br><ul>
<li>feat(deps): bump @ prisma/instrumentation from 6.4.1 to 6.5.0 (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15714" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15714/hovercard">#15714</a>)</li>
<li>feat(deps): bump @ sentry/cli from 2.42.2 to 2.42.3 (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15711" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15711/hovercard">#15711</a>)</li>
<li>fix(nextjs): Re-patch router if it is overridden by Next.js (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15721" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15721/hovercard">#15721</a>)</li>
<li>fix(nuxt): Add Nitro Rollup plugin to inject Sentry server config (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15710" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15710/hovercard">#15710</a>)</li>
<li>chore(deps): Bump rollup to 4.35.0 (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15651" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15651/hovercard">#15651</a>)</li>
</ul>
<h2>Bundle size 📦</h2>
<table>
<thead>
<tr>
<th>Path</th>
<th>Size</th>
</tr>
</thead>
<tbody>
<tr>
<td>@ sentry/browser</td>
<td>23.15 KB</td>
</tr>
<tr>
<td>@ sentry/browser - with treeshaking flags</td>
<td>22.94 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing)</td>
<td>36.21 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay)</td>
<td>73.39 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay) - with treeshaking flags</td>
<td>66.81 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay with Canvas)</td>
<td>78.01 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay, Feedback)</td>
<td>90.57 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Feedback)</td>
<td>40.3 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. sendFeedback)</td>
<td>27.79 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. FeedbackAsync)</td>
<td>32.58 KB</td>
</tr>
<tr>
<td>@ sentry/react</td>
<td>24.97 KB</td>
</tr>
<tr>
<td>@ sentry/react (incl. Tracing)</td>
<td>38.1 KB</td>
</tr>
<tr>
<td>@ sentry/vue</td>
<td>27.4 KB</td>
</tr>
<tr>
<td>@ sentry/vue (incl. Tracing)</td>
<td>37.9 KB</td>
</tr>
<tr>
<td>@ sentry/svelte</td>
<td>23.18 KB</td>
</tr>
<tr>
<td>CDN Bundle</td>
<td>24.36 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing)</td>
<td>36.26 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay)</td>
<td>71.27 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback)</td>
<td>76.45 KB</td>
</tr>
<tr>
<td>CDN Bundle - uncompressed</td>
<td>71.19 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing) - uncompressed</td>
<td>107.57 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay) - uncompressed</td>
<td>218.83 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed</td>
<td>231.39 KB</td>
</tr>
<tr>
<td>@ sentry/nextjs (client)</td>
<td>39.38 KB</td>
</tr>
<tr>
<td>@ sentry/sveltekit (client)</td>
<td>36.63 KB</td>
</tr>
<tr>
<td>@ sentry/node</td>
<td>142.29 KB</td>
</tr>
<tr>
<td>@ sentry/node - without tracing</td>
<td>95.71 KB</td>
</tr>
<tr>
<td>@ sentry/aws-serverless</td>
<td>120.06 KB</td>
</tr>
</tbody>
</table>
</li>
<li>
<b>9.6.0</b> - <a href="https://redirect.github.com/getsentry/sentry-javascript/releases/tag/9.6.0">2025-03-17</a></br><h3>Important Changes</h3>
<ul>
<li>
<p><strong>feat(tanstackstart): Add <code>@ sentry/tanstackstart-react</code> package and make <code>@ sentry/tanstackstart</code> package a utility package (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15629" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15629/hovercard">#15629</a>)</strong></p>
<p>Since TanStack Start is supposed to be a generic framework that supports libraries like React and Solid, the <code>@ sentry/tanstackstart</code> SDK package was renamed to <code>@ sentry/tanstackstart-react</code> to reflect that the SDK is specifically intended to be used for React TanStack Start applications.<br>
Note that the TanStack Start SDK is still in alpha status and may be subject to breaking changes in non-major package updates.</p>
</li>
</ul>
<h3>Other Changes</h3>
<ul>
<li>feat(astro): Accept all vite-plugin options (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15638" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15638/hovercard">#15638</a>)</li>
<li>feat(deps): bump @ sentry/webpack-plugin from 3.2.1 to 3.2.2 (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15627" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15627/hovercard">#15627</a>)</li>
<li>feat(tanstackstart): Refine initial API (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15574" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15574/hovercard">#15574</a>)</li>
<li>fix(core): Ensure <code>fill</code> only patches functions (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15632" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15632/hovercard">#15632</a>)</li>
<li>fix(nextjs): Consider <code>pageExtensions</code> when looking for instrumentation file (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15701" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15701/hovercard">#15701</a>)</li>
<li>fix(remix): Null-check <code>options</code> (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15610" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15610/hovercard">#15610</a>)</li>
<li>fix(sveltekit): Correctly parse angle bracket type assertions for auto instrumentation (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15578" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15578/hovercard">#15578</a>)</li>
<li>fix(sveltekit): Guard process variable (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15605" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15605/hovercard">#15605</a>)</li>
</ul>
<p>Work in this release was contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/angelikatyborska/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/angelikatyborska">@ angelikatyborska</a> and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/nwalters512/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/nwalters512">@ nwalters512</a>. Thank you for your contributions!</p>
<h2>Bundle size 📦</h2>
<table>
<thead>
<tr>
<th>Path</th>
<th>Size</th>
</tr>
</thead>
<tbody>
<tr>
<td>@ sentry/browser</td>
<td>23.15 KB</td>
</tr>
<tr>
<td>@ sentry/browser - with treeshaking flags</td>
<td>22.94 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing)</td>
<td>36.21 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay)</td>
<td>73.39 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay) - with treeshaking flags</td>
<td>66.8 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay with Canvas)</td>
<td>78.01 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay, Feedback)</td>
<td>90.57 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Feedback)</td>
<td>40.3 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. sendFeedback)</td>
<td>27.79 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. FeedbackAsync)</td>
<td>32.58 KB</td>
</tr>
<tr>
<td>@ sentry/react</td>
<td>24.97 KB</td>
</tr>
<tr>
<td>@ sentry/react (incl. Tracing)</td>
<td>38.1 KB</td>
</tr>
<tr>
<td>@ sentry/vue</td>
<td>27.4 KB</td>
</tr>
<tr>
<td>@ sentry/vue (incl. Tracing)</td>
<td>37.9 KB</td>
</tr>
<tr>
<td>@ sentry/svelte</td>
<td>23.18 KB</td>
</tr>
<tr>
<td>CDN Bundle</td>
<td>24.36 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing)</td>
<td>36.26 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay)</td>
<td>71.27 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback)</td>
<td>76.45 KB</td>
</tr>
<tr>
<td>CDN Bundle - uncompressed</td>
<td>71.19 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing) - uncompressed</td>
<td>107.57 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay) - uncompressed</td>
<td>218.84 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed</td>
<td>231.4 KB</td>
</tr>
<tr>
<td>@ sentry/nextjs (client)</td>
<td>39.27 KB</td>
</tr>
<tr>
<td>@ sentry/sveltekit (client)</td>
<td>36.63 KB</td>
</tr>
<tr>
<td>@ sentry/node</td>
<td>142.15 KB</td>
</tr>
<tr>
<td>@ sentry/node - without tracing</td>
<td>95.58 KB</td>
</tr>
<tr>
<td>@ sentry/aws-serverless</td>
<td>119.92 KB</td>
</tr>
</tbody>
</table>
</li>
<li>
<b>9.6.0-alpha.0</b> - 2025-03-06
</li>
<li>
<b>9.5.0</b> - 2025-03-06
</li>
</ul>
from <a href="https://redirect.github.com/getsentry/sentry-javascript/releases">@sentry/browser GitHub release notes</a>
</details>
</details>
---
> [!IMPORTANT]
>
> - Check the changes in this PR to ensure they won't cause issues with your project.
> - This PR was automatically created by Snyk using the credentials of a real user.
---
**Note:** _You are seeing this because you or someone else with access to this repository has authorized Snyk to open upgrade PRs._
**For more information:** <img src="https://api.segment.io/v1/pixel/track?data=eyJ3cml0ZUtleSI6InJyWmxZcEdHY2RyTHZsb0lYd0dUcVg4WkFRTnNCOUEwIiwiYW5vbnltb3VzSWQiOiJhYjgwMDgxOS1lZTdkLTRiNzMtOGU2MS03ZWM1MWRlZDEwOWUiLCJldmVudCI6IlBSIHZpZXdlZCIsInByb3BlcnRpZXMiOnsicHJJZCI6ImFiODAwODE5LWVlN2QtNGI3My04ZTYxLTdlYzUxZGVkMTA5ZSJ9fQ==" width="0" height="0"/>
> - 🧐 [View latest project report](https://app.snyk.io/org/reisene/project/55e114f8-489e-4f14-b900-20574b041e59?utm_source&#x3D;github-cloud-app&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr)
> - 📜 [Customise PR templates](https://docs.snyk.io/scan-using-snyk/pull-requests/snyk-fix-pull-or-merge-requests/customize-pr-templates?utm_source=&utm_content=fix-pr-template)
> - 🛠 [Adjust upgrade PR settings](https://app.snyk.io/org/reisene/project/55e114f8-489e-4f14-b900-20574b041e59/settings/integration?utm_source&#x3D;github-cloud-app&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr)
> - 🔕 [Ignore this dependency or unsubscribe from future upgrade PRs](https://app.snyk.io/org/reisene/project/55e114f8-489e-4f14-b900-20574b041e59/settings/integration?pkg&#x3D;@sentry/browser&amp;utm_source&#x3D;github-cloud-app&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr#auto-dep-upgrades)
[//]: # 'snyk:metadata:{"customTemplate":{"variablesUsed":[],"fieldsUsed":[]},"dependencies":[{"name":"@sentry/browser","from":"9.5.0","to":"9.6.1"}],"env":"prod","hasFixes":false,"isBreakingChange":false,"isMajorUpgrade":false,"issuesToFix":[],"prId":"ab800819-ee7d-4b73-8e61-7ec51ded109e","prPublicId":"ab800819-ee7d-4b73-8e61-7ec51ded109e","packageManager":"npm","priorityScoreList":[],"projectPublicId":"55e114f8-489e-4f14-b900-20574b041e59","projectUrl":"https://app.snyk.io/org/reisene/project/55e114f8-489e-4f14-b900-20574b041e59?utm_source=github-cloud-app&utm_medium=referral&page=upgrade-pr","prType":"upgrade","templateFieldSources":{"branchName":"default","commitMessage":"default","description":"default","title":"default"},"templateVariants":[],"type":"auto","upgrade":[],"upgradeInfo":{"versionsDiff":3,"publishedDate":"2025-03-19T10:03:32.247Z"},"vulns":[]}'
## Podsumowanie od Sourcery
Ulepszenia:
- Aktualizacja pakietu Sentry dla przeglądarki do najnowszej wersji minor
<details>
<summary>Original summary in English</summary>
## Summary by Sourcery
Enhancements:
- Update Sentry browser package to the latest minor version
</details>
Sign up for freeto 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.

[@sentry-internal/browser-utils]: Cannot read properties of null (reading 'apply')

2 participants

@Lms24@andreiborza
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' fix(core): Ensure `fill` only patches functions by Lms24 · Pull Request #15632 · getsentry/sentry-javascript · GitHub
Skip to content

fix(core): Ensure fill only patches functions - #15632

Merged
Lms24 merged 3 commits into
developfrom
lms/fix-core-history-check
Mar 11, 2025
Merged

fix(core): Ensure fill only patches functions#15632
Lms24 merged 3 commits into
developfrom
lms/fix-core-history-check

Conversation

@Lms24

@Lms24Lms24 commented Mar 11, 2025

Copy link
Copy Markdown
Member

This PR adds a guard to our fill utility that we use to instrument/wrap methods defined on an object. However, due to a misleading type cast in fill we didn't check if the name of the method to be patched actually corresponded to a function on an object.

This was surfaced via #15552 where we'd call fill on window.history(pushState|replaceState) without checking if these two methods were actually available or functions.

Note: I initially solved this on the instrumentHistory level but then noticed that this is a more general bug in fill. Therefore I added some history-specific tests as well but I'd rather keep them than removing them. Fun fact: The more general fix saves ~8 Bytes of bundle size compared to my initial history-based fix 😅

closes#15552

@Lms24Lms24 self-assigned this Mar 11, 2025
*/
export function supportsHistory(): boolean {
return 'history' in WINDOW;
return 'history' in WINDOW && !!WINDOW.history;

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Improved this check so that if history was undefined or null we'd also return false here

@Lms24
Lms24 requested review from andreiborza and lforstMarch 11, 2025 15:02
@github-actions

github-actionsBot commented Mar 11, 2025

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser23.15 KB+0.05%+10 B 🔺
@sentry/browser - with treeshaking flags22.94 KB+0.06%+13 B 🔺
@sentry/browser (incl. Tracing)36.21 KB+0.03%+9 B 🔺
@sentry/browser (incl. Tracing, Replay)73.39 KB+0.02%+10 B 🔺
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags66.8 KB+0.02%+9 B 🔺
@sentry/browser (incl. Tracing, Replay with Canvas)78.01 KB+0.02%+10 B 🔺
@sentry/browser (incl. Tracing, Replay, Feedback)90.57 KB+0.02%+11 B 🔺
@sentry/browser (incl. Feedback)40.3 KB+0.03%+10 B 🔺
@sentry/browser (incl. sendFeedback)27.79 KB+0.04%+9 B 🔺
@sentry/browser (incl. FeedbackAsync)32.58 KB+0.03%+10 B 🔺
@sentry/react24.97 KB+0.04%+10 B 🔺
@sentry/react (incl. Tracing)38.1 KB+0.03%+10 B 🔺
@sentry/vue27.4 KB+0.05%+12 B 🔺
@sentry/vue (incl. Tracing)37.9 KB+0.03%+9 B 🔺
@sentry/svelte23.18 KB+0.05%+10 B 🔺
CDN Bundle24.36 KB+0.05%+12 B 🔺
CDN Bundle (incl. Tracing)36.26 KB+0.03%+11 B 🔺
CDN Bundle (incl. Tracing, Replay)71.27 KB+0.02%+12 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback)76.44 KB+0.02%+12 B 🔺
CDN Bundle - uncompressed71.19 KB+0.07%+49 B 🔺
CDN Bundle (incl. Tracing) - uncompressed107.57 KB+0.05%+49 B 🔺
CDN Bundle (incl. Tracing, Replay) - uncompressed218.84 KB+0.03%+49 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed231.4 KB+0.03%+49 B 🔺
@sentry/nextjs (client)39.27 KB+0.04%+13 B 🔺
@sentry/sveltekit (client)36.63 KB+0.03%+9 B 🔺
@sentry/node142.15 KB+0.01%+5 B 🔺
@sentry/node - without tracing95.58 KB+0.01%+4 B 🔺
@sentry/aws-serverless119.92 KB+0.01%+4 B 🔺

View base workflow run

@Lms24

Lms24 commented Mar 11, 2025

Copy link
Copy Markdown
MemberAuthor

I will rework this to more generally fix the wird behaviour in our fill patching utility.
EDIT: Done


expect(WINDOW.history).toEqual({
replaceState: expect.any(Function), // patched function
pushState: undefined, // unpatched

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

prior to this PR, pushState would have become a Function, resulting in the wrapper function calling undefined.apply on the "original function".

@Lms24Lms24 changed the title fix(browser): Only patch available window.history propertiesfix(core): Ensure fill only patches functionsMar 11, 2025
@Lms24
Lms24 marked this pull request as ready for review March 11, 2025 15:24

@andreiborzaandreiborza left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

nice, thanks for guarding this

@Lms24
Lms24 merged commit 47f95e5 into developMar 11, 2025
@Lms24
Lms24 deleted the lms/fix-core-history-check branch March 11, 2025 16:27
aviator-appBot added a commit to reisene/HulajDusza-serwis that referenced this pull request Apr 10, 2025
![snyk-io[bot]](https://badgen.net/badge/icon/snyk-io%5Bbot%5D/green?label=) ![Contributor](https://badgen.net/badge/icon/Contributor/000000?label=) [<img width="16" alt="Powered by Pull Request Badge" src="https://user-images.githubusercontent.com/1393946/111216524-d2bb8e00-85d4-11eb-821b-ed4c00989c02.png">](https://pullrequestbadge.com/?utm_medium=github&utm_source=reisene&utm_campaign=badge_info)<!-- PR-BADGE: PLEASE DO NOT REMOVE THIS COMMENT -->
![snyk-top-banner](https://res.cloudinary.com/snyk/image/upload/r-d/scm-platform/snyk-pull-requests/pr-banner-default.svg)
<h3>Snyk has created this PR to upgrade @sentry/browser from 9.5.0 to 9.6.1.</h3>
:information_source: Keep your dependencies up-to-date. This makes it easier to fix existing vulnerabilities and to more quickly identify and fix newly disclosed vulnerabilities when they affect your project.
<hr/>
- The recommended version is **3 versions** ahead of your current version.
- The recommended version was released **22 days ago**.
<details>
<summary><b>Release notes</b></summary>
<br/>
<details>
<summary>Package name: <b>@sentry/browser</b></summary>
<ul>
<li>
<b>9.6.1</b> - <a href="https://redirect.github.com/getsentry/sentry-javascript/releases/tag/9.6.1">2025-03-19</a></br><ul>
<li>feat(deps): bump @ prisma/instrumentation from 6.4.1 to 6.5.0 (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15714" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15714/hovercard">#15714</a>)</li>
<li>feat(deps): bump @ sentry/cli from 2.42.2 to 2.42.3 (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15711" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15711/hovercard">#15711</a>)</li>
<li>fix(nextjs): Re-patch router if it is overridden by Next.js (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15721" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15721/hovercard">#15721</a>)</li>
<li>fix(nuxt): Add Nitro Rollup plugin to inject Sentry server config (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15710" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15710/hovercard">#15710</a>)</li>
<li>chore(deps): Bump rollup to 4.35.0 (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15651" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15651/hovercard">#15651</a>)</li>
</ul>
<h2>Bundle size 📦</h2>
<table>
<thead>
<tr>
<th>Path</th>
<th>Size</th>
</tr>
</thead>
<tbody>
<tr>
<td>@ sentry/browser</td>
<td>23.15 KB</td>
</tr>
<tr>
<td>@ sentry/browser - with treeshaking flags</td>
<td>22.94 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing)</td>
<td>36.21 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay)</td>
<td>73.39 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay) - with treeshaking flags</td>
<td>66.81 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay with Canvas)</td>
<td>78.01 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay, Feedback)</td>
<td>90.57 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Feedback)</td>
<td>40.3 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. sendFeedback)</td>
<td>27.79 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. FeedbackAsync)</td>
<td>32.58 KB</td>
</tr>
<tr>
<td>@ sentry/react</td>
<td>24.97 KB</td>
</tr>
<tr>
<td>@ sentry/react (incl. Tracing)</td>
<td>38.1 KB</td>
</tr>
<tr>
<td>@ sentry/vue</td>
<td>27.4 KB</td>
</tr>
<tr>
<td>@ sentry/vue (incl. Tracing)</td>
<td>37.9 KB</td>
</tr>
<tr>
<td>@ sentry/svelte</td>
<td>23.18 KB</td>
</tr>
<tr>
<td>CDN Bundle</td>
<td>24.36 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing)</td>
<td>36.26 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay)</td>
<td>71.27 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback)</td>
<td>76.45 KB</td>
</tr>
<tr>
<td>CDN Bundle - uncompressed</td>
<td>71.19 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing) - uncompressed</td>
<td>107.57 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay) - uncompressed</td>
<td>218.83 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed</td>
<td>231.39 KB</td>
</tr>
<tr>
<td>@ sentry/nextjs (client)</td>
<td>39.38 KB</td>
</tr>
<tr>
<td>@ sentry/sveltekit (client)</td>
<td>36.63 KB</td>
</tr>
<tr>
<td>@ sentry/node</td>
<td>142.29 KB</td>
</tr>
<tr>
<td>@ sentry/node - without tracing</td>
<td>95.71 KB</td>
</tr>
<tr>
<td>@ sentry/aws-serverless</td>
<td>120.06 KB</td>
</tr>
</tbody>
</table>
</li>
<li>
<b>9.6.0</b> - <a href="https://redirect.github.com/getsentry/sentry-javascript/releases/tag/9.6.0">2025-03-17</a></br><h3>Important Changes</h3>
<ul>
<li>
<p><strong>feat(tanstackstart): Add <code>@ sentry/tanstackstart-react</code> package and make <code>@ sentry/tanstackstart</code> package a utility package (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15629" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15629/hovercard">#15629</a>)</strong></p>
<p>Since TanStack Start is supposed to be a generic framework that supports libraries like React and Solid, the <code>@ sentry/tanstackstart</code> SDK package was renamed to <code>@ sentry/tanstackstart-react</code> to reflect that the SDK is specifically intended to be used for React TanStack Start applications.<br>
Note that the TanStack Start SDK is still in alpha status and may be subject to breaking changes in non-major package updates.</p>
</li>
</ul>
<h3>Other Changes</h3>
<ul>
<li>feat(astro): Accept all vite-plugin options (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15638" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15638/hovercard">#15638</a>)</li>
<li>feat(deps): bump @ sentry/webpack-plugin from 3.2.1 to 3.2.2 (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15627" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15627/hovercard">#15627</a>)</li>
<li>feat(tanstackstart): Refine initial API (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15574" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15574/hovercard">#15574</a>)</li>
<li>fix(core): Ensure <code>fill</code> only patches functions (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15632" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15632/hovercard">#15632</a>)</li>
<li>fix(nextjs): Consider <code>pageExtensions</code> when looking for instrumentation file (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15701" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15701/hovercard">#15701</a>)</li>
<li>fix(remix): Null-check <code>options</code> (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15610" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15610/hovercard">#15610</a>)</li>
<li>fix(sveltekit): Correctly parse angle bracket type assertions for auto instrumentation (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15578" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15578/hovercard">#15578</a>)</li>
<li>fix(sveltekit): Guard process variable (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15605" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15605/hovercard">#15605</a>)</li>
</ul>
<p>Work in this release was contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/angelikatyborska/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/angelikatyborska">@ angelikatyborska</a> and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/nwalters512/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/nwalters512">@ nwalters512</a>. Thank you for your contributions!</p>
<h2>Bundle size 📦</h2>
<table>
<thead>
<tr>
<th>Path</th>
<th>Size</th>
</tr>
</thead>
<tbody>
<tr>
<td>@ sentry/browser</td>
<td>23.15 KB</td>
</tr>
<tr>
<td>@ sentry/browser - with treeshaking flags</td>
<td>22.94 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing)</td>
<td>36.21 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay)</td>
<td>73.39 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay) - with treeshaking flags</td>
<td>66.8 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay with Canvas)</td>
<td>78.01 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay, Feedback)</td>
<td>90.57 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Feedback)</td>
<td>40.3 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. sendFeedback)</td>
<td>27.79 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. FeedbackAsync)</td>
<td>32.58 KB</td>
</tr>
<tr>
<td>@ sentry/react</td>
<td>24.97 KB</td>
</tr>
<tr>
<td>@ sentry/react (incl. Tracing)</td>
<td>38.1 KB</td>
</tr>
<tr>
<td>@ sentry/vue</td>
<td>27.4 KB</td>
</tr>
<tr>
<td>@ sentry/vue (incl. Tracing)</td>
<td>37.9 KB</td>
</tr>
<tr>
<td>@ sentry/svelte</td>
<td>23.18 KB</td>
</tr>
<tr>
<td>CDN Bundle</td>
<td>24.36 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing)</td>
<td>36.26 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay)</td>
<td>71.27 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback)</td>
<td>76.45 KB</td>
</tr>
<tr>
<td>CDN Bundle - uncompressed</td>
<td>71.19 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing) - uncompressed</td>
<td>107.57 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay) - uncompressed</td>
<td>218.84 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed</td>
<td>231.4 KB</td>
</tr>
<tr>
<td>@ sentry/nextjs (client)</td>
<td>39.27 KB</td>
</tr>
<tr>
<td>@ sentry/sveltekit (client)</td>
<td>36.63 KB</td>
</tr>
<tr>
<td>@ sentry/node</td>
<td>142.15 KB</td>
</tr>
<tr>
<td>@ sentry/node - without tracing</td>
<td>95.58 KB</td>
</tr>
<tr>
<td>@ sentry/aws-serverless</td>
<td>119.92 KB</td>
</tr>
</tbody>
</table>
</li>
<li>
<b>9.6.0-alpha.0</b> - 2025-03-06
</li>
<li>
<b>9.5.0</b> - 2025-03-06
</li>
</ul>
from <a href="https://redirect.github.com/getsentry/sentry-javascript/releases">@sentry/browser GitHub release notes</a>
</details>
</details>
---
> [!IMPORTANT]
>
> - Check the changes in this PR to ensure they won't cause issues with your project.
> - This PR was automatically created by Snyk using the credentials of a real user.
---
**Note:** _You are seeing this because you or someone else with access to this repository has authorized Snyk to open upgrade PRs._
**For more information:** <img src="https://api.segment.io/v1/pixel/track?data=eyJ3cml0ZUtleSI6InJyWmxZcEdHY2RyTHZsb0lYd0dUcVg4WkFRTnNCOUEwIiwiYW5vbnltb3VzSWQiOiJhYjgwMDgxOS1lZTdkLTRiNzMtOGU2MS03ZWM1MWRlZDEwOWUiLCJldmVudCI6IlBSIHZpZXdlZCIsInByb3BlcnRpZXMiOnsicHJJZCI6ImFiODAwODE5LWVlN2QtNGI3My04ZTYxLTdlYzUxZGVkMTA5ZSJ9fQ==" width="0" height="0"/>
> - 🧐 [View latest project report](https://app.snyk.io/org/reisene/project/55e114f8-489e-4f14-b900-20574b041e59?utm_source&#x3D;github-cloud-app&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr)
> - 📜 [Customise PR templates](https://docs.snyk.io/scan-using-snyk/pull-requests/snyk-fix-pull-or-merge-requests/customize-pr-templates?utm_source=&utm_content=fix-pr-template)
> - 🛠 [Adjust upgrade PR settings](https://app.snyk.io/org/reisene/project/55e114f8-489e-4f14-b900-20574b041e59/settings/integration?utm_source&#x3D;github-cloud-app&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr)
> - 🔕 [Ignore this dependency or unsubscribe from future upgrade PRs](https://app.snyk.io/org/reisene/project/55e114f8-489e-4f14-b900-20574b041e59/settings/integration?pkg&#x3D;@sentry/browser&amp;utm_source&#x3D;github-cloud-app&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr#auto-dep-upgrades)
[//]: # 'snyk:metadata:{"customTemplate":{"variablesUsed":[],"fieldsUsed":[]},"dependencies":[{"name":"@sentry/browser","from":"9.5.0","to":"9.6.1"}],"env":"prod","hasFixes":false,"isBreakingChange":false,"isMajorUpgrade":false,"issuesToFix":[],"prId":"ab800819-ee7d-4b73-8e61-7ec51ded109e","prPublicId":"ab800819-ee7d-4b73-8e61-7ec51ded109e","packageManager":"npm","priorityScoreList":[],"projectPublicId":"55e114f8-489e-4f14-b900-20574b041e59","projectUrl":"https://app.snyk.io/org/reisene/project/55e114f8-489e-4f14-b900-20574b041e59?utm_source=github-cloud-app&utm_medium=referral&page=upgrade-pr","prType":"upgrade","templateFieldSources":{"branchName":"default","commitMessage":"default","description":"default","title":"default"},"templateVariants":[],"type":"auto","upgrade":[],"upgradeInfo":{"versionsDiff":3,"publishedDate":"2025-03-19T10:03:32.247Z"},"vulns":[]}'
## Podsumowanie od Sourcery
Ulepszenia:
- Aktualizacja pakietu Sentry dla przeglądarki do najnowszej wersji minor
<details>
<summary>Original summary in English</summary>
## Summary by Sourcery
Enhancements:
- Update Sentry browser package to the latest minor version
</details>
Sign up for freeto 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.

[@sentry-internal/browser-utils]: Cannot read properties of null (reading 'apply')

2 participants

@Lms24@andreiborza
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' fix(core): Ensure `fill` only patches functions by Lms24 · Pull Request #15632 · getsentry/sentry-javascript · GitHub
Skip to content

fix(core): Ensure fill only patches functions - #15632

Merged
Lms24 merged 3 commits into
developfrom
lms/fix-core-history-check
Mar 11, 2025
Merged

fix(core): Ensure fill only patches functions#15632
Lms24 merged 3 commits into
developfrom
lms/fix-core-history-check

Conversation

@Lms24

@Lms24Lms24 commented Mar 11, 2025

Copy link
Copy Markdown
Member

This PR adds a guard to our fill utility that we use to instrument/wrap methods defined on an object. However, due to a misleading type cast in fill we didn't check if the name of the method to be patched actually corresponded to a function on an object.

This was surfaced via #15552 where we'd call fill on window.history(pushState|replaceState) without checking if these two methods were actually available or functions.

Note: I initially solved this on the instrumentHistory level but then noticed that this is a more general bug in fill. Therefore I added some history-specific tests as well but I'd rather keep them than removing them. Fun fact: The more general fix saves ~8 Bytes of bundle size compared to my initial history-based fix 😅

closes#15552

@Lms24Lms24 self-assigned this Mar 11, 2025
*/
export function supportsHistory(): boolean {
return 'history' in WINDOW;
return 'history' in WINDOW && !!WINDOW.history;

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Improved this check so that if history was undefined or null we'd also return false here

@Lms24
Lms24 requested review from andreiborza and lforstMarch 11, 2025 15:02
@github-actions

github-actionsBot commented Mar 11, 2025

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser23.15 KB+0.05%+10 B 🔺
@sentry/browser - with treeshaking flags22.94 KB+0.06%+13 B 🔺
@sentry/browser (incl. Tracing)36.21 KB+0.03%+9 B 🔺
@sentry/browser (incl. Tracing, Replay)73.39 KB+0.02%+10 B 🔺
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags66.8 KB+0.02%+9 B 🔺
@sentry/browser (incl. Tracing, Replay with Canvas)78.01 KB+0.02%+10 B 🔺
@sentry/browser (incl. Tracing, Replay, Feedback)90.57 KB+0.02%+11 B 🔺
@sentry/browser (incl. Feedback)40.3 KB+0.03%+10 B 🔺
@sentry/browser (incl. sendFeedback)27.79 KB+0.04%+9 B 🔺
@sentry/browser (incl. FeedbackAsync)32.58 KB+0.03%+10 B 🔺
@sentry/react24.97 KB+0.04%+10 B 🔺
@sentry/react (incl. Tracing)38.1 KB+0.03%+10 B 🔺
@sentry/vue27.4 KB+0.05%+12 B 🔺
@sentry/vue (incl. Tracing)37.9 KB+0.03%+9 B 🔺
@sentry/svelte23.18 KB+0.05%+10 B 🔺
CDN Bundle24.36 KB+0.05%+12 B 🔺
CDN Bundle (incl. Tracing)36.26 KB+0.03%+11 B 🔺
CDN Bundle (incl. Tracing, Replay)71.27 KB+0.02%+12 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback)76.44 KB+0.02%+12 B 🔺
CDN Bundle - uncompressed71.19 KB+0.07%+49 B 🔺
CDN Bundle (incl. Tracing) - uncompressed107.57 KB+0.05%+49 B 🔺
CDN Bundle (incl. Tracing, Replay) - uncompressed218.84 KB+0.03%+49 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed231.4 KB+0.03%+49 B 🔺
@sentry/nextjs (client)39.27 KB+0.04%+13 B 🔺
@sentry/sveltekit (client)36.63 KB+0.03%+9 B 🔺
@sentry/node142.15 KB+0.01%+5 B 🔺
@sentry/node - without tracing95.58 KB+0.01%+4 B 🔺
@sentry/aws-serverless119.92 KB+0.01%+4 B 🔺

View base workflow run

@Lms24

Lms24 commented Mar 11, 2025

Copy link
Copy Markdown
MemberAuthor

I will rework this to more generally fix the wird behaviour in our fill patching utility.
EDIT: Done


expect(WINDOW.history).toEqual({
replaceState: expect.any(Function), // patched function
pushState: undefined, // unpatched

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

prior to this PR, pushState would have become a Function, resulting in the wrapper function calling undefined.apply on the "original function".

@Lms24Lms24 changed the title fix(browser): Only patch available window.history propertiesfix(core): Ensure fill only patches functionsMar 11, 2025
@Lms24
Lms24 marked this pull request as ready for review March 11, 2025 15:24

@andreiborzaandreiborza left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

nice, thanks for guarding this

@Lms24
Lms24 merged commit 47f95e5 into developMar 11, 2025
@Lms24
Lms24 deleted the lms/fix-core-history-check branch March 11, 2025 16:27
aviator-appBot added a commit to reisene/HulajDusza-serwis that referenced this pull request Apr 10, 2025
![snyk-io[bot]](https://badgen.net/badge/icon/snyk-io%5Bbot%5D/green?label=) ![Contributor](https://badgen.net/badge/icon/Contributor/000000?label=) [<img width="16" alt="Powered by Pull Request Badge" src="https://user-images.githubusercontent.com/1393946/111216524-d2bb8e00-85d4-11eb-821b-ed4c00989c02.png">](https://pullrequestbadge.com/?utm_medium=github&utm_source=reisene&utm_campaign=badge_info)<!-- PR-BADGE: PLEASE DO NOT REMOVE THIS COMMENT -->
![snyk-top-banner](https://res.cloudinary.com/snyk/image/upload/r-d/scm-platform/snyk-pull-requests/pr-banner-default.svg)
<h3>Snyk has created this PR to upgrade @sentry/browser from 9.5.0 to 9.6.1.</h3>
:information_source: Keep your dependencies up-to-date. This makes it easier to fix existing vulnerabilities and to more quickly identify and fix newly disclosed vulnerabilities when they affect your project.
<hr/>
- The recommended version is **3 versions** ahead of your current version.
- The recommended version was released **22 days ago**.
<details>
<summary><b>Release notes</b></summary>
<br/>
<details>
<summary>Package name: <b>@sentry/browser</b></summary>
<ul>
<li>
<b>9.6.1</b> - <a href="https://redirect.github.com/getsentry/sentry-javascript/releases/tag/9.6.1">2025-03-19</a></br><ul>
<li>feat(deps): bump @ prisma/instrumentation from 6.4.1 to 6.5.0 (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15714" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15714/hovercard">#15714</a>)</li>
<li>feat(deps): bump @ sentry/cli from 2.42.2 to 2.42.3 (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15711" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15711/hovercard">#15711</a>)</li>
<li>fix(nextjs): Re-patch router if it is overridden by Next.js (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15721" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15721/hovercard">#15721</a>)</li>
<li>fix(nuxt): Add Nitro Rollup plugin to inject Sentry server config (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15710" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15710/hovercard">#15710</a>)</li>
<li>chore(deps): Bump rollup to 4.35.0 (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15651" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15651/hovercard">#15651</a>)</li>
</ul>
<h2>Bundle size 📦</h2>
<table>
<thead>
<tr>
<th>Path</th>
<th>Size</th>
</tr>
</thead>
<tbody>
<tr>
<td>@ sentry/browser</td>
<td>23.15 KB</td>
</tr>
<tr>
<td>@ sentry/browser - with treeshaking flags</td>
<td>22.94 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing)</td>
<td>36.21 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay)</td>
<td>73.39 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay) - with treeshaking flags</td>
<td>66.81 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay with Canvas)</td>
<td>78.01 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay, Feedback)</td>
<td>90.57 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Feedback)</td>
<td>40.3 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. sendFeedback)</td>
<td>27.79 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. FeedbackAsync)</td>
<td>32.58 KB</td>
</tr>
<tr>
<td>@ sentry/react</td>
<td>24.97 KB</td>
</tr>
<tr>
<td>@ sentry/react (incl. Tracing)</td>
<td>38.1 KB</td>
</tr>
<tr>
<td>@ sentry/vue</td>
<td>27.4 KB</td>
</tr>
<tr>
<td>@ sentry/vue (incl. Tracing)</td>
<td>37.9 KB</td>
</tr>
<tr>
<td>@ sentry/svelte</td>
<td>23.18 KB</td>
</tr>
<tr>
<td>CDN Bundle</td>
<td>24.36 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing)</td>
<td>36.26 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay)</td>
<td>71.27 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback)</td>
<td>76.45 KB</td>
</tr>
<tr>
<td>CDN Bundle - uncompressed</td>
<td>71.19 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing) - uncompressed</td>
<td>107.57 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay) - uncompressed</td>
<td>218.83 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed</td>
<td>231.39 KB</td>
</tr>
<tr>
<td>@ sentry/nextjs (client)</td>
<td>39.38 KB</td>
</tr>
<tr>
<td>@ sentry/sveltekit (client)</td>
<td>36.63 KB</td>
</tr>
<tr>
<td>@ sentry/node</td>
<td>142.29 KB</td>
</tr>
<tr>
<td>@ sentry/node - without tracing</td>
<td>95.71 KB</td>
</tr>
<tr>
<td>@ sentry/aws-serverless</td>
<td>120.06 KB</td>
</tr>
</tbody>
</table>
</li>
<li>
<b>9.6.0</b> - <a href="https://redirect.github.com/getsentry/sentry-javascript/releases/tag/9.6.0">2025-03-17</a></br><h3>Important Changes</h3>
<ul>
<li>
<p><strong>feat(tanstackstart): Add <code>@ sentry/tanstackstart-react</code> package and make <code>@ sentry/tanstackstart</code> package a utility package (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15629" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15629/hovercard">#15629</a>)</strong></p>
<p>Since TanStack Start is supposed to be a generic framework that supports libraries like React and Solid, the <code>@ sentry/tanstackstart</code> SDK package was renamed to <code>@ sentry/tanstackstart-react</code> to reflect that the SDK is specifically intended to be used for React TanStack Start applications.<br>
Note that the TanStack Start SDK is still in alpha status and may be subject to breaking changes in non-major package updates.</p>
</li>
</ul>
<h3>Other Changes</h3>
<ul>
<li>feat(astro): Accept all vite-plugin options (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15638" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15638/hovercard">#15638</a>)</li>
<li>feat(deps): bump @ sentry/webpack-plugin from 3.2.1 to 3.2.2 (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15627" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15627/hovercard">#15627</a>)</li>
<li>feat(tanstackstart): Refine initial API (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15574" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15574/hovercard">#15574</a>)</li>
<li>fix(core): Ensure <code>fill</code> only patches functions (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15632" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15632/hovercard">#15632</a>)</li>
<li>fix(nextjs): Consider <code>pageExtensions</code> when looking for instrumentation file (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15701" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15701/hovercard">#15701</a>)</li>
<li>fix(remix): Null-check <code>options</code> (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15610" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15610/hovercard">#15610</a>)</li>
<li>fix(sveltekit): Correctly parse angle bracket type assertions for auto instrumentation (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15578" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15578/hovercard">#15578</a>)</li>
<li>fix(sveltekit): Guard process variable (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15605" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15605/hovercard">#15605</a>)</li>
</ul>
<p>Work in this release was contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/angelikatyborska/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/angelikatyborska">@ angelikatyborska</a> and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/nwalters512/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/nwalters512">@ nwalters512</a>. Thank you for your contributions!</p>
<h2>Bundle size 📦</h2>
<table>
<thead>
<tr>
<th>Path</th>
<th>Size</th>
</tr>
</thead>
<tbody>
<tr>
<td>@ sentry/browser</td>
<td>23.15 KB</td>
</tr>
<tr>
<td>@ sentry/browser - with treeshaking flags</td>
<td>22.94 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing)</td>
<td>36.21 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay)</td>
<td>73.39 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay) - with treeshaking flags</td>
<td>66.8 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay with Canvas)</td>
<td>78.01 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay, Feedback)</td>
<td>90.57 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Feedback)</td>
<td>40.3 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. sendFeedback)</td>
<td>27.79 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. FeedbackAsync)</td>
<td>32.58 KB</td>
</tr>
<tr>
<td>@ sentry/react</td>
<td>24.97 KB</td>
</tr>
<tr>
<td>@ sentry/react (incl. Tracing)</td>
<td>38.1 KB</td>
</tr>
<tr>
<td>@ sentry/vue</td>
<td>27.4 KB</td>
</tr>
<tr>
<td>@ sentry/vue (incl. Tracing)</td>
<td>37.9 KB</td>
</tr>
<tr>
<td>@ sentry/svelte</td>
<td>23.18 KB</td>
</tr>
<tr>
<td>CDN Bundle</td>
<td>24.36 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing)</td>
<td>36.26 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay)</td>
<td>71.27 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback)</td>
<td>76.45 KB</td>
</tr>
<tr>
<td>CDN Bundle - uncompressed</td>
<td>71.19 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing) - uncompressed</td>
<td>107.57 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay) - uncompressed</td>
<td>218.84 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed</td>
<td>231.4 KB</td>
</tr>
<tr>
<td>@ sentry/nextjs (client)</td>
<td>39.27 KB</td>
</tr>
<tr>
<td>@ sentry/sveltekit (client)</td>
<td>36.63 KB</td>
</tr>
<tr>
<td>@ sentry/node</td>
<td>142.15 KB</td>
</tr>
<tr>
<td>@ sentry/node - without tracing</td>
<td>95.58 KB</td>
</tr>
<tr>
<td>@ sentry/aws-serverless</td>
<td>119.92 KB</td>
</tr>
</tbody>
</table>
</li>
<li>
<b>9.6.0-alpha.0</b> - 2025-03-06
</li>
<li>
<b>9.5.0</b> - 2025-03-06
</li>
</ul>
from <a href="https://redirect.github.com/getsentry/sentry-javascript/releases">@sentry/browser GitHub release notes</a>
</details>
</details>
---
> [!IMPORTANT]
>
> - Check the changes in this PR to ensure they won't cause issues with your project.
> - This PR was automatically created by Snyk using the credentials of a real user.
---
**Note:** _You are seeing this because you or someone else with access to this repository has authorized Snyk to open upgrade PRs._
**For more information:** <img src="https://api.segment.io/v1/pixel/track?data=eyJ3cml0ZUtleSI6InJyWmxZcEdHY2RyTHZsb0lYd0dUcVg4WkFRTnNCOUEwIiwiYW5vbnltb3VzSWQiOiJhYjgwMDgxOS1lZTdkLTRiNzMtOGU2MS03ZWM1MWRlZDEwOWUiLCJldmVudCI6IlBSIHZpZXdlZCIsInByb3BlcnRpZXMiOnsicHJJZCI6ImFiODAwODE5LWVlN2QtNGI3My04ZTYxLTdlYzUxZGVkMTA5ZSJ9fQ==" width="0" height="0"/>
> - 🧐 [View latest project report](https://app.snyk.io/org/reisene/project/55e114f8-489e-4f14-b900-20574b041e59?utm_source&#x3D;github-cloud-app&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr)
> - 📜 [Customise PR templates](https://docs.snyk.io/scan-using-snyk/pull-requests/snyk-fix-pull-or-merge-requests/customize-pr-templates?utm_source=&utm_content=fix-pr-template)
> - 🛠 [Adjust upgrade PR settings](https://app.snyk.io/org/reisene/project/55e114f8-489e-4f14-b900-20574b041e59/settings/integration?utm_source&#x3D;github-cloud-app&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr)
> - 🔕 [Ignore this dependency or unsubscribe from future upgrade PRs](https://app.snyk.io/org/reisene/project/55e114f8-489e-4f14-b900-20574b041e59/settings/integration?pkg&#x3D;@sentry/browser&amp;utm_source&#x3D;github-cloud-app&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr#auto-dep-upgrades)
[//]: # 'snyk:metadata:{"customTemplate":{"variablesUsed":[],"fieldsUsed":[]},"dependencies":[{"name":"@sentry/browser","from":"9.5.0","to":"9.6.1"}],"env":"prod","hasFixes":false,"isBreakingChange":false,"isMajorUpgrade":false,"issuesToFix":[],"prId":"ab800819-ee7d-4b73-8e61-7ec51ded109e","prPublicId":"ab800819-ee7d-4b73-8e61-7ec51ded109e","packageManager":"npm","priorityScoreList":[],"projectPublicId":"55e114f8-489e-4f14-b900-20574b041e59","projectUrl":"https://app.snyk.io/org/reisene/project/55e114f8-489e-4f14-b900-20574b041e59?utm_source=github-cloud-app&utm_medium=referral&page=upgrade-pr","prType":"upgrade","templateFieldSources":{"branchName":"default","commitMessage":"default","description":"default","title":"default"},"templateVariants":[],"type":"auto","upgrade":[],"upgradeInfo":{"versionsDiff":3,"publishedDate":"2025-03-19T10:03:32.247Z"},"vulns":[]}'
## Podsumowanie od Sourcery
Ulepszenia:
- Aktualizacja pakietu Sentry dla przeglądarki do najnowszej wersji minor
<details>
<summary>Original summary in English</summary>
## Summary by Sourcery
Enhancements:
- Update Sentry browser package to the latest minor version
</details>
Sign up for freeto 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.

[@sentry-internal/browser-utils]: Cannot read properties of null (reading 'apply')

2 participants

@Lms24@andreiborza
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' fix(core): Ensure `fill` only patches functions by Lms24 · Pull Request #15632 · getsentry/sentry-javascript · GitHub
Skip to content

fix(core): Ensure fill only patches functions - #15632

Merged
Lms24 merged 3 commits into
developfrom
lms/fix-core-history-check
Mar 11, 2025
Merged

fix(core): Ensure fill only patches functions#15632
Lms24 merged 3 commits into
developfrom
lms/fix-core-history-check

Conversation

@Lms24

@Lms24Lms24 commented Mar 11, 2025

Copy link
Copy Markdown
Member

This PR adds a guard to our fill utility that we use to instrument/wrap methods defined on an object. However, due to a misleading type cast in fill we didn't check if the name of the method to be patched actually corresponded to a function on an object.

This was surfaced via #15552 where we'd call fill on window.history(pushState|replaceState) without checking if these two methods were actually available or functions.

Note: I initially solved this on the instrumentHistory level but then noticed that this is a more general bug in fill. Therefore I added some history-specific tests as well but I'd rather keep them than removing them. Fun fact: The more general fix saves ~8 Bytes of bundle size compared to my initial history-based fix 😅

closes#15552

@Lms24Lms24 self-assigned this Mar 11, 2025
*/
export function supportsHistory(): boolean {
return 'history' in WINDOW;
return 'history' in WINDOW && !!WINDOW.history;

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Improved this check so that if history was undefined or null we'd also return false here

@Lms24
Lms24 requested review from andreiborza and lforstMarch 11, 2025 15:02
@github-actions

github-actionsBot commented Mar 11, 2025

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser23.15 KB+0.05%+10 B 🔺
@sentry/browser - with treeshaking flags22.94 KB+0.06%+13 B 🔺
@sentry/browser (incl. Tracing)36.21 KB+0.03%+9 B 🔺
@sentry/browser (incl. Tracing, Replay)73.39 KB+0.02%+10 B 🔺
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags66.8 KB+0.02%+9 B 🔺
@sentry/browser (incl. Tracing, Replay with Canvas)78.01 KB+0.02%+10 B 🔺
@sentry/browser (incl. Tracing, Replay, Feedback)90.57 KB+0.02%+11 B 🔺
@sentry/browser (incl. Feedback)40.3 KB+0.03%+10 B 🔺
@sentry/browser (incl. sendFeedback)27.79 KB+0.04%+9 B 🔺
@sentry/browser (incl. FeedbackAsync)32.58 KB+0.03%+10 B 🔺
@sentry/react24.97 KB+0.04%+10 B 🔺
@sentry/react (incl. Tracing)38.1 KB+0.03%+10 B 🔺
@sentry/vue27.4 KB+0.05%+12 B 🔺
@sentry/vue (incl. Tracing)37.9 KB+0.03%+9 B 🔺
@sentry/svelte23.18 KB+0.05%+10 B 🔺
CDN Bundle24.36 KB+0.05%+12 B 🔺
CDN Bundle (incl. Tracing)36.26 KB+0.03%+11 B 🔺
CDN Bundle (incl. Tracing, Replay)71.27 KB+0.02%+12 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback)76.44 KB+0.02%+12 B 🔺
CDN Bundle - uncompressed71.19 KB+0.07%+49 B 🔺
CDN Bundle (incl. Tracing) - uncompressed107.57 KB+0.05%+49 B 🔺
CDN Bundle (incl. Tracing, Replay) - uncompressed218.84 KB+0.03%+49 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed231.4 KB+0.03%+49 B 🔺
@sentry/nextjs (client)39.27 KB+0.04%+13 B 🔺
@sentry/sveltekit (client)36.63 KB+0.03%+9 B 🔺
@sentry/node142.15 KB+0.01%+5 B 🔺
@sentry/node - without tracing95.58 KB+0.01%+4 B 🔺
@sentry/aws-serverless119.92 KB+0.01%+4 B 🔺

View base workflow run

@Lms24

Lms24 commented Mar 11, 2025

Copy link
Copy Markdown
MemberAuthor

I will rework this to more generally fix the wird behaviour in our fill patching utility.
EDIT: Done


expect(WINDOW.history).toEqual({
replaceState: expect.any(Function), // patched function
pushState: undefined, // unpatched

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

prior to this PR, pushState would have become a Function, resulting in the wrapper function calling undefined.apply on the "original function".

@Lms24Lms24 changed the title fix(browser): Only patch available window.history propertiesfix(core): Ensure fill only patches functionsMar 11, 2025
@Lms24
Lms24 marked this pull request as ready for review March 11, 2025 15:24

@andreiborzaandreiborza left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

nice, thanks for guarding this

@Lms24
Lms24 merged commit 47f95e5 into developMar 11, 2025
@Lms24
Lms24 deleted the lms/fix-core-history-check branch March 11, 2025 16:27
aviator-appBot added a commit to reisene/HulajDusza-serwis that referenced this pull request Apr 10, 2025
![snyk-io[bot]](https://badgen.net/badge/icon/snyk-io%5Bbot%5D/green?label=) ![Contributor](https://badgen.net/badge/icon/Contributor/000000?label=) [<img width="16" alt="Powered by Pull Request Badge" src="https://user-images.githubusercontent.com/1393946/111216524-d2bb8e00-85d4-11eb-821b-ed4c00989c02.png">](https://pullrequestbadge.com/?utm_medium=github&utm_source=reisene&utm_campaign=badge_info)<!-- PR-BADGE: PLEASE DO NOT REMOVE THIS COMMENT -->
![snyk-top-banner](https://res.cloudinary.com/snyk/image/upload/r-d/scm-platform/snyk-pull-requests/pr-banner-default.svg)
<h3>Snyk has created this PR to upgrade @sentry/browser from 9.5.0 to 9.6.1.</h3>
:information_source: Keep your dependencies up-to-date. This makes it easier to fix existing vulnerabilities and to more quickly identify and fix newly disclosed vulnerabilities when they affect your project.
<hr/>
- The recommended version is **3 versions** ahead of your current version.
- The recommended version was released **22 days ago**.
<details>
<summary><b>Release notes</b></summary>
<br/>
<details>
<summary>Package name: <b>@sentry/browser</b></summary>
<ul>
<li>
<b>9.6.1</b> - <a href="https://redirect.github.com/getsentry/sentry-javascript/releases/tag/9.6.1">2025-03-19</a></br><ul>
<li>feat(deps): bump @ prisma/instrumentation from 6.4.1 to 6.5.0 (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15714" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15714/hovercard">#15714</a>)</li>
<li>feat(deps): bump @ sentry/cli from 2.42.2 to 2.42.3 (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15711" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15711/hovercard">#15711</a>)</li>
<li>fix(nextjs): Re-patch router if it is overridden by Next.js (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15721" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15721/hovercard">#15721</a>)</li>
<li>fix(nuxt): Add Nitro Rollup plugin to inject Sentry server config (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15710" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15710/hovercard">#15710</a>)</li>
<li>chore(deps): Bump rollup to 4.35.0 (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15651" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15651/hovercard">#15651</a>)</li>
</ul>
<h2>Bundle size 📦</h2>
<table>
<thead>
<tr>
<th>Path</th>
<th>Size</th>
</tr>
</thead>
<tbody>
<tr>
<td>@ sentry/browser</td>
<td>23.15 KB</td>
</tr>
<tr>
<td>@ sentry/browser - with treeshaking flags</td>
<td>22.94 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing)</td>
<td>36.21 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay)</td>
<td>73.39 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay) - with treeshaking flags</td>
<td>66.81 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay with Canvas)</td>
<td>78.01 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay, Feedback)</td>
<td>90.57 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Feedback)</td>
<td>40.3 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. sendFeedback)</td>
<td>27.79 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. FeedbackAsync)</td>
<td>32.58 KB</td>
</tr>
<tr>
<td>@ sentry/react</td>
<td>24.97 KB</td>
</tr>
<tr>
<td>@ sentry/react (incl. Tracing)</td>
<td>38.1 KB</td>
</tr>
<tr>
<td>@ sentry/vue</td>
<td>27.4 KB</td>
</tr>
<tr>
<td>@ sentry/vue (incl. Tracing)</td>
<td>37.9 KB</td>
</tr>
<tr>
<td>@ sentry/svelte</td>
<td>23.18 KB</td>
</tr>
<tr>
<td>CDN Bundle</td>
<td>24.36 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing)</td>
<td>36.26 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay)</td>
<td>71.27 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback)</td>
<td>76.45 KB</td>
</tr>
<tr>
<td>CDN Bundle - uncompressed</td>
<td>71.19 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing) - uncompressed</td>
<td>107.57 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay) - uncompressed</td>
<td>218.83 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed</td>
<td>231.39 KB</td>
</tr>
<tr>
<td>@ sentry/nextjs (client)</td>
<td>39.38 KB</td>
</tr>
<tr>
<td>@ sentry/sveltekit (client)</td>
<td>36.63 KB</td>
</tr>
<tr>
<td>@ sentry/node</td>
<td>142.29 KB</td>
</tr>
<tr>
<td>@ sentry/node - without tracing</td>
<td>95.71 KB</td>
</tr>
<tr>
<td>@ sentry/aws-serverless</td>
<td>120.06 KB</td>
</tr>
</tbody>
</table>
</li>
<li>
<b>9.6.0</b> - <a href="https://redirect.github.com/getsentry/sentry-javascript/releases/tag/9.6.0">2025-03-17</a></br><h3>Important Changes</h3>
<ul>
<li>
<p><strong>feat(tanstackstart): Add <code>@ sentry/tanstackstart-react</code> package and make <code>@ sentry/tanstackstart</code> package a utility package (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15629" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15629/hovercard">#15629</a>)</strong></p>
<p>Since TanStack Start is supposed to be a generic framework that supports libraries like React and Solid, the <code>@ sentry/tanstackstart</code> SDK package was renamed to <code>@ sentry/tanstackstart-react</code> to reflect that the SDK is specifically intended to be used for React TanStack Start applications.<br>
Note that the TanStack Start SDK is still in alpha status and may be subject to breaking changes in non-major package updates.</p>
</li>
</ul>
<h3>Other Changes</h3>
<ul>
<li>feat(astro): Accept all vite-plugin options (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15638" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15638/hovercard">#15638</a>)</li>
<li>feat(deps): bump @ sentry/webpack-plugin from 3.2.1 to 3.2.2 (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15627" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15627/hovercard">#15627</a>)</li>
<li>feat(tanstackstart): Refine initial API (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15574" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15574/hovercard">#15574</a>)</li>
<li>fix(core): Ensure <code>fill</code> only patches functions (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15632" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15632/hovercard">#15632</a>)</li>
<li>fix(nextjs): Consider <code>pageExtensions</code> when looking for instrumentation file (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15701" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15701/hovercard">#15701</a>)</li>
<li>fix(remix): Null-check <code>options</code> (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15610" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15610/hovercard">#15610</a>)</li>
<li>fix(sveltekit): Correctly parse angle bracket type assertions for auto instrumentation (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15578" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15578/hovercard">#15578</a>)</li>
<li>fix(sveltekit): Guard process variable (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15605" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15605/hovercard">#15605</a>)</li>
</ul>
<p>Work in this release was contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/angelikatyborska/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/angelikatyborska">@ angelikatyborska</a> and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/nwalters512/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/nwalters512">@ nwalters512</a>. Thank you for your contributions!</p>
<h2>Bundle size 📦</h2>
<table>
<thead>
<tr>
<th>Path</th>
<th>Size</th>
</tr>
</thead>
<tbody>
<tr>
<td>@ sentry/browser</td>
<td>23.15 KB</td>
</tr>
<tr>
<td>@ sentry/browser - with treeshaking flags</td>
<td>22.94 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing)</td>
<td>36.21 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay)</td>
<td>73.39 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay) - with treeshaking flags</td>
<td>66.8 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay with Canvas)</td>
<td>78.01 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay, Feedback)</td>
<td>90.57 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Feedback)</td>
<td>40.3 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. sendFeedback)</td>
<td>27.79 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. FeedbackAsync)</td>
<td>32.58 KB</td>
</tr>
<tr>
<td>@ sentry/react</td>
<td>24.97 KB</td>
</tr>
<tr>
<td>@ sentry/react (incl. Tracing)</td>
<td>38.1 KB</td>
</tr>
<tr>
<td>@ sentry/vue</td>
<td>27.4 KB</td>
</tr>
<tr>
<td>@ sentry/vue (incl. Tracing)</td>
<td>37.9 KB</td>
</tr>
<tr>
<td>@ sentry/svelte</td>
<td>23.18 KB</td>
</tr>
<tr>
<td>CDN Bundle</td>
<td>24.36 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing)</td>
<td>36.26 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay)</td>
<td>71.27 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback)</td>
<td>76.45 KB</td>
</tr>
<tr>
<td>CDN Bundle - uncompressed</td>
<td>71.19 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing) - uncompressed</td>
<td>107.57 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay) - uncompressed</td>
<td>218.84 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed</td>
<td>231.4 KB</td>
</tr>
<tr>
<td>@ sentry/nextjs (client)</td>
<td>39.27 KB</td>
</tr>
<tr>
<td>@ sentry/sveltekit (client)</td>
<td>36.63 KB</td>
</tr>
<tr>
<td>@ sentry/node</td>
<td>142.15 KB</td>
</tr>
<tr>
<td>@ sentry/node - without tracing</td>
<td>95.58 KB</td>
</tr>
<tr>
<td>@ sentry/aws-serverless</td>
<td>119.92 KB</td>
</tr>
</tbody>
</table>
</li>
<li>
<b>9.6.0-alpha.0</b> - 2025-03-06
</li>
<li>
<b>9.5.0</b> - 2025-03-06
</li>
</ul>
from <a href="https://redirect.github.com/getsentry/sentry-javascript/releases">@sentry/browser GitHub release notes</a>
</details>
</details>
---
> [!IMPORTANT]
>
> - Check the changes in this PR to ensure they won't cause issues with your project.
> - This PR was automatically created by Snyk using the credentials of a real user.
---
**Note:** _You are seeing this because you or someone else with access to this repository has authorized Snyk to open upgrade PRs._
**For more information:** <img src="https://api.segment.io/v1/pixel/track?data=eyJ3cml0ZUtleSI6InJyWmxZcEdHY2RyTHZsb0lYd0dUcVg4WkFRTnNCOUEwIiwiYW5vbnltb3VzSWQiOiJhYjgwMDgxOS1lZTdkLTRiNzMtOGU2MS03ZWM1MWRlZDEwOWUiLCJldmVudCI6IlBSIHZpZXdlZCIsInByb3BlcnRpZXMiOnsicHJJZCI6ImFiODAwODE5LWVlN2QtNGI3My04ZTYxLTdlYzUxZGVkMTA5ZSJ9fQ==" width="0" height="0"/>
> - 🧐 [View latest project report](https://app.snyk.io/org/reisene/project/55e114f8-489e-4f14-b900-20574b041e59?utm_source&#x3D;github-cloud-app&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr)
> - 📜 [Customise PR templates](https://docs.snyk.io/scan-using-snyk/pull-requests/snyk-fix-pull-or-merge-requests/customize-pr-templates?utm_source=&utm_content=fix-pr-template)
> - 🛠 [Adjust upgrade PR settings](https://app.snyk.io/org/reisene/project/55e114f8-489e-4f14-b900-20574b041e59/settings/integration?utm_source&#x3D;github-cloud-app&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr)
> - 🔕 [Ignore this dependency or unsubscribe from future upgrade PRs](https://app.snyk.io/org/reisene/project/55e114f8-489e-4f14-b900-20574b041e59/settings/integration?pkg&#x3D;@sentry/browser&amp;utm_source&#x3D;github-cloud-app&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr#auto-dep-upgrades)
[//]: # 'snyk:metadata:{"customTemplate":{"variablesUsed":[],"fieldsUsed":[]},"dependencies":[{"name":"@sentry/browser","from":"9.5.0","to":"9.6.1"}],"env":"prod","hasFixes":false,"isBreakingChange":false,"isMajorUpgrade":false,"issuesToFix":[],"prId":"ab800819-ee7d-4b73-8e61-7ec51ded109e","prPublicId":"ab800819-ee7d-4b73-8e61-7ec51ded109e","packageManager":"npm","priorityScoreList":[],"projectPublicId":"55e114f8-489e-4f14-b900-20574b041e59","projectUrl":"https://app.snyk.io/org/reisene/project/55e114f8-489e-4f14-b900-20574b041e59?utm_source=github-cloud-app&utm_medium=referral&page=upgrade-pr","prType":"upgrade","templateFieldSources":{"branchName":"default","commitMessage":"default","description":"default","title":"default"},"templateVariants":[],"type":"auto","upgrade":[],"upgradeInfo":{"versionsDiff":3,"publishedDate":"2025-03-19T10:03:32.247Z"},"vulns":[]}'
## Podsumowanie od Sourcery
Ulepszenia:
- Aktualizacja pakietu Sentry dla przeglądarki do najnowszej wersji minor
<details>
<summary>Original summary in English</summary>
## Summary by Sourcery
Enhancements:
- Update Sentry browser package to the latest minor version
</details>
Sign up for freeto 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.

[@sentry-internal/browser-utils]: Cannot read properties of null (reading 'apply')

2 participants

@Lms24@andreiborza
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); fix(core): Ensure `fill` only patches functions by Lms24 · Pull Request #15632 · getsentry/sentry-javascript · GitHub
Skip to content

fix(core): Ensure fill only patches functions - #15632

Merged
Lms24 merged 3 commits into
developfrom
lms/fix-core-history-check
Mar 11, 2025
Merged

fix(core): Ensure fill only patches functions#15632
Lms24 merged 3 commits into
developfrom
lms/fix-core-history-check

Conversation

@Lms24

@Lms24Lms24 commented Mar 11, 2025

Copy link
Copy Markdown
Member

This PR adds a guard to our fill utility that we use to instrument/wrap methods defined on an object. However, due to a misleading type cast in fill we didn't check if the name of the method to be patched actually corresponded to a function on an object.

This was surfaced via #15552 where we'd call fill on window.history(pushState|replaceState) without checking if these two methods were actually available or functions.

Note: I initially solved this on the instrumentHistory level but then noticed that this is a more general bug in fill. Therefore I added some history-specific tests as well but I'd rather keep them than removing them. Fun fact: The more general fix saves ~8 Bytes of bundle size compared to my initial history-based fix 😅

closes#15552

@Lms24Lms24 self-assigned this Mar 11, 2025
*/
export function supportsHistory(): boolean {
return 'history' in WINDOW;
return 'history' in WINDOW && !!WINDOW.history;

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Improved this check so that if history was undefined or null we'd also return false here

@Lms24
Lms24 requested review from andreiborza and lforstMarch 11, 2025 15:02
@github-actions

github-actionsBot commented Mar 11, 2025

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser23.15 KB+0.05%+10 B 🔺
@sentry/browser - with treeshaking flags22.94 KB+0.06%+13 B 🔺
@sentry/browser (incl. Tracing)36.21 KB+0.03%+9 B 🔺
@sentry/browser (incl. Tracing, Replay)73.39 KB+0.02%+10 B 🔺
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags66.8 KB+0.02%+9 B 🔺
@sentry/browser (incl. Tracing, Replay with Canvas)78.01 KB+0.02%+10 B 🔺
@sentry/browser (incl. Tracing, Replay, Feedback)90.57 KB+0.02%+11 B 🔺
@sentry/browser (incl. Feedback)40.3 KB+0.03%+10 B 🔺
@sentry/browser (incl. sendFeedback)27.79 KB+0.04%+9 B 🔺
@sentry/browser (incl. FeedbackAsync)32.58 KB+0.03%+10 B 🔺
@sentry/react24.97 KB+0.04%+10 B 🔺
@sentry/react (incl. Tracing)38.1 KB+0.03%+10 B 🔺
@sentry/vue27.4 KB+0.05%+12 B 🔺
@sentry/vue (incl. Tracing)37.9 KB+0.03%+9 B 🔺
@sentry/svelte23.18 KB+0.05%+10 B 🔺
CDN Bundle24.36 KB+0.05%+12 B 🔺
CDN Bundle (incl. Tracing)36.26 KB+0.03%+11 B 🔺
CDN Bundle (incl. Tracing, Replay)71.27 KB+0.02%+12 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback)76.44 KB+0.02%+12 B 🔺
CDN Bundle - uncompressed71.19 KB+0.07%+49 B 🔺
CDN Bundle (incl. Tracing) - uncompressed107.57 KB+0.05%+49 B 🔺
CDN Bundle (incl. Tracing, Replay) - uncompressed218.84 KB+0.03%+49 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed231.4 KB+0.03%+49 B 🔺
@sentry/nextjs (client)39.27 KB+0.04%+13 B 🔺
@sentry/sveltekit (client)36.63 KB+0.03%+9 B 🔺
@sentry/node142.15 KB+0.01%+5 B 🔺
@sentry/node - without tracing95.58 KB+0.01%+4 B 🔺
@sentry/aws-serverless119.92 KB+0.01%+4 B 🔺

View base workflow run

@Lms24

Lms24 commented Mar 11, 2025

Copy link
Copy Markdown
MemberAuthor

I will rework this to more generally fix the wird behaviour in our fill patching utility.
EDIT: Done


expect(WINDOW.history).toEqual({
replaceState: expect.any(Function), // patched function
pushState: undefined, // unpatched

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

prior to this PR, pushState would have become a Function, resulting in the wrapper function calling undefined.apply on the "original function".

@Lms24Lms24 changed the title fix(browser): Only patch available window.history propertiesfix(core): Ensure fill only patches functionsMar 11, 2025
@Lms24
Lms24 marked this pull request as ready for review March 11, 2025 15:24

@andreiborzaandreiborza left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

nice, thanks for guarding this

@Lms24
Lms24 merged commit 47f95e5 into developMar 11, 2025
@Lms24
Lms24 deleted the lms/fix-core-history-check branch March 11, 2025 16:27
aviator-appBot added a commit to reisene/HulajDusza-serwis that referenced this pull request Apr 10, 2025
![snyk-io[bot]](https://badgen.net/badge/icon/snyk-io%5Bbot%5D/green?label=) ![Contributor](https://badgen.net/badge/icon/Contributor/000000?label=) [<img width="16" alt="Powered by Pull Request Badge" src="https://user-images.githubusercontent.com/1393946/111216524-d2bb8e00-85d4-11eb-821b-ed4c00989c02.png">](https://pullrequestbadge.com/?utm_medium=github&utm_source=reisene&utm_campaign=badge_info)<!-- PR-BADGE: PLEASE DO NOT REMOVE THIS COMMENT -->
![snyk-top-banner](https://res.cloudinary.com/snyk/image/upload/r-d/scm-platform/snyk-pull-requests/pr-banner-default.svg)
<h3>Snyk has created this PR to upgrade @sentry/browser from 9.5.0 to 9.6.1.</h3>
:information_source: Keep your dependencies up-to-date. This makes it easier to fix existing vulnerabilities and to more quickly identify and fix newly disclosed vulnerabilities when they affect your project.
<hr/>
- The recommended version is **3 versions** ahead of your current version.
- The recommended version was released **22 days ago**.
<details>
<summary><b>Release notes</b></summary>
<br/>
<details>
<summary>Package name: <b>@sentry/browser</b></summary>
<ul>
<li>
<b>9.6.1</b> - <a href="https://redirect.github.com/getsentry/sentry-javascript/releases/tag/9.6.1">2025-03-19</a></br><ul>
<li>feat(deps): bump @ prisma/instrumentation from 6.4.1 to 6.5.0 (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15714" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15714/hovercard">#15714</a>)</li>
<li>feat(deps): bump @ sentry/cli from 2.42.2 to 2.42.3 (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15711" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15711/hovercard">#15711</a>)</li>
<li>fix(nextjs): Re-patch router if it is overridden by Next.js (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15721" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15721/hovercard">#15721</a>)</li>
<li>fix(nuxt): Add Nitro Rollup plugin to inject Sentry server config (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15710" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15710/hovercard">#15710</a>)</li>
<li>chore(deps): Bump rollup to 4.35.0 (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15651" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15651/hovercard">#15651</a>)</li>
</ul>
<h2>Bundle size 📦</h2>
<table>
<thead>
<tr>
<th>Path</th>
<th>Size</th>
</tr>
</thead>
<tbody>
<tr>
<td>@ sentry/browser</td>
<td>23.15 KB</td>
</tr>
<tr>
<td>@ sentry/browser - with treeshaking flags</td>
<td>22.94 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing)</td>
<td>36.21 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay)</td>
<td>73.39 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay) - with treeshaking flags</td>
<td>66.81 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay with Canvas)</td>
<td>78.01 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay, Feedback)</td>
<td>90.57 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Feedback)</td>
<td>40.3 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. sendFeedback)</td>
<td>27.79 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. FeedbackAsync)</td>
<td>32.58 KB</td>
</tr>
<tr>
<td>@ sentry/react</td>
<td>24.97 KB</td>
</tr>
<tr>
<td>@ sentry/react (incl. Tracing)</td>
<td>38.1 KB</td>
</tr>
<tr>
<td>@ sentry/vue</td>
<td>27.4 KB</td>
</tr>
<tr>
<td>@ sentry/vue (incl. Tracing)</td>
<td>37.9 KB</td>
</tr>
<tr>
<td>@ sentry/svelte</td>
<td>23.18 KB</td>
</tr>
<tr>
<td>CDN Bundle</td>
<td>24.36 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing)</td>
<td>36.26 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay)</td>
<td>71.27 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback)</td>
<td>76.45 KB</td>
</tr>
<tr>
<td>CDN Bundle - uncompressed</td>
<td>71.19 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing) - uncompressed</td>
<td>107.57 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay) - uncompressed</td>
<td>218.83 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed</td>
<td>231.39 KB</td>
</tr>
<tr>
<td>@ sentry/nextjs (client)</td>
<td>39.38 KB</td>
</tr>
<tr>
<td>@ sentry/sveltekit (client)</td>
<td>36.63 KB</td>
</tr>
<tr>
<td>@ sentry/node</td>
<td>142.29 KB</td>
</tr>
<tr>
<td>@ sentry/node - without tracing</td>
<td>95.71 KB</td>
</tr>
<tr>
<td>@ sentry/aws-serverless</td>
<td>120.06 KB</td>
</tr>
</tbody>
</table>
</li>
<li>
<b>9.6.0</b> - <a href="https://redirect.github.com/getsentry/sentry-javascript/releases/tag/9.6.0">2025-03-17</a></br><h3>Important Changes</h3>
<ul>
<li>
<p><strong>feat(tanstackstart): Add <code>@ sentry/tanstackstart-react</code> package and make <code>@ sentry/tanstackstart</code> package a utility package (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15629" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15629/hovercard">#15629</a>)</strong></p>
<p>Since TanStack Start is supposed to be a generic framework that supports libraries like React and Solid, the <code>@ sentry/tanstackstart</code> SDK package was renamed to <code>@ sentry/tanstackstart-react</code> to reflect that the SDK is specifically intended to be used for React TanStack Start applications.<br>
Note that the TanStack Start SDK is still in alpha status and may be subject to breaking changes in non-major package updates.</p>
</li>
</ul>
<h3>Other Changes</h3>
<ul>
<li>feat(astro): Accept all vite-plugin options (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15638" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15638/hovercard">#15638</a>)</li>
<li>feat(deps): bump @ sentry/webpack-plugin from 3.2.1 to 3.2.2 (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15627" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15627/hovercard">#15627</a>)</li>
<li>feat(tanstackstart): Refine initial API (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15574" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15574/hovercard">#15574</a>)</li>
<li>fix(core): Ensure <code>fill</code> only patches functions (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15632" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15632/hovercard">#15632</a>)</li>
<li>fix(nextjs): Consider <code>pageExtensions</code> when looking for instrumentation file (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15701" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15701/hovercard">#15701</a>)</li>
<li>fix(remix): Null-check <code>options</code> (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15610" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15610/hovercard">#15610</a>)</li>
<li>fix(sveltekit): Correctly parse angle bracket type assertions for auto instrumentation (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15578" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15578/hovercard">#15578</a>)</li>
<li>fix(sveltekit): Guard process variable (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/15605" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/15605/hovercard">#15605</a>)</li>
</ul>
<p>Work in this release was contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/angelikatyborska/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/angelikatyborska">@ angelikatyborska</a> and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/nwalters512/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/nwalters512">@ nwalters512</a>. Thank you for your contributions!</p>
<h2>Bundle size 📦</h2>
<table>
<thead>
<tr>
<th>Path</th>
<th>Size</th>
</tr>
</thead>
<tbody>
<tr>
<td>@ sentry/browser</td>
<td>23.15 KB</td>
</tr>
<tr>
<td>@ sentry/browser - with treeshaking flags</td>
<td>22.94 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing)</td>
<td>36.21 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay)</td>
<td>73.39 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay) - with treeshaking flags</td>
<td>66.8 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay with Canvas)</td>
<td>78.01 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay, Feedback)</td>
<td>90.57 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Feedback)</td>
<td>40.3 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. sendFeedback)</td>
<td>27.79 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. FeedbackAsync)</td>
<td>32.58 KB</td>
</tr>
<tr>
<td>@ sentry/react</td>
<td>24.97 KB</td>
</tr>
<tr>
<td>@ sentry/react (incl. Tracing)</td>
<td>38.1 KB</td>
</tr>
<tr>
<td>@ sentry/vue</td>
<td>27.4 KB</td>
</tr>
<tr>
<td>@ sentry/vue (incl. Tracing)</td>
<td>37.9 KB</td>
</tr>
<tr>
<td>@ sentry/svelte</td>
<td>23.18 KB</td>
</tr>
<tr>
<td>CDN Bundle</td>
<td>24.36 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing)</td>
<td>36.26 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay)</td>
<td>71.27 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback)</td>
<td>76.45 KB</td>
</tr>
<tr>
<td>CDN Bundle - uncompressed</td>
<td>71.19 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing) - uncompressed</td>
<td>107.57 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay) - uncompressed</td>
<td>218.84 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed</td>
<td>231.4 KB</td>
</tr>
<tr>
<td>@ sentry/nextjs (client)</td>
<td>39.27 KB</td>
</tr>
<tr>
<td>@ sentry/sveltekit (client)</td>
<td>36.63 KB</td>
</tr>
<tr>
<td>@ sentry/node</td>
<td>142.15 KB</td>
</tr>
<tr>
<td>@ sentry/node - without tracing</td>
<td>95.58 KB</td>
</tr>
<tr>
<td>@ sentry/aws-serverless</td>
<td>119.92 KB</td>
</tr>
</tbody>
</table>
</li>
<li>
<b>9.6.0-alpha.0</b> - 2025-03-06
</li>
<li>
<b>9.5.0</b> - 2025-03-06
</li>
</ul>
from <a href="https://redirect.github.com/getsentry/sentry-javascript/releases">@sentry/browser GitHub release notes</a>
</details>
</details>
---
> [!IMPORTANT]
>
> - Check the changes in this PR to ensure they won't cause issues with your project.
> - This PR was automatically created by Snyk using the credentials of a real user.
---
**Note:** _You are seeing this because you or someone else with access to this repository has authorized Snyk to open upgrade PRs._
**For more information:** <img src="https://api.segment.io/v1/pixel/track?data=eyJ3cml0ZUtleSI6InJyWmxZcEdHY2RyTHZsb0lYd0dUcVg4WkFRTnNCOUEwIiwiYW5vbnltb3VzSWQiOiJhYjgwMDgxOS1lZTdkLTRiNzMtOGU2MS03ZWM1MWRlZDEwOWUiLCJldmVudCI6IlBSIHZpZXdlZCIsInByb3BlcnRpZXMiOnsicHJJZCI6ImFiODAwODE5LWVlN2QtNGI3My04ZTYxLTdlYzUxZGVkMTA5ZSJ9fQ==" width="0" height="0"/>
> - 🧐 [View latest project report](https://app.snyk.io/org/reisene/project/55e114f8-489e-4f14-b900-20574b041e59?utm_source&#x3D;github-cloud-app&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr)
> - 📜 [Customise PR templates](https://docs.snyk.io/scan-using-snyk/pull-requests/snyk-fix-pull-or-merge-requests/customize-pr-templates?utm_source=&utm_content=fix-pr-template)
> - 🛠 [Adjust upgrade PR settings](https://app.snyk.io/org/reisene/project/55e114f8-489e-4f14-b900-20574b041e59/settings/integration?utm_source&#x3D;github-cloud-app&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr)
> - 🔕 [Ignore this dependency or unsubscribe from future upgrade PRs](https://app.snyk.io/org/reisene/project/55e114f8-489e-4f14-b900-20574b041e59/settings/integration?pkg&#x3D;@sentry/browser&amp;utm_source&#x3D;github-cloud-app&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr#auto-dep-upgrades)
[//]: # 'snyk:metadata:{"customTemplate":{"variablesUsed":[],"fieldsUsed":[]},"dependencies":[{"name":"@sentry/browser","from":"9.5.0","to":"9.6.1"}],"env":"prod","hasFixes":false,"isBreakingChange":false,"isMajorUpgrade":false,"issuesToFix":[],"prId":"ab800819-ee7d-4b73-8e61-7ec51ded109e","prPublicId":"ab800819-ee7d-4b73-8e61-7ec51ded109e","packageManager":"npm","priorityScoreList":[],"projectPublicId":"55e114f8-489e-4f14-b900-20574b041e59","projectUrl":"https://app.snyk.io/org/reisene/project/55e114f8-489e-4f14-b900-20574b041e59?utm_source=github-cloud-app&utm_medium=referral&page=upgrade-pr","prType":"upgrade","templateFieldSources":{"branchName":"default","commitMessage":"default","description":"default","title":"default"},"templateVariants":[],"type":"auto","upgrade":[],"upgradeInfo":{"versionsDiff":3,"publishedDate":"2025-03-19T10:03:32.247Z"},"vulns":[]}'
## Podsumowanie od Sourcery
Ulepszenia:
- Aktualizacja pakietu Sentry dla przeglądarki do najnowszej wersji minor
<details>
<summary>Original summary in English</summary>
## Summary by Sourcery
Enhancements:
- Update Sentry browser package to the latest minor version
</details>
Sign up for freeto 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.

[@sentry-internal/browser-utils]: Cannot read properties of null (reading 'apply')

2 participants

@Lms24@andreiborza