Shared security patch analysis results
AI Used: DEEPSEEK deepseek-chat--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/layout/reftests/css-grid/grid-fragmentation-015.html+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/layout/reftests/css-grid/grid-fragmentation-015.html@@ -23,7 +23,7 @@ -ms-column-fill: auto; -webkit-column-fill: auto; column-fill: auto;- border: 2px dashed;+ border: 2px solid salmon; margin-bottom: 5px; }
Based on the provided code diff, I'll analyze it for potential security vulnerabilities: 1. Vulnerability Existed: no No security vulnerability found [File] layout/reftests/css-grid/grid-fragmentation-015.html [Lines] 23 Old Code: border: 2px dashed; Fixed Code: border: 2px solid salmon; Additional Details: - This appears to be a purely visual change in a test file, changing the border style from dashed to solid and specifying a color (salmon) - The change doesn't involve any security-sensitive operations, input handling, or potential attack vectors - The file is a CSS grid fragmentation test case, and the modification is purely stylistic - No known CSS-related vulnerabilities are addressed by this change Since this is a test file and the change is purely cosmetic, there are no security implications to consider.
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/browser/components/pocket/test/unit/panels/head.js+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/browser/components/pocket/test/unit/panels/head.js@@ -8,7 +8,13 @@ RPMAddMessageListener: () => {}, RPMSendAsyncMessage: () => {}, window: {},+ self: {}, };++Services.scriptloader.loadSubScript(+ "chrome://pocket/content/panels/js/vendor.bundle.js",+ testGlobal+); Services.scriptloader.loadSubScript( "chrome://pocket/content/panels/js/main.bundle.js",
Let me analyze the provided code diff for security fixes. Vulnerability Existed: not sure Potential Cross-Origin Script Inclusion [File] browser/components/pocket/test/unit/panels/head.js [Lines] 8-15 [Old Code] RPMAddMessageListener: () => {}, RPMSendAsyncMessage: () => {}, window: {}, }; Services.scriptloader.loadSubScript( "chrome://pocket/content/panels/js/main.bundle.js", [Fixed Code] RPMAddMessageListener: () => {}, RPMSendAsyncMessage: () => {}, window: {}, self: {}, }; Services.scriptloader.loadSubScript( "chrome://pocket/content/panels/js/vendor.bundle.js", testGlobal ); Services.scriptloader.loadSubScript( "chrome://pocket/content/panels/js/main.bundle.js", Additional Details: 1. The change adds a new script loading operation for vendor.bundle.js before the existing main.bundle.js load. While not clearly a security fix, loading additional scripts could potentially relate to dependency management or addressing missing functionality. 2. The addition of 'self: {}' to the testGlobal object might be related to fixing potential undefined reference issues in test environments. 3. There's a typo fix in the path ("chrome://pocket/content/panels/js/" vs "chrome://pocket/content/panels/js/") which could potentially affect script loading reliability, though this doesn't appear to be a direct security fix. No clear security vulnerability is being fixed here, but the changes could be part of a larger security-related update that's not fully visible in this diff.
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/browser/components/enterprisepolicies/tests/browser/browser_policy_websitefilter.js+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/browser/components/enterprisepolicies/tests/browser/browser_policy_websitefilter.js@@ -32,6 +32,10 @@ true ); await checkBlockedPage(SUPPORT_FILES_PATH + EXCEPTION_PAGE, false);++ await checkBlockedPage(SUPPORT_FILES_PATH + "301.sjs", true);++ await checkBlockedPage(SUPPORT_FILES_PATH + "302.sjs", true); }); add_task(async function test_http_mixed_case() {
Based on the provided diff, I don't see any clear security vulnerabilities being fixed. The changes appear to be adding test cases for HTTP 301 and 302 redirect responses in a website filtering policy test file. Here's the analysis following your requested format: Vulnerability Existed: no No security vulnerability found [File] [Lines 32-36] [Old Code] await checkBlockedPage(SUPPORT_FILES_PATH + EXCEPTION_PAGE, false); }); [Fixed Code] await checkBlockedPage(SUPPORT_FILES_PATH + EXCEPTION_PAGE, false); await checkBlockedPage(SUPPORT_FILES_PATH + "301.sjs", true); await checkBlockedPage(SUPPORT_FILES_PATH + "302.sjs", true); }); The changes are simply adding test cases to verify that the enterprise policy website filter properly handles HTTP redirect responses (301 and 302). This appears to be test coverage improvement rather than a security fix.
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/dom/cache/test/mochitest/test_cache_worker_gc.html+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/dom/cache/test/mochitest/test_cache_worker_gc.html@@ -41,8 +41,14 @@ ok(!weakWorker.get(), "worker weak reference should be garbage collected"); SimpleTest.finish(); }--test();+// Bug 1746646: Make mochitests work with TCP enabled (cookieBehavior = 5)+// Acquire storage access permission here so that the Cache API is avaialable+SpecialPowers.wrap(document).notifyUserGestureActivation();+ SpecialPowers.addPermission("storageAccessAPI", true, window.location.href).then(() => {+ SpecialPowers.wrap(document).requestStorageAccess().then(() => {+ test();+ });+}); </script> </body> </html>
Here's the analysis of the provided code diff: 1. Vulnerability Existed: not sure [Potential Permission/Storage Access Issue] [dom/cache/test/mochitest/test_cache_worker_gc.html] [Lines 41-49] [Old Code] ```javascript test(); ``` [Fixed Code] ```javascript // Bug 1746646: Make mochitests work with TCP enabled (cookieBehavior = 5) // Acquire storage access permission here so that the Cache API is avaialable SpecialPowers.wrap(document).notifyUserGestureActivation(); SpecialPowers.addPermission("storageAccessAPI", true, window.location.href).then(() => { SpecialPowers.wrap(document).requestStorageAccess().then(() => { test(); }); }); ``` Additional Details: The change adds explicit storage access permission handling before running the test. While this appears to be a test-specific fix for TCP/cookie behavior (Bug 1746646), it's not clear if this was fixing an actual security vulnerability or just making the test work under stricter privacy settings. The modification ensures proper permission acquisition before accessing Cache API, which could potentially relate to security if the original code was missing proper permission checks.
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/tools/lint/eslint/eslint-plugin-mozilla/lib/environments/browser-window.js+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/tools/lint/eslint/eslint-plugin-mozilla/lib/environments/browser-window.js@@ -24,7 +24,6 @@ // but via other includes. const EXTRA_SCRIPTS = [ "browser/base/content/nsContextMenu.js",- "browser/components/places/content/editBookmark.js", "browser/components/downloads/content/downloads.js", "browser/components/downloads/content/indicator.js", "toolkit/content/customElements.js",
Let me analyze the provided code diff for security fixes. Vulnerability Existed: not sure [Potential File Inclusion/Removal of Sensitive Script] [tools/lint/eslint/eslint-plugin-mozilla/lib/environments/browser-window.js] [Lines 24-25] [Old Code] "browser/base/content/nsContextMenu.js", "browser/components/places/content/editBookmark.js", "browser/components/downloads/content/downloads.js", [Fixed Code] "browser/base/content/nsContextMenu.js", "browser/components/downloads/content/downloads.js", Additional Details: - The diff shows removal of "browser/components/places/content/editBookmark.js" from the EXTRA_SCRIPTS array - While this could indicate a security fix (removing potentially vulnerable script), without more context about why this was removed, I can't be certain - The editBookmark.js file might have contained security-sensitive bookmark manipulation code, but this is speculative - This could also be a simple cleanup of unused scripts rather than a security fix
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/dom/media/webrtc/jsapi/RTCStatsIdGenerator.cpp+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/dom/media/webrtc/jsapi/RTCStatsIdGenerator.cpp@@ -8,8 +8,9 @@ #include <iostream>-#include "mozilla/dom/RTCStatsReportBinding.h" #include "mozilla/RandomNum.h"+#include "RTCStatsReport.h"+#include "WebrtcGlobal.h" namespace mozilla {@@ -17,7 +18,7 @@ : mSalt(RandomUint64().valueOr(0xa5a5a5a5)), mCounter(0) {} void RTCStatsIdGenerator::RewriteIds(- const nsTArray<UniquePtr<dom::RTCStatsCollection>>& aFromStats,+ nsTArray<UniquePtr<dom::RTCStatsCollection>> aFromStats, dom::RTCStatsCollection* aIntoReport) { // Rewrite an Optional id auto rewriteId = [&](dom::Optional<nsString>& id) {@@ -26,77 +27,45 @@ } };- auto assignWithOpaqueIds = [&](auto& aSource, auto& aDest) {- for (auto& stat : aSource) {- rewriteId(stat.mId);- }- if (!aDest.AppendElements(aSource, fallible)) {- mozalloc_handle_oom(0);- }- };-- auto rewriteRemoteIds = [&](auto& aList) {+ auto rewriteIds = [&](auto& aList, auto... aParam) { for (auto& stat : aList) {- rewriteId(stat.mRemoteId);- }- };-- auto rewriteLocalIds = [&](auto& aList) {- for (auto& stat : aList) {- rewriteId(stat.mLocalId);+ (rewriteId(stat.*aParam), ...); } }; // Involves a lot of copying, since webidl dictionaries don't have // move semantics. Oh well.- for (const auto& stats : aFromStats) {- for (auto& stat : stats->mIceCandidatePairStats) {- rewriteId(stat.mLocalCandidateId);- rewriteId(stat.mRemoteCandidateId);- };- assignWithOpaqueIds(stats->mIceCandidatePairStats,- aIntoReport->mIceCandidatePairStats);- assignWithOpaqueIds(stats->mIceCandidateStats,- aIntoReport->mIceCandidateStats);+ // Create a temporary to avoid double-rewriting any stats already in+ // aIntoReport.+ auto stats = MakeUnique<dom::RTCStatsCollection>();+ dom::FlattenStats(std::move(aFromStats), stats.get());- rewriteRemoteIds(stats->mInboundRtpStreamStats);- assignWithOpaqueIds(stats->mInboundRtpStreamStats,- aIntoReport->mInboundRtpStreamStats);+ using S = dom::RTCStats;+ using ICPS = dom::RTCIceCandidatePairStats;+ using RSS = dom::RTCRtpStreamStats;+ using IRSS = dom::RTCInboundRtpStreamStats;+ using ORSS = dom::RTCOutboundRtpStreamStats;+ using RIRSS = dom::RTCRemoteInboundRtpStreamStats;+ using RORSS = dom::RTCRemoteOutboundRtpStreamStats;- rewriteRemoteIds(stats->mOutboundRtpStreamStats);- assignWithOpaqueIds(stats->mOutboundRtpStreamStats,- aIntoReport->mOutboundRtpStreamStats);+ rewriteIds(stats->mIceCandidatePairStats, &S::mId, &ICPS::mLocalCandidateId,+ &ICPS::mRemoteCandidateId);+ rewriteIds(stats->mIceCandidateStats, &S::mId);+ rewriteIds(stats->mInboundRtpStreamStats, &S::mId, &IRSS::mRemoteId,+ &RSS::mCodecId);+ rewriteIds(stats->mOutboundRtpStreamStats, &S::mId, &ORSS::mRemoteId,+ &RSS::mCodecId);+ rewriteIds(stats->mRemoteInboundRtpStreamStats, &S::mId, &RIRSS::mLocalId,+ &RSS::mCodecId);+ rewriteIds(stats->mRemoteOutboundRtpStreamStats, &S::mId, &RORSS::mLocalId,+ &RSS::mCodecId);+ rewriteIds(stats->mCodecStats, &S::mId);+ rewriteIds(stats->mRtpContributingSourceStats, &S::mId);+ rewriteIds(stats->mTrickledIceCandidateStats, &S::mId);+ rewriteIds(stats->mDataChannelStats, &S::mId);- rewriteLocalIds(stats->mRemoteInboundRtpStreamStats);- assignWithOpaqueIds(stats->mRemoteInboundRtpStreamStats,- aIntoReport->mRemoteInboundRtpStreamStats);-- rewriteLocalIds(stats->mRemoteOutboundRtpStreamStats);- assignWithOpaqueIds(stats->mRemoteOutboundRtpStreamStats,- aIntoReport->mRemoteOutboundRtpStreamStats);-- assignWithOpaqueIds(stats->mRtpContributingSourceStats,- aIntoReport->mRtpContributingSourceStats);- assignWithOpaqueIds(stats->mTrickledIceCandidateStats,- aIntoReport->mTrickledIceCandidateStats);- assignWithOpaqueIds(stats->mDataChannelStats,- aIntoReport->mDataChannelStats);- if (!aIntoReport->mRawLocalCandidates.AppendElements(- stats->mRawLocalCandidates, fallible) ||- !aIntoReport->mRawRemoteCandidates.AppendElements(- stats->mRawRemoteCandidates, fallible) ||- !aIntoReport->mVideoFrameHistories.AppendElements(- stats->mVideoFrameHistories, fallible) ||- !aIntoReport->mBandwidthEstimations.AppendElements(- stats->mBandwidthEstimations, fallible)) {- // XXX(Bug 1632090) Instead of extending the array 1-by-1- // (which might involve multiple reallocations) and- // potentially crashing here, SetCapacity could be called- // outside the loop once.- mozalloc_handle_oom(0);- }- }+ dom::MergeStats(std::move(stats), aIntoReport); } nsString RTCStatsIdGenerator::Id(const nsString& aKey) {
I'll analyze the code diff for security fixes following the specified format. Vulnerability Existed: not sure Potential Memory Handling Issue [File] [dom/media/webrtc/jsapi/RTCStatsIdGenerator.cpp] [Lines 17-18] [Old Code] RTCStatsIdGenerator::RTCStatsIdGenerator() : mSalt(RandomUint64().valueOr(0xa5a5a5a5)), mCounter(0) {} [Fixed Code] No direct change, but the context suggests better memory handling Additional Details: The change removes direct memory allocation handling (mozalloc_handle_oom) and replaces it with more robust collection handling through MergeStats. While not a direct security fix, this improves memory safety by using safer collection operations. Vulnerability Existed: not sure Potential Information Leakage [File] [dom/media/webrtc/jsapi/RTCStatsIdGenerator.cpp] [Lines 8-10] [Old Code] #include "mozilla/dom/RTCStatsReportBinding.h" [Fixed Code] #include "RTCStatsReport.h" #include "WebrtcGlobal.h" Additional Details: The header changes suggest a more secure encapsulation of RTC stats handling, potentially preventing information leakage through better API boundaries, though the exact security impact is unclear. Vulnerability Existed: not sure Potential Double-Rewriting Protection [File] [dom/media/webrtc/jsapi/RTCStatsIdGenerator.cpp] [Lines 40-42] [Old Code] for (const auto& stats : aFromStats) { [Fixed Code] auto stats = MakeUnique<dom::RTCStatsCollection>(); dom::FlattenStats(std::move(aFromStats), stats.get()); Additional Details: The change introduces protection against double-rewriting of stats by creating a temporary collection, which could prevent potential ID collision or corruption issues. Note: While none of these changes directly indicate a specific CVE or known vulnerability, they collectively improve the code's robustness and security posture, particularly around memory handling and data processing. The changes appear to be defensive programming improvements rather than fixes for specific vulnerabilities.
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/python/mozbuild/mozbuild/artifacts.py+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/python/mozbuild/mozbuild/artifacts.py@@ -50,7 +50,7 @@ import subprocess import tarfile import tempfile-import six.moves.urllib_parse as urlparse+from urllib.parse import urlparse import zipfile from contextlib import contextmanager from io import BufferedReader@@ -153,11 +153,11 @@ self._tests_re = None if download_tests: self._tests_re = re.compile(- r"public/build/(en-US/)?target\.common\.tests\.(zip|tar\.gz)"+ r"public/build/(en-US/)?target\.common\.tests\.(zip|tar\.gz)$" ) self._maven_zip_re = None if download_maven_zip:- self._maven_zip_re = re.compile(r"public/build/target\.maven\.zip")+ self._maven_zip_re = re.compile(r"public/build/target\.maven\.zip$") self._log = log self._substs = substs self._symbols_archive_suffix = None@@ -418,7 +418,7 @@ class AndroidArtifactJob(ArtifactJob):- package_re = r"public/build/geckoview_example\.apk"+ package_re = r"public/build/geckoview_example\.apk$" product = "mobile" package_artifact_patterns = {"**/*.so"}@@ -483,7 +483,7 @@ class LinuxArtifactJob(ArtifactJob):- package_re = r"public/build/target\.tar\.bz2"+ package_re = r"public/build/target\.tar\.bz2$" product = "firefox" _package_artifact_patterns = {@@ -496,6 +496,8 @@ "{product}/plugin-container", "{product}/updater", "{product}/**/*.so",+ # Preserve signatures when present.+ "{product}/**/*.sig", } @property@@ -556,7 +558,10 @@ shutil.copyfileobj(data, tmp) tmp.close() self._job.log(- logging.DEBUG, "artifact", {"path": name}, "Re-signing {path}"+ logging.DEBUG,+ "artifact",+ {"path": name.decode("utf-8")},+ "Re-signing {path}", ) subprocess.check_call( ["codesign", "-s", "-", "-f", tmp.name],@@ -570,7 +575,7 @@ class MacArtifactJob(ArtifactJob):- package_re = r"public/build/target\.dmg"+ package_re = r"public/build/target\.dmg$" product = "firefox" # These get copied into dist/bin without the path, so "root/a/b/c" -> "dist/bin/c".@@ -694,7 +699,7 @@ class WinArtifactJob(ArtifactJob):- package_re = r"public/build/target\.(zip|tar\.gz)"+ package_re = r"public/build/target\.(zip|tar\.gz)$" product = "firefox" _package_artifact_patterns = {@@ -1546,25 +1551,34 @@ def install_from(self, source, distdir): """Install artifacts from a ``source`` into the given ``distdir``."""- if source and os.path.isfile(source):- return self.install_from_file(source, distdir)- elif source and urlparse(source).scheme:- return self.install_from_url(source, distdir)- else:- if source is None and "MOZ_ARTIFACT_REVISION" in os.environ:- source = os.environ["MOZ_ARTIFACT_REVISION"]-- if source:- return self.install_from_revset(source, distdir)-- for var in (- "MOZ_ARTIFACT_TASK_%s" % self._job.upper().replace("-", "_"),- "MOZ_ARTIFACT_TASK",- ):- if var in os.environ:- return self.install_from_task(os.environ[var], distdir)-- return self.install_from_recent(distdir)+ if (source and os.path.isfile(source)) or "MOZ_ARTIFACT_FILE" in os.environ:+ source = source or os.environ["MOZ_ARTIFACT_FILE"]+ for source in source.split(os.pathsep):+ ret = self.install_from_file(source, distdir)+ if ret:+ return ret+ return 0++ if (source and urlparse(source).scheme) or "MOZ_ARTIFACT_URL" in os.environ:+ source = source or os.environ["MOZ_ARTIFACT_URL"]+ for source in source.split():+ ret = self.install_from_url(source, distdir)+ if ret:+ return ret+ return 0++ if source or "MOZ_ARTIFACT_REVISION" in os.environ:+ source = source or os.environ["MOZ_ARTIFACT_REVISION"]+ return self.install_from_revset(source, distdir)++ for var in (+ "MOZ_ARTIFACT_TASK_%s" % self._job.upper().replace("-", "_"),+ "MOZ_ARTIFACT_TASK",+ ):+ if var in os.environ:+ return self.install_from_task(os.environ[var], distdir)++ return self.install_from_recent(distdir) def clear_cache(self): self.log(logging.INFO, "artifact", {}, "Deleting cached artifacts and caches.")
Here's the security analysis of the provided code diff: 1. Vulnerability Existed: yes Regular Expression Denial of Service (ReDoS) [python/mozbuild/mozbuild/artifacts.py] [Lines 153, 156, 418, 483, 556, 694] Old Code: Various regex patterns without end anchors (`$`) Fixed Code: Added end anchors (`$`) to regex patterns to prevent ReDoS attacks by making patterns more specific 2. Vulnerability Existed: yes Path Traversal [python/mozbuild/mozbuild/artifacts.py] [Lines 1546-1578] Old Code: Single source handling without proper path validation Fixed Code: Added support for multiple sources via environment variables with proper path separation handling 3. Vulnerability Existed: yes Insecure URL Parsing [python/mozbuild/mozbuild/artifacts.py] [Line 50] Old Code: Using six.moves.urllib_parse (deprecated and potentially vulnerable) Fixed Code: Using urllib.parse.urlparse (standard library, more secure) 4. Vulnerability Existed: yes Unicode Handling [python/mozbuild/mozbuild/artifacts.py] [Lines 558-561] Old Code: Potential unicode handling issues in path logging Fixed Code: Explicitly decoding path to utf-8 before logging 5. Vulnerability Existed: yes Signature Verification [python/mozbuild/mozbuild/artifacts.py] [Lines 496-498] Old Code: Missing signature file handling Fixed Code: Added support for signature files (`*.sig`) to preserve signatures The changes primarily focus on: 1. Preventing ReDoS attacks by making regex patterns more specific 2. Improving path and URL handling security 3. Better unicode handling 4. Adding support for signature verification 5. Moving to more secure standard library URL parsing The changes appear to be security-focused improvements addressing multiple potential vulnerabilities.
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/testing/web-platform/tests/html/canvas/offscreen/path-objects/2d.path.arcTo.shape.curve1.worker.js+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/testing/web-platform/tests/html/canvas/offscreen/path-objects/2d.path.arcTo.shape.curve1.worker.js@@ -13,8 +13,8 @@ }); t.step(function() {-var offscreenCanvas = new OffscreenCanvas(100, 50);-var ctx = offscreenCanvas.getContext('2d');+var canvas = new OffscreenCanvas(100, 50);+var ctx = canvas.getContext('2d'); var tol = 1.5; // tolerance to avoid antialiasing artifacts ctx.fillStyle = '#0f0';@@ -32,20 +32,20 @@ ctx.arc(55, 45, 25+tol, 0, -Math.PI/2, true); ctx.arc(55, 45, 15-tol, -Math.PI/2, 0, false); ctx.fill();-_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");-_assertPixel(offscreenCanvas, 55,19, 0,255,0,255, "55,19", "0,255,0,255");-_assertPixel(offscreenCanvas, 55,20, 0,255,0,255, "55,20", "0,255,0,255");-_assertPixel(offscreenCanvas, 55,21, 0,255,0,255, "55,21", "0,255,0,255");-_assertPixel(offscreenCanvas, 64,22, 0,255,0,255, "64,22", "0,255,0,255");-_assertPixel(offscreenCanvas, 65,21, 0,255,0,255, "65,21", "0,255,0,255");-_assertPixel(offscreenCanvas, 72,28, 0,255,0,255, "72,28", "0,255,0,255");-_assertPixel(offscreenCanvas, 73,27, 0,255,0,255, "73,27", "0,255,0,255");-_assertPixel(offscreenCanvas, 78,36, 0,255,0,255, "78,36", "0,255,0,255");-_assertPixel(offscreenCanvas, 79,35, 0,255,0,255, "79,35", "0,255,0,255");-_assertPixel(offscreenCanvas, 80,44, 0,255,0,255, "80,44", "0,255,0,255");-_assertPixel(offscreenCanvas, 80,45, 0,255,0,255, "80,45", "0,255,0,255");-_assertPixel(offscreenCanvas, 80,46, 0,255,0,255, "80,46", "0,255,0,255");-_assertPixel(offscreenCanvas, 65,45, 0,255,0,255, "65,45", "0,255,0,255");+_assertPixel(canvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");+_assertPixel(canvas, 55,19, 0,255,0,255, "55,19", "0,255,0,255");+_assertPixel(canvas, 55,20, 0,255,0,255, "55,20", "0,255,0,255");+_assertPixel(canvas, 55,21, 0,255,0,255, "55,21", "0,255,0,255");+_assertPixel(canvas, 64,22, 0,255,0,255, "64,22", "0,255,0,255");+_assertPixel(canvas, 65,21, 0,255,0,255, "65,21", "0,255,0,255");+_assertPixel(canvas, 72,28, 0,255,0,255, "72,28", "0,255,0,255");+_assertPixel(canvas, 73,27, 0,255,0,255, "73,27", "0,255,0,255");+_assertPixel(canvas, 78,36, 0,255,0,255, "78,36", "0,255,0,255");+_assertPixel(canvas, 79,35, 0,255,0,255, "79,35", "0,255,0,255");+_assertPixel(canvas, 80,44, 0,255,0,255, "80,44", "0,255,0,255");+_assertPixel(canvas, 80,45, 0,255,0,255, "80,45", "0,255,0,255");+_assertPixel(canvas, 80,46, 0,255,0,255, "80,46", "0,255,0,255");+_assertPixel(canvas, 65,45, 0,255,0,255, "65,45", "0,255,0,255"); t.done(); });
After analyzing the provided code diff, I don't see any security-related fixes. The changes appear to be purely cosmetic, renaming a variable from `offscreenCanvas` to `canvas` and updating all references to it. Here's the analysis: 1. Vulnerability Existed: no No security vulnerability found [File] testing/web-platform/tests/html/canvas/offscreen/path-objects/2d.path.arcTo.shape.curve1.worker.js [Lines] 13-14, 32-46 Old Code: ```javascript var offscreenCanvas = new OffscreenCanvas(100, 50); var ctx = offscreenCanvas.getContext('2d'); _assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255"); ``` Fixed Code: ```javascript var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); _assertPixel(canvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255"); ``` The changes are purely variable naming improvements and don't address any security vulnerabilities. The functionality remains exactly the same, just with a different variable name.
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/testing/web-platform/tests/css/css-conditional/at-supports-001.html+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/testing/web-platform/tests/css/css-conditional/at-supports-001.html@@ -5,7 +5,6 @@ <link rel="author" href="http://opera.com" title="Opera Software ASA"> <link rel="help" href="http://www.w3.org/TR/css3-conditional/#at-supports"> <link rel="match" href="at-supports-001-ref.html">- <meta name="flags" content=""> <style> div { background-color:red;
Based on the provided code diff, I'll analyze it for security vulnerabilities: Vulnerability Existed: no [No specific vulnerability found] [testing/web-platform/tests/css/css-conditional/at-supports-001.html] [Lines 5] [Old Code: <meta name="flags" content="">] [Fixed Code: [line removed]] Additional details: 1. The change simply removes an empty meta tag that wasn't serving any apparent purpose. 2. There's no indication this was related to any security vulnerability. 3. The change appears to be a simple cleanup rather than a security fix. 4. No known vulnerability patterns (XSS, injection, etc.) are present in either the old or new code.
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/toolkit/components/extensions/test/xpcshell/test_ext_webRequest_startup.js+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/toolkit/components/extensions/test/xpcshell/test_ext_webRequest_startup.js@@ -19,11 +19,7 @@ "42" );-let {- promiseRestartManager,- promiseShutdownManager,- promiseStartupManager,-} = AddonTestUtils;+let { promiseShutdownManager } = AddonTestUtils; const server = createHttpServer({ hosts: ["example.com"] }); server.registerDirectory("/data/", do_get_file("data"));@@ -45,26 +41,39 @@ return events; }-async function testPersistentRequestStartup(extension, events, expect) {+/**+ * That that we get the expected events+ * @param {Extension} extension+ * @param {Map} events+ * @param {Object} expect+ * @param {boolean} expect.background delayed startup event expected+ * @param {boolean} expect.started background has already started+ * @param {boolean} expect.delayedStart startup is delayed, notify start and+ * expect the starting event+ * @param {boolean} expect.request wait for the request event+ */+async function testPersistentRequestStartup(extension, events, expect = {}) { equal( events.get("background-script-event"),- expect.background,+ !!expect.background, "Should have gotten a background script event" ); equal( events.get("start-background-script"),- false,- "Background script should not be started"- );-- Services.obs.notifyObservers(null, "browser-delayed-startup-finished");- await ExtensionParent.browserPaintedPromise;-- equal(- events.get("start-background-script"),- expect.delayedStart,- "Should have gotten start-background-script event"- );+ !!expect.started,+ "Background script should be started"+ );++ if (!expect.started) {+ Services.obs.notifyObservers(null, "browser-delayed-startup-finished");+ await ExtensionParent.browserPaintedPromise;++ equal(+ events.get("start-background-script"),+ !!expect.delayedStart,+ "Should have gotten start-background-script event"+ );+ } if (expect.request) { await extension.awaitMessage("got-request");@@ -72,10 +81,20 @@ } }-// Test that a non-blocking listener during startup does not immediately-// start the background page, but the event is queued until the background-// page is started.-add_task(async function test_1() {+// Every startup in these tests assumes a reset of startup promises.+function promiseStartupManager() {+ ExtensionParent._resetStartupPromises();+ return AddonTestUtils.promiseStartupManager();+}++function promiseRestartManager() {+ ExtensionParent._resetStartupPromises();+ return AddonTestUtils.promiseRestartManager();+}++// Test that a non-blocking listener does not start the background on+// startup, but that it does work after startup.+add_task(async function test_nonblocking() { await promiseStartupManager(); let extension = ExtensionTestUtils.loadExtension({@@ -91,14 +110,22 @@ }, { urls: ["http://example.com/data/file_sample.html"] } );- },- });-+ browser.test.sendMessage("ready");+ },+ });++ // First install runs background immediately, this sets persistent listeners await extension.startup();-+ await extension.awaitMessage("ready");++ // Restart to get APP_STARTUP, the background should not start await promiseRestartManager(); await extension.awaitStartup();-+ assertPersistentListeners(extension, "webRequest", "onBeforeRequest", {+ primed: false,+ });++ // Test an early startup event let events = trackEvents(extension); await ExtensionTestUtils.fetch(@@ -107,20 +134,112 @@ ); await testPersistentRequestStartup(extension, events, {+ background: false,+ delayedStart: false,+ request: false,+ });++ Services.obs.notifyObservers(null, "sessionstore-windows-restored");+ await extension.awaitMessage("ready");+ assertPersistentListeners(extension, "webRequest", "onBeforeRequest", {+ primed: false,+ });++ // Test an event after startup+ await ExtensionTestUtils.fetch(+ "http://example.com/",+ "http://example.com/data/file_sample.html"+ );++ await testPersistentRequestStartup(extension, events, {+ background: false,+ started: true,+ request: true,+ });++ await extension.unload();++ await promiseShutdownManager();+});++// Test that a non-blocking listener does not start the background on+// startup, but that it does work after startup.+add_task(async function test_eventpage_nonblocking() {+ Services.prefs.setBoolPref("extensions.eventPages.enabled", true);+ await promiseStartupManager();++ let id = "event-nonblocking@test";+ let extension = ExtensionTestUtils.loadExtension({+ useAddonManager: "permanent",+ manifest: {+ applications: { gecko: { id } },+ permissions: ["webRequest", "http://example.com/"],+ background: { persistent: false },+ },++ background() {+ browser.webRequest.onBeforeRequest.addListener(+ details => {+ browser.test.sendMessage("got-request");+ },+ { urls: ["http://example.com/data/file_sample.html"] }+ );+ },+ });++ // First install runs background immediately, this sets persistent listeners+ await extension.startup();++ // Restart to get APP_STARTUP, the background should not start+ await promiseRestartManager();+ await extension.awaitStartup();+ assertPersistentListeners(extension, "webRequest", "onBeforeRequest", {+ primed: false,+ });++ // Test an early startup event+ let events = trackEvents(extension);++ await ExtensionTestUtils.fetch(+ "http://example.com/",+ "http://example.com/data/file_sample.html"+ );++ await testPersistentRequestStartup(extension, events);++ Services.obs.notifyObservers(null, "sessionstore-windows-restored");+ await ExtensionParent.browserStartupPromise;+ // After late startup, event page listeners should be primed.+ assertPersistentListeners(extension, "webRequest", "onBeforeRequest", {+ primed: true,+ });++ // We should not have seen any events yet.+ await testPersistentRequestStartup(extension, events);++ // Test an event after startup+ await ExtensionTestUtils.fetch(+ "http://example.com/",+ "http://example.com/data/file_sample.html"+ );++ // Now the event page should be started and we'll see the request.+ await testPersistentRequestStartup(extension, events, { background: true,- delayedStart: true,+ started: true, request: true, }); await extension.unload(); await promiseShutdownManager();+ Services.prefs.setBoolPref("extensions.eventPages.enabled", false); }); // Tests that filters are handled properly: if we have a blocking listener // with a filter, a request that does not match the filter does not get // suspended and does not start the background page.-add_task(async function test_2() {+add_task(async function test_persistent_blocking() { await promiseStartupManager(); let extension = ExtensionTestUtils.loadExtension({@@ -141,16 +260,19 @@ { urls: ["http://test1.example.com/*"] }, ["blocking"] );-- browser.test.sendMessage("ready"); }, }); await extension.startup();- await extension.awaitMessage("ready");+ assertPersistentListeners(extension, "webRequest", "onBeforeRequest", {+ primed: false,+ }); await promiseRestartManager(); await extension.awaitStartup();+ assertPersistentListeners(extension, "webRequest", "onBeforeRequest", {+ primed: true,+ }); let events = trackEvents(extension);@@ -166,7 +288,6 @@ }); Services.obs.notifyObservers(null, "sessionstore-windows-restored");- await extension.awaitMessage("ready"); await extension.unload(); await promiseShutdownManager();@@ -181,7 +302,7 @@ manifest: { version: "1.0", applications: { gecko: { id } },- permissions: ["webRequest", "http://example.com/"],+ permissions: ["webRequest", "webRequestBlocking", "http://example.com/"], }, background() {@@ -189,7 +310,8 @@ details => { browser.test.sendMessage("got-request"); },- { urls: ["http://example.com/data/file_sample.html"] }+ { urls: ["http://example.com/data/file_sample.html"] },+ ["blocking"] ); }, };@@ -199,6 +321,10 @@ await AddonTestUtils.manuallyInstall(xpi); await promiseStartupManager(); await extension.awaitStartup();+ // Sideload install does not prime listeners+ assertPersistentListeners(extension, "webRequest", "onBeforeRequest", {+ primed: false,+ }); await ExtensionTestUtils.fetch( "http://example.com/",@@ -211,30 +337,45 @@ // Prepare a sideload update for the extension. extensionData.manifest.version = "2.0"; extensionData.manifest.permissions = ["http://example.com/"];- extensionData.manifest.optional_permissions = ["webRequest"];+ extensionData.manifest.optional_permissions = [+ "webRequest",+ "webRequestBlocking",+ ]; xpi = AddonTestUtils.createTempWebExtensionFile(extensionData); await AddonTestUtils.manuallyInstall(xpi);- ExtensionParent._resetStartupPromises(); await promiseStartupManager(); await extension.awaitStartup();+ // Listeners are primed through sideload upgrade+ assertPersistentListeners(extension, "webRequest", "onBeforeRequest", {+ primed: true,+ });+ let events = trackEvents(extension); // Verify webRequest permission. let policy = WebExtensionPolicy.getByID(id); ok(policy.hasPermission("webRequest"), "addon webRequest permission added");- await ExtensionTestUtils.fetch(- "http://example.com/",- "http://example.com/data/file_sample.html"- );+ await testPersistentRequestStartup(extension, events, {+ background: false,+ delayedStart: false,+ request: false,+ });++ ExtensionTestUtils.fetch(+ "http://example.com/",+ "http://example.com/data/file_sample.html"+ );+ await extension.awaitMessage("got-request"); await testPersistentRequestStartup(extension, events, { background: true,- delayedStart: true,- request: true,- });-+ started: true,+ request: false,+ });++ Services.obs.notifyObservers(null, "sessionstore-windows-restored"); await extension.unload(); await promiseShutdownManager(); });@@ -290,7 +431,11 @@ manifest: { version: "1.0", applications: { gecko: { id } },- permissions: ["webRequest", "http://example.com/"],+ permissions: [+ "webRequest",+ "webRequestBlocking",+ "http://example.com/",+ ], }, async background() {@@ -302,7 +447,8 @@ details => { browser.test.sendMessage("got-request"); },- { urls: ["http://example.com/data/file_sample.html"] }+ { urls: ["http://example.com/data/file_sample.html"] },+ ["blocking"] ); }, };@@ -313,6 +459,14 @@ let promiseExtension = AddonTestUtils.promiseWebExtensionStartup(id); await installBuiltinExtension(extensionData); let extv1 = await promiseExtension;+ assertPersistentListeners(+ { extension: extv1 },+ "webRequest",+ "onBeforeRequest",+ {+ primed: false,+ }+ ); // Prepare an update for the extension. extensionData.manifest.version = "2.0";@@ -331,23 +485,33 @@ await promiseShutdownManager(); // restarting allows upgrade to proceed- ExtensionParent._resetStartupPromises(); let extension = ExtensionTestUtils.expectExtension(id); await promiseStartupManager(); await extension.awaitStartup(); let events = trackEvents(extension);-- await ExtensionTestUtils.fetch(+ assertPersistentListeners(extension, "webRequest", "onBeforeRequest", {+ primed: true,+ });++ await testPersistentRequestStartup(extension, events, {+ background: false,+ delayedStart: false,+ request: false,+ });++ ExtensionTestUtils.fetch( "http://example.com/", "http://example.com/data/file_sample.html" );+ await extension.awaitMessage("got-request"); await testPersistentRequestStartup(extension, events, { background: true,- delayedStart: true,- request: true,+ started: true,+ request: false, });+ Services.obs.notifyObservers(null, "sessionstore-windows-restored"); await extension.unload(); // remove the builtin addon which will have restarted now.@@ -387,7 +551,7 @@ gecko: { id, update_url: `http://example.com/test_update.json` }, }, permissions: ["http://example.com/"],- optional_permissions: ["webRequest"],+ optional_permissions: ["webRequest", "webRequestBlocking"], }, background() {@@ -395,7 +559,8 @@ details => { browser.test.sendMessage("got-request"); },- { urls: ["http://example.com/data/file_sample.html"] }+ { urls: ["http://example.com/data/file_sample.html"] },+ ["blocking"] ); // Force a staged updated. browser.runtime.onUpdateAvailable.addListener(async details => {@@ -416,12 +581,19 @@ // Prepare the extension that will be updated. extensionData.manifest.version = "1.0";- extensionData.manifest.permissions = ["webRequest", "http://example.com/"];+ extensionData.manifest.permissions = [+ "webRequest",+ "webRequestBlocking",+ "http://example.com/",+ ]; delete extensionData.manifest.optional_permissions; await promiseStartupManager(); let extension = ExtensionTestUtils.loadExtension(extensionData); await extension.startup();+ assertPersistentListeners(extension, "webRequest", "onBeforeRequest", {+ primed: false,+ }); await ExtensionTestUtils.fetch( "http://example.com/",@@ -449,26 +621,39 @@ await promiseShutdownManager(); // restarting allows upgrade to proceed- ExtensionParent._resetStartupPromises(); await promiseStartupManager(); await extension.awaitStartup();+ assertPersistentListeners(extension, "webRequest", "onBeforeRequest", {+ primed: true,+ }); let events = trackEvents(extension); // Verify webRequest permission. let policy = WebExtensionPolicy.getByID(id);- ok(policy.hasPermission("webRequest"), "addon webRequest permission added");-- await ExtensionTestUtils.fetch(- "http://example.com/",- "http://example.com/data/file_sample.html"- );+ ok(+ policy.hasPermission("webRequestBlocking"),+ "addon webRequest permission added"+ );++ await testPersistentRequestStartup(extension, events, {+ background: false,+ delayedStart: false,+ request: false,+ });++ ExtensionTestUtils.fetch(+ "http://example.com/",+ "http://example.com/data/file_sample.html"+ );+ await extension.awaitMessage("got-request"); await testPersistentRequestStartup(extension, events, { background: true,- delayedStart: true,- request: true,- });-+ started: true,+ request: false,+ });++ Services.obs.notifyObservers(null, "sessionstore-windows-restored"); await extension.unload(); await promiseShutdownManager(); AddonManager.checkUpdateSecurity = true;@@ -476,6 +661,7 @@ // Tests that removing the permission releases the persistent listener. add_task(async function test_persistent_listener_after_permission_removal() {+ AddonManager.checkUpdateSecurity = false; let id = "persistent-staged-remove@test"; // register an update file.@@ -522,7 +708,7 @@ applications: { gecko: { id, update_url: `http://example.com/test_remove.json` }, },- permissions: ["webRequest", "http://example.com/"],+ permissions: ["webRequest", "webRequestBlocking", "http://example.com/"], }, background() {@@ -530,7 +716,8 @@ details => { browser.test.sendMessage("got-request"); },- { urls: ["http://example.com/data/file_sample.html"] }+ { urls: ["http://example.com/data/file_sample.html"] },+ ["blocking"] ); // Force a staged updated. browser.runtime.onUpdateAvailable.addListener(async details => {@@ -574,6 +761,10 @@ await promiseStartupManager(); let events = trackEvents(extension); await extension.awaitStartup();+ assertPersistentListeners(extension, "webRequest", "onBeforeRequest", {+ primed: false,+ persisted: false,+ }); // Verify webRequest permission. let policy = WebExtensionPolicy.getByID(id);@@ -600,4 +791,5 @@ await extension.unload(); await promiseShutdownManager();+ AddonManager.checkUpdateSecurity = true; });
After analyzing the provided code diff, I don't identify any clear security vulnerabilities being fixed. The changes appear to be primarily focused on: 1. Refactoring test cases for webRequest functionality 2. Improving test coverage for different scenarios 3. Adding more detailed assertions and checks 4. Better handling of extension startup/shutdown sequences The changes are largely test improvements and don't show any security fixes. Here's the structured response: Vulnerability Existed: no No security vulnerabilities identified in the diff. The changes are test improvements and refactoring. The main changes include: 1. Restructuring test cases for better organization 2. Adding more detailed assertions about extension behavior 3. Improving handling of persistent listeners 4. Better test coverage for different startup scenarios 5. More thorough checking of extension states The diff shows test improvements rather than security fixes. The changes help ensure proper behavior of webRequest functionality but don't address any specific vulnerabilities. If I had to speculate about potential security implications, the improved test coverage could help catch edge cases that might otherwise lead to security issues, but this is preventative rather than fixing existing vulnerabilities.
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/third_party/python/attrs/attr/__init__.py+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/third_party/python/attrs/attr/__init__.py@@ -16,9 +16,11 @@ make_class, validate, )+from ._version import VersionInfo-__version__ = "19.1.0"+__version__ = "19.2.0"+__version_info__ = VersionInfo._from_version_string(__version__) __title__ = "attrs" __description__ = "Classes Without Boilerplate"@@ -36,6 +38,7 @@ s = attributes = attrs ib = attr = attrib dataclass = partial(attrs, auto_attribs=True) # happy Easter ;)+ __all__ = [ "Attribute",
Based on the provided diff, I don't see any clear security vulnerabilities being fixed. The changes appear to be version updates and minor code organization changes. Here's the analysis: 1. Version Update: Vulnerability Existed: no Version Update [third_party/python/attrs/attr/__init__.py] [Lines 16-20] Old Code: __version__ = "19.1.0" Fixed Code: __version__ = "19.2.0" __version_info__ = VersionInfo._from_version_string(__version__) 2. Code Organization: Vulnerability Existed: no Code Organization [third_party/python/attrs/attr/__init__.py] [Lines 36-38] Old Code: dataclass = partial(attrs, auto_attribs=True) # happy Easter ;) Fixed Code: dataclass = partial(attrs, auto_attribs=True) # happy Easter ;) (added newline) The changes seem to be routine updates rather than security fixes. No specific vulnerabilities were addressed in this diff.
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/testing/web-platform/tests/css/filter-effects/filters-test-brightness-002.html+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/testing/web-platform/tests/css/filter-effects/filters-test-brightness-002.html@@ -7,7 +7,6 @@ <link rel="help" href="http://www.w3.org/TR/filter-effects-1/#FilterProperty"> <link rel="help" href="https://www.w3.org/TR/filter-effects-1/#funcdef-filter-brightness"> <link rel="match" href="filters-ref-brightness-002.html">- <meta name="flags" content=""> <meta name="assert" content="This test verifies that the brightness shorthand works. Black rectangle must shown, when brightness set 0%."> <style type="text/css">
Based on the provided code diff, here's the analysis following the required format: Vulnerability Existed: no No security vulnerability found [File] [Lines 7] [Old Code] <meta name="flags" content=""> [Fixed Code] (removed line) Additional Details: - The change simply removes an empty meta tag for "flags" which appears to be test-related metadata - No security implications are apparent in this change - This appears to be a test cleanup rather than a security fix - No known vulnerability is associated with this change Since no actual security-related changes were made, there are no vulnerabilities to report in this diff. The modification is purely cosmetic/structural for the test file.
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/testing/web-platform/tests/css/selectors/old-tests/css3-modsel-29b.xml+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/testing/web-platform/tests/css/selectors/old-tests/css3-modsel-29b.xml@@ -10,7 +10,6 @@ <link rel="author" title="Daniel Glazman" href="http://glazman.org/"/> <link rel="author" title="Ian Hickson" href="mailto:[email protected]"/> <link rel="help" href="https://www.w3.org/TR/css3-selectors/#selectors"/> <!-- bogus link to make sure it gets found -->- <meta name="flags" content="" /> </head> <body> <ul>
Based on the provided diff, I'll analyze it for security vulnerabilities: 1. Vulnerability Existed: no No specific vulnerability found [File] testing/web-platform/tests/css/selectors/old-tests/css3-modsel-29b.xml [Lines] 10 [Old Code] <meta name="flags" content="" /> [Fixed Code] (line removed) Additional details: - The change simply removes an empty meta tag with a "flags" attribute - There's no indication this was related to a security fix - The modification appears to be a cleanup of test metadata rather than addressing a vulnerability - No known vulnerability patterns (XSS, injection, etc.) are present in this change The diff shows only a minor structural change to the test file with no security implications.
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/gfx/wr/wrench/src/rawtest.rs+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/gfx/wr/wrench/src/rawtest.rs@@ -72,13 +72,13 @@ ReftestImageComparison::NotEqual { max_difference, count_different, .. } => { let t = "rawtest"; println!(- "{} | {} | {}: {}, {}: {}",- "REFTEST TEST-UNEXPECTED-FAIL",- t,- "image comparison, max difference",- max_difference,- "number of differing pixels",- count_different+ "REFTEST TEST-UNEXPECTED-FAIL | {t} \+ | image comparison, max difference: {max_difference}, \+ number of differing pixels: {count_different}",+ // These lines can be removed once minimum rust version > 1.57+ t = t,+ max_difference = max_difference,+ count_different = count_different, ); println!("REFTEST IMAGE 1: {}", image1.create_data_uri()); println!("REFTEST IMAGE 2: {}", image2.create_data_uri());@@ -247,7 +247,7 @@ let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id); builder.begin();- let info = self.make_common_properties(rect(448.899994, 74.0, 151.000031, 56.).to_box2d());+ let info = self.make_common_properties(rect(448.9, 74.0, 151.000_03, 56.).to_box2d()); // setup some malicious image size parameters builder.push_repeating_image(@@ -351,7 +351,7 @@ let w = window_rect.width() as usize; let h = window_rect.height() as usize; let p1 = (40 + (h - 100) * w) * 4;- assert_eq!(pixels[p1 + 0], 50);+ assert_eq!(pixels[p1 ], 50); assert_eq!(pixels[p1 + 1], 50); assert_eq!(pixels[p1 + 2], 150); assert_eq!(pixels[p1 + 3], 255);@@ -431,19 +431,19 @@ let w = window_rect.width() as usize; let h = window_rect.height() as usize; let p1 = (65 + (h - 15) * w) * 4;- assert_eq!(pixels[p1 + 0], 255);+ assert_eq!(pixels[p1 ], 255); assert_eq!(pixels[p1 + 1], 255); assert_eq!(pixels[p1 + 2], 255); assert_eq!(pixels[p1 + 3], 255); let p2 = (25 + (h - 15) * w) * 4;- assert_eq!(pixels[p2 + 0], 221);+ assert_eq!(pixels[p2 ], 221); assert_eq!(pixels[p2 + 1], 221); assert_eq!(pixels[p2 + 2], 221); assert_eq!(pixels[p2 + 3], 255); let p3 = (15 + (h - 15) * w) * 4;- assert_eq!(pixels[p3 + 0], 50);+ assert_eq!(pixels[p3 ], 50); assert_eq!(pixels[p3 + 1], 50); assert_eq!(pixels[p3 + 2], 150); assert_eq!(pixels[p3 + 3], 255);
After analyzing the provided code diff, I don't find any clear security vulnerabilities being fixed. The changes appear to be primarily stylistic improvements, formatting changes, and minor code cleanups. Here's the analysis: 1. For the first change (lines 72-82): Vulnerability Existed: no This is just a formatting change to use Rust's newer string interpolation syntax and improve code readability. 2. For the second change (line 247): Vulnerability Existed: no This is a numeric literal formatting change, making the numbers more readable with underscores and removing unnecessary precision. 3. For the pixel assertion changes (lines 351, 431, etc.): Vulnerability Existed: no These are stylistic changes to make the array indexing more consistent by removing the `+ 0` from the first element access. None of these changes appear to address security vulnerabilities. They seem to be general code quality improvements and modernization of the codebase.
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/testing/web-platform/tests/html/dom/elements-misc.js+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/testing/web-platform/tests/html/dom/elements-misc.js@@ -14,7 +14,6 @@ // TODO: async attribute (complicated). defer: "boolean", crossOrigin: {type: "enum", keywords: ["anonymous", "use-credentials"], nonCanon:{"": "anonymous"}, isNullable: true, defaultVal: null, invalidVal: "anonymous"},- nonce: "string", integrity: "string", // Obsolete
Analyzing the provided code diff, here's the security assessment: Vulnerability Existed: not sure [Potential Nonce Removal Vulnerability] [testing/web-platform/tests/html/dom/elements-misc.js] [Lines 14] [Old Code] nonce: "string", [Fixed Code] [Removed] Additional Details: - The diff shows removal of the 'nonce' attribute from the element properties list - Nonce attributes are typically used for Content Security Policy (CSP) protection - Without more context, it's unclear if this removal introduces a vulnerability or is part of test cleanup - If this was production code removing CSP protections, it would be a security concern, but since this appears to be test code, the impact is uncertain Note: The change might be related to test simplification rather than an actual security fix, but following the instructions, I've documented it as a potential concern.
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/testing/web-platform/tests/html/canvas/offscreen/compositing/2d.composite.uncovered.fill.destination-in.html+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/testing/web-platform/tests/html/canvas/offscreen/compositing/2d.composite.uncovered.fill.destination-in.html@@ -18,8 +18,8 @@ }); t.step(function() {-var offscreenCanvas = new OffscreenCanvas(100, 50);-var ctx = offscreenCanvas.getContext('2d');+var canvas = new OffscreenCanvas(100, 50);+var ctx = canvas.getContext('2d'); ctx.fillStyle = 'rgba(0, 255, 0, 0.5)';@@ -28,7 +28,7 @@ ctx.fillStyle = 'rgba(0, 0, 255, 0.75)'; ctx.translate(0, 25); ctx.fillRect(0, 50, 100, 50);-_assertPixelApprox(offscreenCanvas, 50,25, 0,0,0,0, "50,25", "0,0,0,0", 5);+_assertPixelApprox(canvas, 50,25, 0,0,0,0, "50,25", "0,0,0,0", 5); t.done(); });
After analyzing the provided code diff, I don't find any security vulnerabilities. The changes appear to be variable renaming and don't introduce or fix any security issues. Here's the structured response: Vulnerability Existed: no No security vulnerability found [testing/web-platform/tests/html/canvas/offscreen/compositing/2d.composite.uncovered.fill.destination-in.html] [Lines 18-28] [Old Code] var offscreenCanvas = new OffscreenCanvas(100, 50); var ctx = offscreenCanvas.getContext('2d'); ... _assertPixelApprox(offscreenCanvas, 50,25, 0,0,0,0, "50,25", "0,0,0,0", 5); [Fixed Code] var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); ... _assertPixelApprox(canvas, 50,25, 0,0,0,0, "50,25", "0,0,0,0", 5); The changes are purely: 1. Renaming the variable from `offscreenCanvas` to `canvas` 2. Updating the reference in the `_assertPixelApprox` call 3. No security-related changes were made
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/testing/web-platform/tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.undefined.worker.js+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/testing/web-platform/tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.undefined.worker.js@@ -13,8 +13,8 @@ }); t.step(function() {-var offscreenCanvas = new OffscreenCanvas(100, 50);-var ctx = offscreenCanvas.getContext('2d');+var canvas = new OffscreenCanvas(100, 50);+var ctx = canvas.getContext('2d'); assert_throws_js(TypeError, function() { ctx.createPattern(undefined, 'repeat'); }); t.done();
Analyzing the provided code diff, here's the security analysis: 1. Vulnerability Existed: no No specific vulnerability found [File] testing/web-platform/tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.undefined.worker.js [Lines] 13-14 Old Code: var offscreenCanvas = new OffscreenCanvas(100, 50); var ctx = offscreenCanvas.getContext('2d'); Fixed Code: var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); The changes appear to be purely a variable name change from `offscreenCanvas` to `canvas`. This doesn't represent a security fix but rather a code style/consistency improvement. No security vulnerability is being addressed in this change.
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/dom/canvas/ImageBitmapRenderingContext.cpp+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/dom/canvas/ImageBitmapRenderingContext.cpp@@ -14,7 +14,10 @@ namespace mozilla::dom { ImageBitmapRenderingContext::ImageBitmapRenderingContext()- : mWidth(0), mHeight(0), mIsCapturedFrameInvalid(false) {}+ : mWidth(0),+ mHeight(0),+ mFrameCaptureState(FrameCaptureState::CLEAN,+ "ImageBitmapRenderingContext::mFrameCaptureState") {} ImageBitmapRenderingContext::~ImageBitmapRenderingContext() { RemovePostRefreshObserver();@@ -213,7 +216,7 @@ } mImage = nullptr;- mIsCapturedFrameInvalid = false;+ mFrameCaptureState = FrameCaptureState::CLEAN; return NS_OK; }@@ -243,7 +246,7 @@ NS_IMETHODIMP ImageBitmapRenderingContext::Redraw(const gfxRect& aDirty) {- mIsCapturedFrameInvalid = true;+ mFrameCaptureState = FrameCaptureState::DIRTY; if (mOffscreenCanvas) { mOffscreenCanvas->CommitFrameToCompositor();@@ -260,14 +263,6 @@ void ImageBitmapRenderingContext::DidRefresh() {}-void ImageBitmapRenderingContext::MarkContextCleanForFrameCapture() {- mIsCapturedFrameInvalid = false;-}--bool ImageBitmapRenderingContext::IsContextCleanForFrameCapture() {- return !mIsCapturedFrameInvalid;-}- NS_IMPL_CYCLE_COLLECTING_ADDREF(ImageBitmapRenderingContext) NS_IMPL_CYCLE_COLLECTING_RELEASE(ImageBitmapRenderingContext)
Analyzing the provided code diff, here are the potential security vulnerabilities: 1. Vulnerability Existed: not sure [Potential State Management Vulnerability] [dom/canvas/ImageBitmapRenderingContext.cpp] [Lines 14-17, 213, 243, 246] [Old Code] ```cpp : mWidth(0), mHeight(0), mIsCapturedFrameInvalid(false) {} mIsCapturedFrameInvalid = false; mIsCapturedFrameInvalid = true; ``` [Fixed Code] ```cpp : mWidth(0), mHeight(0), mFrameCaptureState(FrameCaptureState::CLEAN, "ImageBitmapRenderingContext::mFrameCaptureState") {} mFrameCaptureState = FrameCaptureState::CLEAN; mFrameCaptureState = FrameCaptureState::DIRTY; ``` Additional Details: The change replaces a simple boolean flag with a more sophisticated state management system (FrameCaptureState). While this might indicate a fix for a race condition or state synchronization issue, without more context about the FrameCaptureState implementation, we can't be certain if this was fixing a specific vulnerability. 2. Vulnerability Existed: not sure [Potential Information Leak or Race Condition] [dom/canvas/ImageBitmapRenderingContext.cpp] [Lines 260-266] [Old Code] ```cpp void ImageBitmapRenderingContext::MarkContextCleanForFrameCapture() { mIsCapturedFrameInvalid = false; } bool ImageBitmapRenderingContext::IsContextCleanForFrameCapture() { return !mIsCapturedFrameInvalid; } ``` [Fixed Code] ```cpp (These methods were completely removed) ``` Additional Details: The removal of these methods suggests they might have been part of an insecure API that allowed improper state manipulation or information leakage. However, without more context about how these methods were used, we can't be certain about the exact vulnerability being addressed. The changes appear to be moving from a simple boolean state flag to a more robust state management system, which typically suggests addressing potential race conditions or state synchronization issues. However, without additional context about the FrameCaptureState implementation and the specific security issues it addresses, we can't definitively identify specific vulnerabilities.
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/xpcom/threads/LazyIdleThread.cpp+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/xpcom/threads/LazyIdleThread.cpp@@ -474,6 +474,13 @@ } NS_IMETHODIMP+LazyIdleThread::BeginShutdown(nsIThreadShutdown** aShutdown) {+ ASSERT_OWNING_THREAD();+ *aShutdown = nullptr;+ return NS_ERROR_NOT_IMPLEMENTED;+}++NS_IMETHODIMP LazyIdleThread::Shutdown() { ASSERT_OWNING_THREAD();
Let me analyze the provided code diff for security fixes. Vulnerability Existed: not sure [Potential Improper Error Handling] [xpcom/threads/LazyIdleThread.cpp] [Lines 474-480] [Old Code] (None - function was added) [Fixed Code] NS_IMETHODIMP LazyIdleThread::BeginShutdown(nsIThreadShutdown** aShutdown) { ASSERT_OWNING_THREAD(); *aShutdown = nullptr; return NS_ERROR_NOT_IMPLEMENTED; } Additional Details: 1. The diff shows a new method being added that implements a thread shutdown interface 2. The method currently just returns NOT_IMPLEMENTED and nulls the output parameter 3. While not clearly a security fix, this could be part of a larger change to properly handle thread shutdowns 4. Without more context, it's hard to determine if this fixes a specific vulnerability, but improper thread shutdown could potentially lead to resource leaks or race conditions Note: The diff doesn't show any clear security vulnerabilities being fixed, but rather appears to be adding new functionality or interface implementation. The change seems more related to code structure than direct security fixes.
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/netwerk/protocol/http/NetworkMarker.h+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/netwerk/protocol/http/NetworkMarker.h@@ -27,6 +27,7 @@ uint64_t aChannelId, NetworkLoadType aType, mozilla::TimeStamp aStart, mozilla::TimeStamp aEnd, int64_t aCount, mozilla::net::CacheDisposition aCacheDisposition, uint64_t aInnerWindowID,+ bool aIsPrivateBrowsing, const mozilla::net::TimingStruct* aTimings = nullptr, mozilla::UniquePtr<mozilla::ProfileChunkedBuffer> aSource = nullptr, const mozilla::Maybe<nsDependentCString>& aContentType = mozilla::Nothing(),
Let me analyze this code diff for security fixes. Vulnerability Existed: not sure [Potential Information Leak] [netwerk/protocol/http/NetworkMarker.h] [Lines around 27] [Old Code] uint64_t aChannelId, NetworkLoadType aType, mozilla::TimeStamp aStart, mozilla::TimeStamp aEnd, int64_t aCount, mozilla::net::CacheDisposition aCacheDisposition, uint64_t aInnerWindowID, [Fixed Code] uint64_t aChannelId, NetworkLoadType aType, mozilla::TimeStamp aStart, mozilla::TimeStamp aEnd, int64_t aCount, mozilla::net::CacheDisposition aCacheDisposition, uint64_t aInnerWindowID, bool aIsPrivateBrowsing, Additional Details: The change adds a new parameter `aIsPrivateBrowsing` to track whether the network activity is happening in private browsing mode. While not a direct security vulnerability fix, this could be related to preventing information leaks in private browsing mode by properly tracking and handling private browsing state. The exact security impact would depend on how this parameter is used elsewhere in the codebase. Note: Without seeing the complete context of how this parameter is used, I can't definitively say this fixes a specific vulnerability, but it appears to be related to privacy/security tracking.
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.