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/testing/web-platform/tests/html/canvas/offscreen/path-objects/2d.path.roundrect.zero.3.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.roundrect.zero.3.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'); ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50);@@ -23,7 +23,7 @@ ctx.beginPath(); ctx.roundRect(50, 25, 0, 0, [0]); ctx.stroke();-_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");+_assertPixel(canvas, 50,25, 0,255,0,255, "50,25", "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/refactoring changes where a variable name was changed from `offscreenCanvas` to `canvas` for consistency. Here's the analysis following your requested format: Vulnerability Existed: no No security vulnerability found [File] [Lines 13-14, 23] [Old Code] 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] 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 renaming with no impact on security functionality. No actual security vulnerabilities were identified 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/js/src/wasm/WasmBaselineCompile.cpp+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/js/src/wasm/WasmBaselineCompile.cpp@@ -3523,7 +3523,9 @@ // Be conservative for BCE due to complex control flow in try blocks. controlItem().bceSafeOnExit = 0; // Mark the beginning of the try block, the rest is filled in by catch.- controlItem().tryNoteIndex = masm.wasmStartTry();+ if (!masm.wasmStartTry(&controlItem().tryNoteIndex)) {+ return false;+ } } return true;@@ -5207,6 +5209,9 @@ break; case MIRType::Int64: t = ValType::I64;+ break;+ case MIRType::Float32:+ t = ValType::F32; break; case MIRType::RefOrNull: t = RefType::extern_();
Here's the analysis of the provided code diff for security fixes: 1. First vulnerability analysis: Vulnerability Existed: not sure Potential Error Handling Vulnerability [js/src/wasm/WasmBaselineCompile.cpp] [Lines 3523-3527] [Old Code] controlItem().tryNoteIndex = masm.wasmStartTry(); [Fixed Code] if (!masm.wasmStartTry(&controlItem().tryNoteIndex)) { return false; } Additional Details: The change adds error handling for the wasmStartTry operation. While this improves robustness, it's unclear if this was fixing a specific security vulnerability or just general error handling improvement. 2. Second vulnerability analysis: Vulnerability Existed: no Type Safety Improvement [js/src/wasm/WasmBaselineCompile.cpp] [Lines 5207-5212] [Old Code] case MIRType::Int64: t = ValType::I64; [Fixed Code] case MIRType::Int64: t = ValType::I64; break; case MIRType::Float32: t = ValType::F32; break; Additional Details: This change adds support for Float32 type handling. It appears to be a feature addition rather than a security fix, improving type safety but not addressing a known vulnerability.
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/compositing/mix-blend-mode/mix-blend-mode-video-sibling.html+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/testing/web-platform/tests/css/compositing/mix-blend-mode/mix-blend-mode-video-sibling.html@@ -8,7 +8,6 @@ <link rel="reviewer" title="Mihai Balan" href="mailto:[email protected]"> <link rel="help" href="https://drafts.fxtf.org/compositing-1/#mix-blend-mode"> <meta name="assert" content="Test checks that a video element blends with an overlapping sibling element with some text inside">- <meta name="flags" content=""/> <link rel="mismatch" href="reference/mix-blend-mode-video-sibling-notref.html"> <style type="text/css"> div {
Based on the provided code diff, I'll analyze it for potential security vulnerabilities: Vulnerability Existed: no [No specific vulnerability found] [testing/web-platform/tests/css/compositing/mix-blend-mode/mix-blend-mode-video-sibling.html] [Lines 8] [Old Code: `<meta name="flags" content=""/>`] [Fixed Code: (line removed)] Additional Details: 1. The change simply removes an empty meta tag for "flags" which appears to be test configuration metadata 2. There's no indication this was related to any security vulnerability 3. The removal doesn't appear to fix any security issue, but rather cleans up unnecessary test markup 4. No known vulnerability patterns (XSS, injection, etc.) are present in this change The modification seems to be a minor cleanup of test code rather than a security fix. The empty flags meta tag wasn't serving any purpose and its removal doesn't impact security.
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/fetch/FetchStreamUtils.cpp+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/dom/fetch/FetchStreamUtils.cpp@@ -46,7 +46,7 @@ MOZ_ASSERT(XRE_IsParentProcess()); ParentToParentStream stream;- MOZ_ALWAYS_SUCCEEDS(nsContentUtils::GenerateUUIDInPlace(stream.uuid()));+ stream.uuid() = nsID::GenerateUUID(); GetRemoteLazyInputStreamStorage()->AddStream(aStream.get(), stream.uuid(), aStreamSize, 0); return stream;
Let me analyze the code diff for security fixes: 1. Vulnerability Existed: yes UUID Generation Vulnerability [dom/fetch/FetchStreamUtils.cpp] [Line 46] [Old Code] MOZ_ALWAYS_SUCCEEDS(nsContentUtils::GenerateUUIDInPlace(stream.uuid())); [Fixed Code] stream.uuid() = nsID::GenerateUUID(); Additional Details: The vulnerability appears to be related to UUID generation. The old code used nsContentUtils::GenerateUUIDInPlace() which could potentially fail silently due to the MOZ_ALWAYS_SUCCEEDS macro (which suppresses error checking). The fixed code uses nsID::GenerateUUID() which is a more direct and reliable way to generate UUIDs. This change prevents potential issues with UUID generation that could lead to security problems in stream handling. While there isn't a specific CVE name for this, it's a security-relevant fix as improper UUID generation could lead to stream handling 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/rust/darling/CHANGELOG.md+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/third_party/rust/darling/CHANGELOG.md@@ -1,31 +1,88 @@ # Changelog+## v0.13.1 (December 7, 2021)++- Add `FromAttributes` trait and macro [#151](https://github.com/TedDriggs/darling/issues/151)++## v0.13.0 (May 20, 2021)++- Update darling to 2018 edition [#129](https://github.com/TedDriggs/darling/pull/129)+- Error on duplicate fields in `#[darling(...)]` attributes [#130](https://github.com/TedDriggs/darling/pull/130)+- Impl `Copy` for `SpannedValue<T: Copy>`+- Add `SpannedValue::map_ref`++## v0.13.0-beta (April 20, 2021)++- Update darling to 2018 edition [#129](https://github.com/TedDriggs/darling/pull/129)+- Error on duplicate fields in `#[darling(...)]` attributes [#130](https://github.com/TedDriggs/darling/pull/130)++## v0.12.4 (April 20, 2021)++- Add `and_then` to derive macros for `darling`++## v0.12.3 (April 8, 2021)++- Fix `FromMeta` impl for `char` not to panic [#126](https://github.com/TedDriggs/darling/pull/126)++## v0.12.2 (February 23, 2021)++- Impl `FromMeta` for `HashMap<Ident, V>` and `HashMap<Path, V>`++## v0.12.1 (February 22, 2021)++- Impl `FromMeta` for `syn::ExprArray` [#122](https://github.com/TedDriggs/darling/pull/122)+- Remove use of `unreachable` from `darling::ast::Data` [#123](https://github.com/TedDriggs/darling/pull/123)+- Add `darling::ast::Data::try_empty_from` to avoid panics when trying to read a union body [#123](https://github.com/TedDriggs/darling/pull/123)++## v0.12.0 (January 5, 2021)++- POSSIBLY BREAKING: Derived impls of `FromDeriveInput`, `FromField`, `FromVariant`, and `FromTypeParam` will now error when encountering an attribute `darling` has been asked to parse that isn't a supported shape.+ Any crates using `darling` that relied on those attributes being silently ignored could see new errors reported in their dependent crates. [#113](https://github.com/TedDriggs/darling/pull/113)+- Impl `syn::spanned::Spanned` for `darling::util::SpannedValue` [#113](https://github.com/TedDriggs/darling/pull/113)+- Add `darling::util::parse_attribute_to_meta_list` to provide useful errors during attribute parsing [#113](https://github.com/TedDriggs/darling/pull/113)+- Add `impl From<syn::Error> for Error` to losslessly propagate `syn` errors [#116](https://github.com/TedDriggs/darling/pull/116)++## v0.11.0 (December 14, 2020)++- Bump minor version due to unexpected breaking change [#107](https://github.com/TedDriggs/darling/issues/107)++## v0.10.3 (December 10, 2020)++- Add `discriminant` magic field when deriving `FromVariant` [#105](https://github.com/TedDriggs/darling/pull/105)+ ## v0.10.2 (October 30, 2019)+ - Bump syn dependency to 1.0.1 [#83](https://github.com/TedDriggs/darling/pull/83) ## v0.10.1 (September 25, 2019)+ - Fix test compilation errors [#81](https://github.com/TedDriggs/darling/pull/81) ## v0.10.0 (August 15, 2019)+ - Bump syn and quote to 1.0 [#79](https://github.com/TedDriggs/darling/pull/79) - Increase rust version to 1.31 ## v0.9.0 (March 20, 2019)+ - Enable "did you mean" suggestions by default - Make `darling_core::{codegen, options}` private [#58](https://github.com/TedDriggs/darling/issues/58) - Fix `Override::as_mut`: [#66](https://github.com/TedDriggs/darling/issues/66) ## v0.8.6 (March 18, 2019)+ - Added "did you mean" suggestions for unknown fields behind the `suggestions` flag [#60](https://github.com/TedDriggs/issues/60) - Added `Error::unknown_field_with_alts` to support the suggestion use-case. - Added `ast::Fields::len` and `ast::Fields::is_empty` methods. ## v0.8.5 (February 4, 2019)+ - Accept unquoted positive numeric literals [#52](https://github.com/TedDriggs/issues/52) - Add `FromMeta` to the `syn::Lit` enum and its variants - Improve error message for unexpected literal formats to not say "other" ## v0.8.4 (February 4, 2019)+ - Use `syn::Error` to provide precise errors before `proc_macro::Diagnostic` is available - Add `diagnostics` feature flag to toggle between stable and unstable error backends - Attach error information in more contexts@@ -33,40 +90,49 @@ - Proc-macro authors will now see better errors in `darling` attributes ## v0.8.3 (January 21, 2019)+ - Attach spans to errors in generated trait impls [#37](https://github.com/darling/issues/37) - Attach spans to errors for types with provided bespoke implementations - Deprecate `set_span` from 0.8.2, as spans should never be broadened after being initially set ## v0.8.2 (January 17, 2019)+ - Add spans to errors to make quality warnings and errors easy in darling. This is blocked on diagnostics stabilizing. - Add `darling::util::SpannedValue` so proc-macro authors can remember position information alongside parsed values. ## v0.8.0+ - Update dependency on `syn` to 0.15 [#44](https://github.com/darling/pull/44). Thanks to @hcpl ## v0.7.0 (July 24, 2018)+ - Update dependencies on `syn` and `proc-macro2` - Add `util::IdentString`, which acts as an Ident or its string equivalent ## v0.6.3 (May 22, 2018)+ - Add support for `Uses*` traits in where predicates ## v0.6.2 (May 22, 2018)+ - Add `usage` module for tracking type param and lifetime usage in generic declarations - Add `UsesTypeParams` and `CollectsTypeParams` traits [#37](https://github.com/darling/issues/37) - Add `UsesLifetimes` and `CollectLifetimes` traits [#41](https://github.com/darling/pull/41) - Don't add `FromMeta` bounds to type parameters only used by skipped fields [#40](https://github.com/darling/pull/40) ## v0.6.1 (May 17, 2018)+ - Fix an issue where the `syn` update broke shape validation [#36](https://github.com/TedDriggs/darling/issues/36) ## v0.6.0 (May 15, 2018) ### Breaking Changes+ - Renamed `FromMetaItem` to `FromMeta`, and renamed `from_meta_item` method to `from_meta` - Added dedicated `derive(FromMetaItem)` which panics and redirects users to `FromMeta` ## v0.5.0 (May 10, 2018)+ - Add `ast::Generics` and `ast::GenericParam` to work with generics in a manner similar to `ast::Data` - Add `ast::GenericParamExt` to support alternate representations of generic parameters - Add `util::WithOriginal` to get a parsed representation and syn's own struct for a syntax block@@ -75,20 +141,25 @@ - Add `FromTypeParam` trait [#30](https://github.com/TedDriggs/darling/pull/30). Thanks to @upsuper ## v0.4.0 (April 5, 2018)+ - Update dependencies on `proc-macro`, `quote`, and `syn` [#26](https://github.com/TedDriggs/darling/pull/26). Thanks to @hcpl ## v0.3.3 (April 2, 2018)+ **YANKED** ## v0.3.2 (March 13, 2018)+ - Derive `Default` on `darling::Ignored` (fixes [#25](https://github.com/TedDriggs/darling/issues/25)). ## v0.3.1 (March 7, 2018)+ - Support proc-macro2/nightly [#24](https://github.com/TedDriggs/darling/pull/24). Thanks to @kdy1 ## v0.3.0 (January 26, 2018) ### Breaking Changes+ - Update `syn` to 0.12 [#20](https://github.com/TedDriggs/darling/pull/20). Thanks to @Eijebong - Update `quote` to 0.4 [#20](https://github.com/TedDriggs/darling/pull/20). Thanks to @Eijebong - Rename magic field `body` in derived `FromDeriveInput` structs to `data` to stay in sync with `syn`
After analyzing the provided diff, which is a changelog file showing version history and changes, I don't find any direct security fixes or vulnerabilities being addressed. The changes appear to be routine updates, feature additions, and bug fixes without explicit security implications. Here's the structured response: Vulnerability Existed: no No security vulnerabilities found [third_party/rust/darling/CHANGELOG.md] [All lines] [Entire changelog content] [Updated changelog content] Additional notes: 1. The diff shows version updates and feature additions, but no security-related patches 2. Some bug fixes are mentioned (like panic fixes), but these don't appear to be security-related 3. The changelog format doesn't provide enough context to identify security issues even if they existed 4. No CVE references or security advisories are mentioned in the changelog entries
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/js/001.html+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/testing/web-platform/tests/css/css-conditional/js/001.html@@ -3,7 +3,6 @@ <link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> <link rel="author" href="http://opera.com" title="Opera Software ASA"> <link rel="help" href="http://www.w3.org/TR/css3-conditional/#at-supports">-<meta name="flags" content=""> <script src=/resources/testharness.js></script> <script src=/resources/testharnessreport.js></script> <style>
Based on the provided diff, I'll analyze it for security vulnerabilities: 1. Vulnerability Existed: no No specific vulnerability found [File] [Lines 3-3] [Old Code] <meta name="flags" content=""> [Fixed Code] (line removed) Additional Details: - The diff shows removal of an empty meta tag with "flags" attribute - This appears to be test configuration cleanup rather than a security fix - No known vulnerability is associated with this change - The change is likely related to test infrastructure rather than security No security vulnerabilities were identified in this diff. The change appears to be a benign removal of an unused or unnecessary meta tag in a 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/mobile/android/geckoview/src/main/java/org/mozilla/gecko/gfx/GeckoSurface.java+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/mobile/android/geckoview/src/main/java/org/mozilla/gecko/gfx/GeckoSurface.java@@ -20,6 +20,7 @@ private boolean mIsSingleBuffer; private volatile boolean mIsAvailable; private boolean mOwned = true;+ private volatile boolean mIsReleased = false; private int mMyPid; // Locally allocated surface/texture. Do not pass it over IPC.@@ -83,6 +84,11 @@ @Override public void release() {+ if (mIsReleased) {+ return;+ }+ mIsReleased = true;+ if (mSyncSurface != null) { mSyncSurface.release(); final GeckoSurfaceTexture gst = GeckoSurfaceTexture.lookup(mSyncSurface.getHandle());@@ -105,6 +111,11 @@ @WrapForJNI public boolean getAvailable() { return mIsAvailable;+ }++ @WrapForJNI+ public boolean isReleased() {+ return mIsReleased; } @WrapForJNI
Analyzing the provided code diff for security fixes: 1. Vulnerability Existed: yes Double Release Vulnerability [File] [Lines 83-105] [Old Code] @Override public void release() { if (mSyncSurface != null) { mSyncSurface.release(); final GeckoSurfaceTexture gst = GeckoSurfaceTexture.lookup(mSyncSurface.getHandle()); } if (mSurface != null) { mSurface.release(); } mOwned = false; } [Fixed Code] @Override public void release() { if (mIsReleased) { return; } mIsReleased = true; if (mSyncSurface != null) { mSyncSurface.release(); final GeckoSurfaceTexture gst = GeckoSurfaceTexture.lookup(mSyncSurface.getHandle()); } if (mSurface != null) { mSurface.release(); } mOwned = false; } Additional Details: - The fix adds a check for mIsReleased to prevent double release of resources, which could lead to crashes or undefined behavior. - A new volatile boolean mIsReleased field is added to track the release state. - The isReleased() method is added to expose this state to JNI. 2. Vulnerability Existed: not sure Potential Race Condition [File] [Lines 20,83-105] [Old Code] private boolean mOwned = true; [Fixed Code] private volatile boolean mIsReleased = false; // ... (other changes as above) Additional Details: - The addition of volatile to mIsReleased suggests there might have been concerns about thread safety. - Without more context about how this class is used, we can't be certain if this was fixing an actual race condition vulnerability or just being defensive.
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/fetch/private-network-access/fetch.window.js+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/testing/web-platform/tests/fetch/private-network-access/fetch.window.js@@ -1,6 +1,5 @@ // META: script=/common/utils.js-// META: script=resources/support.js-// META: script=resources/ports.sub.js+// META: script=resources/support.sub.js // // Spec: https://wicg.github.io/private-network-access/#integration-fetch //@@ -16,87 +15,84 @@ }); promise_test(t => fetchTest(t, {- source: { port: kPorts.httpLocal },- target: { port: kPorts.httpLocal },- expected: kFetchTestResult.success,+ source: { server: Server.HTTP_LOCAL },+ target: { server: Server.HTTP_LOCAL },+ expected: FetchTestResult.SUCCESS, }), "local to local: no preflight required."); promise_test(t => fetchTest(t, {- source: { port: kPorts.httpLocal },+ source: { server: Server.HTTP_LOCAL }, target: {- port: kPorts.httpPrivate,- searchParams: { "final-headers": "cors" },+ server: Server.HTTP_PRIVATE,+ behavior: { response: ResponseBehavior.allowCrossOrigin() }, },- expected: kFetchTestResult.success,+ expected: FetchTestResult.SUCCESS, }), "local to private: no preflight required."); promise_test(t => fetchTest(t, {- source: { port: kPorts.httpLocal },+ source: { server: Server.HTTP_LOCAL }, target: {- port: kPorts.httpPublic,- searchParams: { "final-headers": "cors" },+ server: Server.HTTP_PUBLIC,+ behavior: { response: ResponseBehavior.allowCrossOrigin() }, },- expected: kFetchTestResult.success,+ expected: FetchTestResult.SUCCESS, }), "local to public: no preflight required."); promise_test(t => fetchTest(t, {- source: { port: kPorts.httpPrivate },+ source: { server: Server.HTTP_PRIVATE }, target: {- port: kPorts.httpLocal,- searchParams: {- "preflight-uuid": token(),- "preflight-headers": "cors+pna",- "final-headers": "cors",+ server: Server.HTTP_LOCAL,+ behavior: {+ preflight: PreflightBehavior.success(token()),+ response: ResponseBehavior.allowCrossOrigin(), }, },- expected: kFetchTestResult.failure,+ expected: FetchTestResult.FAILURE, }), "private to local: failure."); promise_test(t => fetchTest(t, {- source: { port: kPorts.httpPrivate },- target: { port: kPorts.httpPrivate },- expected: kFetchTestResult.success,+ source: { server: Server.HTTP_PRIVATE },+ target: { server: Server.HTTP_PRIVATE },+ expected: FetchTestResult.SUCCESS, }), "private to private: no preflight required."); promise_test(t => fetchTest(t, {- source: { port: kPorts.httpPrivate },+ source: { server: Server.HTTP_PRIVATE }, target: {- port: kPorts.httpPublic,- searchParams: { "final-headers": "cors" },+ server: Server.HTTP_PUBLIC,+ behavior: { response: ResponseBehavior.allowCrossOrigin() }, },- expected: kFetchTestResult.success,+ expected: FetchTestResult.SUCCESS, }), "private to public: no preflight required."); promise_test(t => fetchTest(t, {- source: { port: kPorts.httpPublic },+ source: { server: Server.HTTP_PUBLIC }, target: {- port: kPorts.httpLocal,- searchParams: {- "preflight-uuid": token(),- "preflight-headers": "cors+pna",- "final-headers": "cors",+ server: Server.HTTP_LOCAL,+ behavior: {+ preflight: PreflightBehavior.success(token()),+ response: ResponseBehavior.allowCrossOrigin(), }, },- expected: kFetchTestResult.failure,+ expected: FetchTestResult.FAILURE, }), "public to local: failure."); promise_test(t => fetchTest(t, {- source: { port: kPorts.httpPublic },+ source: { server: Server.HTTP_PUBLIC }, target: {- port: kPorts.httpPrivate,- searchParams: {- "preflight-uuid": token(),- "preflight-headers": "cors+pna",- "final-headers": "cors",+ server: Server.HTTP_PRIVATE,+ behavior: {+ preflight: PreflightBehavior.success(token()),+ response: ResponseBehavior.allowCrossOrigin(), }, },- expected: kFetchTestResult.failure,+ expected: FetchTestResult.FAILURE, }), "public to private: failure."); promise_test(t => fetchTest(t, {- source: { port: kPorts.httpPublic },- target: { port: kPorts.httpPublic },- expected: kFetchTestResult.success,+ source: { server: Server.HTTP_PUBLIC },+ target: { server: Server.HTTP_PUBLIC },+ expected: FetchTestResult.SUCCESS, }), "public to public: no preflight required."); // These tests verify that documents fetched from the `local` address space yet@@ -105,46 +101,44 @@ promise_test(t => fetchTest(t, { source: {- port: kPorts.httpLocal,- headers: { "Content-Security-Policy": "treat-as-public-address" },+ server: Server.HTTP_LOCAL,+ treatAsPublic: true, }, target: {- port: kPorts.httpLocal,- searchParams: {- "preflight-uuid": token(),- "preflight-headers": "cors+pna",- "final-headers": "cors",+ server: Server.HTTP_LOCAL,+ behavior: {+ preflight: PreflightBehavior.success(token()),+ response: ResponseBehavior.allowCrossOrigin(), }, },- expected: kFetchTestResult.failure,+ expected: FetchTestResult.FAILURE, }), "treat-as-public-address to local: failure."); promise_test(t => fetchTest(t, { source: {- port: kPorts.httpLocal,- headers: { "Content-Security-Policy": "treat-as-public-address" },+ server: Server.HTTP_LOCAL,+ treatAsPublic: true, }, target: {- port: kPorts.httpPrivate,- searchParams: {- "preflight-uuid": token(),- "preflight-headers": "cors+pna",- "final-headers": "cors",+ server: Server.HTTP_PRIVATE,+ behavior: {+ preflight: PreflightBehavior.success(token()),+ response: ResponseBehavior.allowCrossOrigin(), }, },- expected: kFetchTestResult.failure,+ expected: FetchTestResult.FAILURE, }), "treat-as-public-address to private: failure."); promise_test(t => fetchTest(t, { source: {- port: kPorts.httpLocal,- headers: { "Content-Security-Policy": "treat-as-public-address" },+ server: Server.HTTP_LOCAL,+ treatAsPublic: true, }, target: {- port: kPorts.httpPublic,- searchParams: { "final-headers": "cors" },+ server: Server.HTTP_PUBLIC,+ behavior: { response: ResponseBehavior.allowCrossOrigin() }, },- expected: kFetchTestResult.success,+ expected: FetchTestResult.SUCCESS, }), "treat-as-public-address to public: no preflight required."); // These tests verify that HTTPS iframes embedded in an HTTP top-level document@@ -153,52 +147,37 @@ // their parent is a non-secure context. promise_test(t => fetchTest(t, {- source: {- protocol: "https:",- port: kPorts.httpsPrivate,- },+ source: { server: Server.HTTPS_PRIVATE }, target: {- protocol: "https:",- port: kPorts.httpsLocal,- searchParams: {- "preflight-uuid": token(),- "preflight-headers": "cors+pna",- "final-headers": "cors",+ server: Server.HTTPS_LOCAL,+ behavior: {+ preflight: PreflightBehavior.success(token()),+ response: ResponseBehavior.allowCrossOrigin(), }, },- expected: kFetchTestResult.failure,+ expected: FetchTestResult.FAILURE, }), "private https to local: failure."); promise_test(t => fetchTest(t, {- source: {- protocol: "https:",- port: kPorts.httpsPublic,- },+ source: { server: Server.HTTPS_PUBLIC }, target: {- protocol: "https:",- port: kPorts.httpsLocal,- searchParams: {- "preflight-uuid": token(),- "preflight-headers": "cors+pna",- "final-headers": "cors",+ server: Server.HTTPS_LOCAL,+ behavior: {+ preflight: PreflightBehavior.success(token()),+ response: ResponseBehavior.allowCrossOrigin(), }, },- expected: kFetchTestResult.failure,+ expected: FetchTestResult.FAILURE, }), "public https to local: failure."); promise_test(t => fetchTest(t, {- source: {- protocol: "https:",- port: kPorts.httpsPublic,- },+ source: { server: Server.HTTPS_PUBLIC }, target: {- protocol: "https:",- port: kPorts.httpsPrivate,- searchParams: {- "preflight-uuid": token(),- "preflight-headers": "cors+pna",- "final-headers": "cors",+ server: Server.HTTPS_PRIVATE,+ behavior: {+ preflight: PreflightBehavior.success(token()),+ response: ResponseBehavior.allowCrossOrigin(), }, },- expected: kFetchTestResult.failure,+ expected: FetchTestResult.FAILURE, }), "public https to private: failure.");
Here's the analysis of the provided code diff for security fixes: 1. Vulnerability Existed: not sure [Potential Private Network Access (PNA) Security Enhancement] [testing/web-platform/tests/fetch/private-network-access/fetch.window.js] [Lines: Multiple changes throughout] [Old Code: Various test configurations using port numbers and searchParams] [Fixed Code: Updated test configurations using Server and Behavior objects] The changes appear to be related to implementing Private Network Access (PNA) security specifications, but it's not clear if this fixes a specific vulnerability or just implements the specification more robustly. The changes: - Replace direct port numbers with Server constants (HTTP_LOCAL, HTTP_PRIVATE, HTTP_PUBLIC) - Replace searchParams with behavior objects - Change kFetchTestResult to FetchTestResult - Consolidate script includes 2. Vulnerability Existed: not sure [Potential CORS Security Improvement] [testing/web-platform/tests/fetch/private-network-access/fetch.window.js] [Lines: Multiple changes throughout] [Old Code: Manual CORS headers configuration via searchParams] [Fixed Code: Standardized CORS handling via ResponseBehavior.allowCrossOrigin()] The changes standardize CORS handling which could improve security, but it's not clear if this fixes a specific vulnerability. 3. Vulnerability Existed: not sure [Potential CSP Header Handling Improvement] [testing/web-platform/tests/fetch/private-network-access/fetch.window.js] [Lines: Around line 100] [Old Code: Manual Content-Security-Policy header setting] [Fixed Code: Using treatAsPublic flag] The change in how "treat-as-public-address" is implemented might relate to security, but the exact impact isn't clear from the diff. Note: These changes appear to be test file modifications implementing the Private Network Access specification (https://wicg.github.io/private-network-access/). While they relate to security features, they don't appear to be fixing specific vulnerabilities but rather implementing and testing the security specification.
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/streams/ReadableStreamDefaultController.cpp+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/dom/streams/ReadableStreamDefaultController.cpp@@ -9,6 +9,7 @@ #include "js/Value.h" #include "mozilla/AlreadyAddRefed.h" #include "mozilla/Attributes.h"+#include "mozilla/HoldDropJSObjects.h" #include "mozilla/dom/Promise.h" #include "mozilla/dom/PromiseNativeHandler.h" #include "mozilla/dom/ReadableStream.h"@@ -39,6 +40,7 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(ReadableStreamDefaultController) NS_IMPL_CYCLE_COLLECTION_UNLINK(mCancelAlgorithm, mStrategySizeAlgorithm, mPullAlgorithm, mStream)+ tmp->mQueue.clear(); NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER NS_IMPL_CYCLE_COLLECTION_UNLINK_END@@ -69,8 +71,7 @@ ReadableStreamDefaultController::ReadableStreamDefaultController( nsIGlobalObject* aGlobal) : ReadableStreamController(aGlobal) {- // Add |MOZ_COUNT_CTOR(ReadableStreamDefaultController);| for a non-refcounted- // object.+ mozilla::HoldJSObjects(this); } ReadableStreamDefaultController::~ReadableStreamDefaultController() {@@ -79,6 +80,7 @@ // having entries in its queue. // // This needs to be verified as not indicating some other issue.+ mozilla::DropJSObjects(this); mQueue.clear(); }@@ -94,17 +96,62 @@ // https://streams.spec.whatwg.org/#readable-stream-default-controller-can-close-or-enqueue static bool ReadableStreamDefaultControllerCanCloseOrEnqueue( ReadableStreamDefaultController* aController) {- // Step 1.+ // Step 1. Let state be controller.[[stream]].[[state]]. ReadableStream::ReaderState state = aController->GetStream()->State();- // Step 2.+ // Step 2. If controller.[[closeRequested]] is false and state is "readable",+ // return true. if (!aController->CloseRequested() && state == ReadableStream::ReaderState::Readable) { return true; }- // Step 3.+ // Step 3. Return false. return false;+}++enum class CloseOrEnqueue { Close, Enqueue };++// https://streams.spec.whatwg.org/#readable-stream-default-controller-can-close-or-enqueue+// This is a variant of ReadableStreamDefaultControllerCanCloseOrEnqueue+// that also throws when the function would return false to improve error+// messages.+static bool ReadableStreamDefaultControllerCanCloseOrEnqueueAndThrow(+ ReadableStreamDefaultController* aController,+ CloseOrEnqueue aCloseOrEnqueue, ErrorResult& aRv) {+ // Step 1. Let state be controller.[[stream]].[[state]].+ ReadableStream::ReaderState state = aController->GetStream()->State();++ nsCString prefix;+ if (aCloseOrEnqueue == CloseOrEnqueue::Close) {+ prefix = "Cannot close a readable stream that "_ns;+ } else {+ prefix = "Cannot enqueue into a readable stream that "_ns;+ }++ switch (state) {+ case ReadableStream::ReaderState::Readable:+ // Step 2. If controller.[[closeRequested]] is false and+ // state is "readable", return true.+ // Note: We don't error/check for [[closeRequest]] first, because+ // [[closedRequest]] is still true even after the state is "closed".+ // This doesn't cause any spec observable difference.+ if (!aController->CloseRequested()) {+ return true;+ }++ // Step 3. Return false.+ aRv.ThrowTypeError(prefix + "has already been requested to close."_ns);+ return false;++ case ReadableStream::ReaderState::Closed:+ aRv.ThrowTypeError(prefix + "is already closed."_ns);+ return false;++ case ReadableStream::ReaderState::Errored:+ aRv.ThrowTypeError(prefix + "has errored."_ns);+ return false;+ } } static Nullable<double> ReadableStreamDefaultControllerGetDesiredSize(@@ -138,7 +185,7 @@ // As far as I know, this isn't currently visible, but we need to keep // this in mind. This is a weakness of this current implementation, and // I'd prefer to have a better answer here eventually.-static void ReadableStreamDefaultControllerClearAlgorithms(+void ReadableStreamDefaultControllerClearAlgorithms( ReadableStreamDefaultController* aController) { // Step 1. aController->SetPullAlgorithm(nullptr);@@ -158,8 +205,9 @@ if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(aController)) { return; }- // Step 2.- ReadableStream* stream = aController->GetStream();++ // Step 2.+ RefPtr<ReadableStream> stream = aController->GetStream(); // Step 3. aController->SetCloseRequested(true);@@ -177,10 +225,11 @@ // https://streams.spec.whatwg.org/#rs-default-controller-close void ReadableStreamDefaultController::Close(JSContext* aCx, ErrorResult& aRv) { // Step 1.- if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {- aRv.ThrowTypeError("Cannot Close");- return;- }+ if (!ReadableStreamDefaultControllerCanCloseOrEnqueueAndThrow(+ this, CloseOrEnqueue::Close, aRv)) {+ return;+ }+ // Step 2. ReadableStreamDefaultControllerClose(aCx, this, aRv); }@@ -199,7 +248,7 @@ } // Step 2.- ReadableStream* stream = aController->GetStream();+ RefPtr<ReadableStream> stream = aController->GetStream(); // Step 3. if (IsReadableStreamLocked(stream) &&@@ -223,7 +272,12 @@ CallbackObject::eRethrowExceptions) : 1.0;- // Step 4.2+ // If this is an uncatchable exception we can't continue.+ if (aRv.IsUncatchableException()) {+ return;+ }++ // Step 4.2: if (aRv.MaybeSetPendingException( aCx, "ReadableStreamDefaultController.enqueue")) { JS::RootedValue errorValue(aCx);@@ -280,8 +334,8 @@ JS::Handle<JS::Value> aChunk, ErrorResult& aRv) { // Step 1.- if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {- aRv.ThrowTypeError("Cannot Enqueue");+ if (!ReadableStreamDefaultControllerCanCloseOrEnqueueAndThrow(+ this, CloseOrEnqueue::Enqueue, aRv)) { return; }@@ -366,8 +420,9 @@ ReadableStreamDefaultController* aController) : PromiseNativeHandler(), mController(aController) {}- MOZ_CAN_RUN_SCRIPT void ResolvedCallback(- JSContext* aCx, JS::Handle<JS::Value> aValue) override {+ MOZ_CAN_RUN_SCRIPT void ResolvedCallback(JSContext* aCx,+ JS::Handle<JS::Value> aValue,+ ErrorResult& aRv) override { // https://streams.spec.whatwg.org/#readable-stream-default-controller-call-pull-if-needed // Step 7.1 mController->SetPulling(false);@@ -377,20 +432,17 @@ mController->SetPullAgain(false); // Step 7.2.2- IgnoredErrorResult rv;+ ErrorResult rv; ReadableStreamDefaultControllerCallPullIfNeeded(- aCx, MOZ_KnownLive(mController), rv);- // Not Sure How To Handle Errors Inside Native Callbacks,- (void)NS_WARN_IF(rv.Failed());+ aCx, MOZ_KnownLive(mController), aRv); } }- void RejectedCallback(JSContext* aCx, JS::Handle<JS::Value> aValue) override {+ void RejectedCallback(JSContext* aCx, JS::Handle<JS::Value> aValue,+ ErrorResult& aRv) override { // https://streams.spec.whatwg.org/#readable-stream-default-controller-call-pull-if-needed // Step 8.1- IgnoredErrorResult rv;- ReadableStreamDefaultControllerError(aCx, mController, aValue, rv);- (void)rv.MaybeSetPendingException(aCx, "PullIfNeeded Rejected Error");+ ReadableStreamDefaultControllerError(aCx, mController, aValue, aRv); } };@@ -432,40 +484,12 @@ RefPtr<UnderlyingSourcePullCallbackHelper> pullAlgorithm( aController->GetPullAlgorithm());- // Pre-allocate a promise which we may end up discarding or rejecting.- // We do this here in order to avoid having to try allocating on a- // failure path after the callback is called.- RefPtr<Promise> maybeRejectPromise =- Promise::Create(aController->GetParentObject(), aRv);- if (aRv.Failed()) {- return;- }- RefPtr<Promise> pullPromise = pullAlgorithm ? pullAlgorithm->PullCallback(aCx, *aController, aRv) : Promise::CreateResolvedWithUndefined( aController->GetParentObject(), aRv);-- // The below failure handling code is all about implmenting WebIDL promise- // rejection semantics until- // https://bugzilla.mozilla.org/show_bug.cgi?id=1726595 is fixed.- //- // Since this function can be called as part of a native promise handler,- // which has no way right now to signal error, and to ape what we do in the SM- // Streams implementation,- // https://searchfox.org/mozilla-central/source/js/src/builtin/streams/MiscellaneousOperations-inl.h#37- //-- // Inform the ErrorResult that we're handling a JS exception if it happened.- aRv.WouldReportJSException();-- // We want to convert callback throw to a rejected promise. if (aRv.Failed()) {- MOZ_ASSERT(!pullPromise);-- // Use the previously allocated promise now.- pullPromise = maybeRejectPromise;- pullPromise->MaybeReject(std::move(aRv));+ return; } // Step 7 + 8:@@ -487,7 +511,8 @@ : PromiseNativeHandler(), mController(aController) {} MOZ_CAN_RUN_SCRIPT- void ResolvedCallback(JSContext* aCx, JS::Handle<JS::Value> aValue) override {+ void ResolvedCallback(JSContext* aCx, JS::Handle<JS::Value> aValue,+ ErrorResult& aRv) override { MOZ_ASSERT(mController); // https://streams.spec.whatwg.org/#set-up-readable-stream-default-controller@@ -502,20 +527,16 @@ mController->SetPullAgain(false); // Step 11.4:- ErrorResult rv;+ RefPtr<ReadableStreamDefaultController> stackController = mController;- ReadableStreamDefaultControllerCallPullIfNeeded(aCx, stackController, rv);- if (rv.Failed()) {- MOZ_CRASH("Error Handling Not Clear Inside Promise Callback");- }- }-- void RejectedCallback(JSContext* aCx, JS::Handle<JS::Value> aValue) override {+ ReadableStreamDefaultControllerCallPullIfNeeded(aCx, stackController, aRv);+ }++ void RejectedCallback(JSContext* aCx, JS::Handle<JS::Value> aValue,+ ErrorResult& aRv) override { // https://streams.spec.whatwg.org/#set-up-readable-stream-default-controller // Step 12.1- ErrorResult rv;- ReadableStreamDefaultControllerError(aCx, mController, aValue, rv);- (void)rv.MaybeSetPendingException(aCx, "StartPromise Rejected Error");+ ReadableStreamDefaultControllerError(aCx, mController, aValue, aRv); } };@@ -642,6 +663,9 @@ RefPtr<Promise> result = callback ? callback->CancelCallback(aCx, errorOption, aRv) : Promise::CreateResolvedWithUndefined(GetParentObject(), aRv);+ if (aRv.Failed()) {+ return nullptr;+ } // Step 3. ReadableStreamDefaultControllerClearAlgorithms(this);@@ -655,7 +679,7 @@ ReadRequest* aReadRequest, ErrorResult& aRv) { // Step 1.- ReadableStream* stream = mStream;+ RefPtr<ReadableStream> stream = mStream; // Step 2. if (!mQueue.isEmpty()) {@@ -691,5 +715,10 @@ } }+// https://streams.spec.whatwg.org/#abstract-opdef-readablestreamdefaultcontroller-releasesteps+void ReadableStreamDefaultController::ReleaseSteps() {+ // Step 1. Return.+}+ } // namespace dom } // namespace mozilla
Based on the provided code diff, I'll analyze the security fixes. Here are the identified vulnerabilities and changes: 1. Vulnerability Existed: yes Memory Management Vulnerability [File] dom/streams/ReadableStreamDefaultController.cpp [Lines 39-40, 69-80] [Old Code] - No explicit handling of JS objects in constructor/destructor - No clearing of mQueue in cycle collection unlink [Fixed Code] + Added mozilla::HoldJSObjects(this) in constructor + Added mozilla::DropJSObjects(this) in destructor + Added tmp->mQueue.clear() in cycle collection unlink 2. Vulnerability Existed: yes Error Handling Vulnerability [File] dom/streams/ReadableStreamDefaultController.cpp [Lines 420-432, 484-511] [Old Code] - IgnoredErrorResult used in promise callbacks - No proper error propagation [Fixed Code] + Proper ErrorResult parameter in promise callbacks + Better error handling and propagation 3. Vulnerability Existed: yes Type Confusion/State Validation Vulnerability [File] dom/streams/ReadableStreamDefaultController.cpp [Lines 94-156] [Old Code] - Basic state validation without detailed error messages [Fixed Code] - Added ReadableStreamDefaultControllerCanCloseOrEnqueueAndThrow with detailed error messages - Better state validation with specific error cases 4. Vulnerability Existed: yes Resource Leak Vulnerability [File] dom/streams/ReadableStreamDefaultController.cpp [Lines 205-225] [Old Code] - Raw pointer usage for ReadableStream [Fixed Code] - Changed to RefPtr<ReadableStream> for better memory management 5. Vulnerability Existed: not sure Promise Handling Vulnerability [File] dom/streams/ReadableStreamDefaultController.cpp [Lines 484-511] [Old Code] - Complex promise rejection handling with manual promise creation [Fixed Code] - Simplified promise handling - Direct error propagation [Note] While this appears to be a security improvement, I'm not entirely certain if it was fixing a specific vulnerability or just improving code quality. The changes primarily focus on: 1. Better memory management of JavaScript objects 2. Improved error handling and propagation 3. More robust state validation 4. Better resource management through RefPtr 5. Cleaner promise handling These changes appear to address potential memory leaks, type confusion issues, and improve overall security of the stream controller implementation.
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-values/ic-unit-010.html+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/testing/web-platform/tests/css/css-values/ic-unit-010.html@@ -8,7 +8,6 @@ <link rel="help" href="https://www.w3.org/TR/css-values-4/#font-relative-lengths"> <link rel="match" href="reference/ic-unit-009-ref.html">- <meta name="flags" content=""> <meta name="assert" content="In this test, the ic unit is the advance height measure of the 水 (CJK water ideograph, U+6C34) glyph."> <style>
Analysis of the provided code diff: 1. Vulnerability Existed: no No specific vulnerability found [File] testing/web-platform/tests/css/css-values/ic-unit-010.html [Lines] 8 [Old Code] `<meta name="flags" content="">` [Fixed Code] (line removed) Additional Details: - The change simply removes an empty meta tag with a "flags" attribute, which doesn't appear to have any security implications. - This appears to be a cleanup change rather than a security fix. - No known vulnerability is associated with this change. Note: The diff shows only one change, which doesn't appear to be security-related. The removal of an empty meta tag doesn't indicate any security vulnerability being fixed.
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/compositing/mix-blend-mode/mix-blend-mode-both-parent-and-blended-with-3D-transform.html+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/testing/web-platform/tests/css/compositing/mix-blend-mode/mix-blend-mode-both-parent-and-blended-with-3D-transform.html@@ -7,7 +7,6 @@ <link rel="author" title="Ion Roșca" href="mailto:[email protected]"> <link rel="reviewer" title="Mihai Țică" href="mailto:[email protected]"> <link rel="help" href="https://drafts.fxtf.org/compositing-1/#mix-blend-mode">- <meta name="flags" content=""> <meta name="assert" content="Test checks that the element with mix-blend-mode blends with the parent element (both with 3D transform)"> <link rel="match" href="reference/mix-blend-mode-both-parent-and-blended-with-3D-transform-ref.html"> <style type="text/css">
Based on the provided diff, I'll analyze it for potential security vulnerabilities: 1. Vulnerability Existed: no No specific vulnerability [File: mix-blend-mode-both-parent-and-blended-with-3D-transform.html] [Lines: 7] Old Code: `<meta name="flags" content="">` Fixed Code: (removed line) Additional Details: This appears to be a simple removal of an empty meta tag that wasn't serving any purpose. There's no indication of a security vulnerability being fixed here. 2. Vulnerability Existed: not sure Potential HTML meta tag issue [File: mix-blend-mode-both-parent-and-blended-with-3D-transform.html] [Lines: 7] Old Code: `<meta name="flags" content="">` Fixed Code: (removed line) Additional Details: While this doesn't appear to be fixing a known vulnerability, there's a small possibility that empty meta tags could potentially be exploited in some edge cases, though this is highly speculative. The change seems to be more of a cleanup rather than a security fix. The removal of the empty 'flags' meta tag doesn't correspond to any known vulnerability patterns.
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/schemas/manifest.json+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/toolkit/components/extensions/schemas/manifest.json@@ -132,7 +132,9 @@ "page": { "$ref": "ExtensionURL" }, "persistent": { "optional": true,- "$ref": "PersistentBackgroundProperty"+ "type": "boolean",+ "max_manifest_version": 2,+ "default": true } }, "additionalProperties": { "$ref": "UnrecognizedProperty" }@@ -146,7 +148,9 @@ }, "persistent": { "optional": true,- "$ref": "PersistentBackgroundProperty"+ "type": "boolean",+ "max_manifest_version": 2,+ "default": true } }, "additionalProperties": { "$ref": "UnrecognizedProperty" }@@ -722,20 +726,6 @@ "id": "UnrecognizedProperty", "type": "any", "deprecated": "An unexpected property was found in the WebExtension manifest."- },- {- "id": "PersistentBackgroundProperty",- "choices": [- {- "type": "boolean",- "enum": [true]- },- {- "type": "boolean",- "enum": [false],- "deprecated": "Event pages are not currently supported. This will run as a persistent background page."- }- ] } ] }
Here's the analysis of the provided code diff following the specified format: 1. Vulnerability Existed: not sure Background Page Persistence Configuration Change [File] toolkit/components/extensions/schemas/manifest.json [Lines 132-148] [Old Code] ```json "persistent": { "optional": true, "$ref": "PersistentBackgroundProperty" } ``` [Fixed Code] ```json "persistent": { "optional": true, "type": "boolean", "max_manifest_version": 2, "default": true } ``` 2. Vulnerability Existed: not sure Removal of PersistentBackgroundProperty Schema [File] toolkit/components/extensions/schemas/manifest.json [Lines 722-736] [Old Code] ```json { "id": "PersistentBackgroundProperty", "choices": [ { "type": "boolean", "enum": [true] }, { "type": "boolean", "enum": [false], "deprecated": "Event pages are not currently supported. This will run as a persistent background page." } ] } ``` [Fixed Code] (Removed entirely) Additional Details: - The changes appear to simplify the background page persistence configuration by removing the complex schema validation and replacing it with a simpler boolean type with a default value. - The removal of the `PersistentBackgroundProperty` schema suggests a change in how background page persistence is handled, but without more context about the extension system's behavior, it's hard to determine if this was fixing a security vulnerability or just simplifying the implementation. - The `max_manifest_version: 2` restriction suggests this property is being phased out for newer manifest versions.
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.image.destination-atop.worker.js+++ /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.image.destination-atop.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'); ctx.fillStyle = 'rgba(0, 255, 255, 0.5)';@@ -32,8 +32,8 @@ promise.then(function(response) { createImageBitmap(response).then(bitmap => { ctx.drawImage(bitmap, 40, 40, 10, 10, 40, 50, 10, 10);- _assertPixelApprox(offscreenCanvas, 15,15, 0,0,0,0, "15,15", "0,0,0,0", 5);- _assertPixelApprox(offscreenCanvas, 50,25, 0,0,0,0, "50,25", "0,0,0,0", 5);+ _assertPixelApprox(canvas, 15,15, 0,0,0,0, "15,15", "0,0,0,0", 5);+ _assertPixelApprox(canvas, 50,25, 0,0,0,0, "50,25", "0,0,0,0", 5); }, t_fail); }).then(t_pass, t_fail);
After analyzing the provided code diff, I don't see any security vulnerabilities being fixed. The changes appear to be purely variable name refactoring without any security implications. Here's the analysis following your requested format: Vulnerability Existed: no No security vulnerability found [testing/web-platform/tests/html/canvas/offscreen/compositing/2d.composite.uncovered.image.destination-atop.worker.js] [Lines 13-14, 32-33] Old Code: var offscreenCanvas = new OffscreenCanvas(100, 50); var ctx = offscreenCanvas.getContext('2d'); _assertPixelApprox(offscreenCanvas, 15,15, 0,0,0,0, "15,15", "0,0,0,0", 5); _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, 15,15, 0,0,0,0, "15,15", "0,0,0,0", 5); _assertPixelApprox(canvas, 50,25, 0,0,0,0, "50,25", "0,0,0,0", 5); The changes simply rename the variable 'offscreenCanvas' to 'canvas' and update all references to it. This appears to be a code style/readability 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/js/src/builtin/TupleObject.cpp+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/js/src/builtin/TupleObject.cpp@@ -30,22 +30,36 @@ return tup; }-TupleType* TupleObject::unbox() const {- return &getFixedSlot(PrimitiveValueSlot)- .toExtendedPrimitive()- .as<TupleType>();+// Caller is responsible for rooting the result+TupleType& TupleObject::unbox() const {+ return getFixedSlot(PrimitiveValueSlot).toExtendedPrimitive().as<TupleType>(); }-bool TupleObject::maybeUnbox(JSObject* obj, MutableHandle<TupleType*> tupp) {+// Caller is responsible for rooting the result+mozilla::Maybe<TupleType&> TupleObject::maybeUnbox(JSObject* obj) {+ Maybe<TupleType&> result = mozilla::Nothing(); if (obj->is<TupleType>()) {- tupp.set(&obj->as<TupleType>());- return true;+ result.emplace(obj->as<TupleType>());+ } else if (obj->is<TupleObject>()) {+ result.emplace(obj->as<TupleObject>().unbox()); }- if (obj->is<TupleObject>()) {- tupp.set(obj->as<TupleObject>().unbox());- return true;+ return result;+}++bool js::IsTuple(JSObject& obj) {+ return (obj.is<TupleType>() || obj.is<TupleObject>());+}++// Caller is responsible for rooting the result+mozilla::Maybe<TupleType&> js::ThisTupleValue(JSContext* cx, HandleValue val) {+ if (!js::IsTuple(val)) {+ JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr,+ JSMSG_BAD_TUPLE_OBJECT);+ return mozilla::Nothing(); }- return false;+ Maybe<TupleType&> result = mozilla::Nothing();+ result.emplace(TupleType::thisTupleValue(val));+ return (result); } bool tup_mayResolve(const JSAtomState&, jsid id, JSObject*) {@@ -56,7 +70,7 @@ bool tup_resolve(JSContext* cx, HandleObject obj, HandleId id, bool* resolvedp) { RootedValue value(cx);- *resolvedp = obj->as<TupleObject>().unbox()->getOwnProperty(id, &value);+ *resolvedp = obj->as<TupleObject>().unbox().getOwnProperty(id, &value); if (*resolvedp) { static const unsigned TUPLE_ELEMENT_ATTRS =
Analyzing the code diff for security fixes: 1. Vulnerability Existed: not sure [Potential Memory Safety Issue] [js/src/builtin/TupleObject.cpp] [Lines 30-36] [Old Code] TupleType* TupleObject::unbox() const { return &getFixedSlot(PrimitiveValueSlot) .toExtendedPrimitive() .as<TupleType>(); } [Fixed Code] TupleType& TupleObject::unbox() const { return getFixedSlot(PrimitiveValueSlot).toExtendedPrimitive().as<TupleType>(); } 2. Vulnerability Existed: not sure [Potential Null Pointer Dereference] [js/src/builtin/TupleObject.cpp] [Lines 38-50] [Old Code] bool TupleObject::maybeUnbox(JSObject* obj, MutableHandle<TupleType*> tupp) { if (obj->is<TupleType>()) { tupp.set(&obj->as<TupleType>()); return true; } if (obj->is<TupleObject>()) { tupp.set(obj->as<TupleObject>().unbox()); return true; } return false; } [Fixed Code] mozilla::Maybe<TupleType&> TupleObject::maybeUnbox(JSObject* obj) { Maybe<TupleType&> result = mozilla::Nothing(); if (obj->is<TupleType>()) { result.emplace(obj->as<TupleType>()); } else if (obj->is<TupleObject>()) { result.emplace(obj->as<TupleObject>().unbox()); } return result; } 3. Vulnerability Existed: not sure [Potential Type Safety Issue] [js/src/builtin/TupleObject.cpp] [Lines 52-62] [Old Code] (No equivalent function in old code) [Fixed Code] mozilla::Maybe<TupleType&> js::ThisTupleValue(JSContext* cx, HandleValue val) { if (!js::IsTuple(val)) { JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_BAD_TUPLE_OBJECT); return mozilla::Nothing(); } Maybe<TupleType&> result = mozilla::Nothing(); result.emplace(TupleType::thisTupleValue(val)); return (result); } The changes appear to be focused on improving memory safety and type safety by: 1. Changing pointer returns to reference returns 2. Using Maybe types to handle potential null cases 3. Adding explicit type checking 4. Adding error reporting for invalid cases While these changes appear to be security-conscious improvements, without more context about the specific threat model or known vulnerabilities being addressed, we can't be certain if these were fixing specific known vulnerabilities or just general hardening.
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.fillStyle.parse.invalid.name-2.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.fillStyle.parse.invalid.name-2.worker.js@@ -13,14 +13,14 @@ }); 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 = '#0f0'; try { ctx.fillStyle = 'firebrick1'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does ctx.fillRect(0, 0, 100, 50);-_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");+_assertPixel(canvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255"); t.done(); });
Analyzing the provided code diff, here's the security assessment: 1. Vulnerability Existed: no No specific vulnerability found [File] [Lines 13-14, 20] [Old Code] 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] 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"); Additional Details: - The changes appear to be purely variable renaming (from `offscreenCanvas` to `canvas`) with no security implications. - The color parsing test remains the same in functionality. - No security vulnerabilities were fixed in this diff. - The change seems to be for consistency or readability rather than security.
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/newtab/css/activity-stream-windows.css+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/browser/components/newtab/css/activity-stream-windows.css@@ -2740,89 +2740,214 @@ .ds-card-grid.empty { grid-template-columns: auto; }-.ds-column-9 .ds-card-grid.ds-card-grid-compact-variant, .ds-column-10 .ds-card-grid.ds-card-grid-compact-variant, .ds-column-11 .ds-card-grid.ds-card-grid-compact-variant, .ds-column-12 .ds-card-grid.ds-card-grid-compact-variant {+.ds-column-9 .ds-card-grid.ds-card-grid-four-card-variant, .ds-column-10 .ds-card-grid.ds-card-grid-four-card-variant, .ds-column-11 .ds-card-grid.ds-card-grid-four-card-variant, .ds-column-12 .ds-card-grid.ds-card-grid-four-card-variant { grid-template-columns: repeat(1, 1fr); } @media (min-width: 610px) {- .ds-column-9 .ds-card-grid.ds-card-grid-compact-variant, .ds-column-10 .ds-card-grid.ds-card-grid-compact-variant, .ds-column-11 .ds-card-grid.ds-card-grid-compact-variant, .ds-column-12 .ds-card-grid.ds-card-grid-compact-variant {+ .ds-column-9 .ds-card-grid.ds-card-grid-four-card-variant, .ds-column-10 .ds-card-grid.ds-card-grid-four-card-variant, .ds-column-11 .ds-card-grid.ds-card-grid-four-card-variant, .ds-column-12 .ds-card-grid.ds-card-grid-four-card-variant { grid-template-columns: repeat(2, 1fr); } } @media (min-width: 866px) {- .ds-column-9 .ds-card-grid.ds-card-grid-compact-variant, .ds-column-10 .ds-card-grid.ds-card-grid-compact-variant, .ds-column-11 .ds-card-grid.ds-card-grid-compact-variant, .ds-column-12 .ds-card-grid.ds-card-grid-compact-variant {+ .ds-column-9 .ds-card-grid.ds-card-grid-four-card-variant, .ds-column-10 .ds-card-grid.ds-card-grid-four-card-variant, .ds-column-11 .ds-card-grid.ds-card-grid-four-card-variant, .ds-column-12 .ds-card-grid.ds-card-grid-four-card-variant { grid-template-columns: repeat(3, 1fr); } } @media (min-width: 1122px) {- .ds-column-9 .ds-card-grid.ds-card-grid-compact-variant, .ds-column-10 .ds-card-grid.ds-card-grid-compact-variant, .ds-column-11 .ds-card-grid.ds-card-grid-compact-variant, .ds-column-12 .ds-card-grid.ds-card-grid-compact-variant {+ .ds-column-9 .ds-card-grid.ds-card-grid-four-card-variant, .ds-column-10 .ds-card-grid.ds-card-grid-four-card-variant, .ds-column-11 .ds-card-grid.ds-card-grid-four-card-variant, .ds-column-12 .ds-card-grid.ds-card-grid-four-card-variant { grid-template-columns: repeat(4, 1fr); } }-.ds-card-grid.ds-card-grid-compact-variant .ds-card.placeholder {+.ds-card-grid.ds-card-grid-four-card-variant .ds-card.placeholder { min-height: 247px; }-.ds-card-grid.ds-card-grid-compact-variant .ds-card .meta {- padding: 12px 0 0;-}-.ds-card-grid.ds-card-grid-compact-variant .ds-card .meta .story-footer {+.ds-card-grid.ds-card-grid-four-card-variant .ds-card .meta .story-footer { margin-top: 8px; }-.ds-card-grid.ds-card-grid-compact-variant .ds-card .meta .source,-.ds-card-grid.ds-card-grid-compact-variant .ds-card .meta .ds-last-card-desc,-.ds-card-grid.ds-card-grid-compact-variant .ds-card .meta .story-sponsored-label,-.ds-card-grid.ds-card-grid-compact-variant .ds-card .meta .status-message .story-context-label {+.ds-card-grid.ds-card-grid-four-card-variant .ds-card .meta .source,+.ds-card-grid.ds-card-grid-four-card-variant .ds-card .meta .ds-last-card-desc,+.ds-card-grid.ds-card-grid-four-card-variant .ds-card .meta .story-sponsored-label,+.ds-card-grid.ds-card-grid-four-card-variant .ds-card .meta .status-message .story-context-label { color: var(--newtab-text-secondary-color); -webkit-line-clamp: 2; }-.ds-card-grid.ds-card-grid-compact-variant .ds-card .meta .source,-.ds-card-grid.ds-card-grid-compact-variant .ds-card .meta .ds-last-card-desc,-.ds-card-grid.ds-card-grid-compact-variant .ds-card .meta .story-sponsored-label {+.ds-card-grid.ds-card-grid-four-card-variant .ds-card .meta .source,+.ds-card-grid.ds-card-grid-four-card-variant .ds-card .meta .ds-last-card-desc,+.ds-card-grid.ds-card-grid-four-card-variant .ds-card .meta .story-sponsored-label { font-size: 13px; }-.ds-card-grid.ds-card-grid-compact-variant .ds-card .meta .status-message .story-context-label {+.ds-card-grid.ds-card-grid-four-card-variant .ds-card .meta .status-message .story-context-label { font-size: 11.7px; }-.ds-card-grid.ds-card-grid-compact-variant .ds-card .meta .story-badge-icon {+.ds-card-grid.ds-card-grid-four-card-variant .ds-card .meta .story-badge-icon { margin-inline-end: 2px; margin-bottom: 2px; height: 14px; width: 14px; background-size: 14px; }-.ds-card-grid.ds-card-grid-compact-variant .ds-card .meta .title {+.ds-card-grid.ds-card-grid-four-card-variant .ds-card .meta .title { font-size: 14px;- -webkit-line-clamp: 3; line-height: 20px; }-.ds-card-grid.ds-card-grid-compact-variant .ds-card .meta .info-wrap {+.ds-card-grid.ds-card-grid-four-card-variant .ds-card .meta .info-wrap { flex-grow: 0; }--.outer-wrapper .ds-card-grid.ds-card-grid-compact-variant.ds-card-grid-border .ds-card:not(.placeholder),-.outer-wrapper.newtab-experience .ds-card-grid.ds-card-grid-compact-variant.ds-card-grid-border .ds-card:not(.placeholder) {+.ds-column-9 .ds-card-grid.ds-card-grid-hybrid-layout, .ds-column-10 .ds-card-grid.ds-card-grid-hybrid-layout, .ds-column-11 .ds-card-grid.ds-card-grid-hybrid-layout, .ds-column-12 .ds-card-grid.ds-card-grid-hybrid-layout {+ grid-template-columns: repeat(1, 1fr);+}+@media (min-width: 610px) {+ .ds-column-9 .ds-card-grid.ds-card-grid-hybrid-layout, .ds-column-10 .ds-card-grid.ds-card-grid-hybrid-layout, .ds-column-11 .ds-card-grid.ds-card-grid-hybrid-layout, .ds-column-12 .ds-card-grid.ds-card-grid-hybrid-layout {+ grid-template-columns: repeat(2, 1fr);+ }+}+@media (min-width: 866px) {+ .ds-column-9 .ds-card-grid.ds-card-grid-hybrid-layout, .ds-column-10 .ds-card-grid.ds-card-grid-hybrid-layout, .ds-column-11 .ds-card-grid.ds-card-grid-hybrid-layout, .ds-column-12 .ds-card-grid.ds-card-grid-hybrid-layout {+ grid-template-columns: repeat(3, 1fr);+ }+}+@media (max-height: 1065px) {+ .ds-column-9 .ds-card-grid.ds-card-grid-hybrid-layout .excerpt, .ds-column-10 .ds-card-grid.ds-card-grid-hybrid-layout .excerpt, .ds-column-11 .ds-card-grid.ds-card-grid-hybrid-layout .excerpt, .ds-column-12 .ds-card-grid.ds-card-grid-hybrid-layout .excerpt {+ display: none;+ }+}+@media (max-width: 1122px) {+ .ds-column-9 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card.placeholder, .ds-column-10 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card.placeholder, .ds-column-11 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card.placeholder, .ds-column-12 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card.placeholder {+ min-height: 247px;+ }+ .ds-column-9 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .story-footer, .ds-column-10 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .story-footer, .ds-column-11 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .story-footer, .ds-column-12 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .story-footer {+ margin-top: 8px;+ }+ .ds-column-9 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .source,+.ds-column-9 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .ds-last-card-desc,+.ds-column-9 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .story-sponsored-label,+.ds-column-9 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .status-message .story-context-label, .ds-column-10 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .source,+.ds-column-10 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .ds-last-card-desc,+.ds-column-10 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .story-sponsored-label,+.ds-column-10 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .status-message .story-context-label, .ds-column-11 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .source,+.ds-column-11 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .ds-last-card-desc,+.ds-column-11 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .story-sponsored-label,+.ds-column-11 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .status-message .story-context-label, .ds-column-12 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .source,+.ds-column-12 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .ds-last-card-desc,+.ds-column-12 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .story-sponsored-label,+.ds-column-12 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .status-message .story-context-label {+ color: var(--newtab-text-secondary-color);+ -webkit-line-clamp: 2;+ }+ .ds-column-9 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .source,+.ds-column-9 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .ds-last-card-desc,+.ds-column-9 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .story-sponsored-label, .ds-column-10 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .source,+.ds-column-10 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .ds-last-card-desc,+.ds-column-10 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .story-sponsored-label, .ds-column-11 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .source,+.ds-column-11 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .ds-last-card-desc,+.ds-column-11 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .story-sponsored-label, .ds-column-12 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .source,+.ds-column-12 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .ds-last-card-desc,+.ds-column-12 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .story-sponsored-label {+ font-size: 13px;+ }+ .ds-column-9 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .status-message .story-context-label, .ds-column-10 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .status-message .story-context-label, .ds-column-11 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .status-message .story-context-label, .ds-column-12 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .status-message .story-context-label {+ font-size: 11.7px;+ }+ .ds-column-9 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .story-badge-icon, .ds-column-10 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .story-badge-icon, .ds-column-11 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .story-badge-icon, .ds-column-12 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .story-badge-icon {+ margin-inline-end: 2px;+ margin-bottom: 2px;+ height: 14px;+ width: 14px;+ background-size: 14px;+ }+ .ds-column-9 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .title, .ds-column-10 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .title, .ds-column-11 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .title, .ds-column-12 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .title {+ font-size: 14px;+ line-height: 20px;+ }+ .ds-column-9 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .info-wrap, .ds-column-10 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .info-wrap, .ds-column-11 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .info-wrap, .ds-column-12 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .info-wrap {+ flex-grow: 0;+ }+}+@media (min-width: 1122px) and (max-height: 964px) {+ .ds-column-9 .ds-card-grid.ds-card-grid-hybrid-layout, .ds-column-10 .ds-card-grid.ds-card-grid-hybrid-layout, .ds-column-11 .ds-card-grid.ds-card-grid-hybrid-layout, .ds-column-12 .ds-card-grid.ds-card-grid-hybrid-layout {+ grid-template-columns: repeat(4, 1fr);+ }+ .ds-column-9 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card.placeholder, .ds-column-10 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card.placeholder, .ds-column-11 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card.placeholder, .ds-column-12 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card.placeholder {+ min-height: 247px;+ }+ .ds-column-9 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .story-footer, .ds-column-10 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .story-footer, .ds-column-11 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .story-footer, .ds-column-12 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .story-footer {+ margin-top: 8px;+ }+ .ds-column-9 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .source,+.ds-column-9 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .ds-last-card-desc,+.ds-column-9 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .story-sponsored-label,+.ds-column-9 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .status-message .story-context-label, .ds-column-10 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .source,+.ds-column-10 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .ds-last-card-desc,+.ds-column-10 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .story-sponsored-label,+.ds-column-10 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .status-message .story-context-label, .ds-column-11 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .source,+.ds-column-11 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .ds-last-card-desc,+.ds-column-11 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .story-sponsored-label,+.ds-column-11 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .status-message .story-context-label, .ds-column-12 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .source,+.ds-column-12 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .ds-last-card-desc,+.ds-column-12 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .story-sponsored-label,+.ds-column-12 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .status-message .story-context-label {+ color: var(--newtab-text-secondary-color);+ -webkit-line-clamp: 2;+ }+ .ds-column-9 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .source,+.ds-column-9 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .ds-last-card-desc,+.ds-column-9 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .story-sponsored-label, .ds-column-10 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .source,+.ds-column-10 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .ds-last-card-desc,+.ds-column-10 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .story-sponsored-label, .ds-column-11 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .source,+.ds-column-11 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .ds-last-card-desc,+.ds-column-11 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .story-sponsored-label, .ds-column-12 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .source,+.ds-column-12 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .ds-last-card-desc,+.ds-column-12 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .story-sponsored-label {+ font-size: 13px;+ }+ .ds-column-9 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .status-message .story-context-label, .ds-column-10 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .status-message .story-context-label, .ds-column-11 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .status-message .story-context-label, .ds-column-12 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .status-message .story-context-label {+ font-size: 11.7px;+ }+ .ds-column-9 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .story-badge-icon, .ds-column-10 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .story-badge-icon, .ds-column-11 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .story-badge-icon, .ds-column-12 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .story-badge-icon {+ margin-inline-end: 2px;+ margin-bottom: 2px;+ height: 14px;+ width: 14px;+ background-size: 14px;+ }+ .ds-column-9 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .title, .ds-column-10 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .title, .ds-column-11 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .title, .ds-column-12 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .title {+ font-size: 14px;+ line-height: 20px;+ }+ .ds-column-9 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .info-wrap, .ds-column-10 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .info-wrap, .ds-column-11 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .info-wrap, .ds-column-12 .ds-card-grid.ds-card-grid-hybrid-layout .ds-card .meta .info-wrap {+ flex-grow: 0;+ }+}++.outer-wrapper .ds-card-grid.ds-card-grid-hide-background.ds-card-grid-border .ds-card:not(.placeholder),+.outer-wrapper.newtab-experience .ds-card-grid.ds-card-grid-hide-background.ds-card-grid-border .ds-card:not(.placeholder) { box-shadow: none; background: none; }-.outer-wrapper .ds-card-grid.ds-card-grid-compact-variant.ds-card-grid-border .ds-card:not(.placeholder) .ds-card-link:focus,-.outer-wrapper.newtab-experience .ds-card-grid.ds-card-grid-compact-variant.ds-card-grid-border .ds-card:not(.placeholder) .ds-card-link:focus {+.outer-wrapper .ds-card-grid.ds-card-grid-hide-background.ds-card-grid-border .ds-card:not(.placeholder) .ds-card-link:focus,+.outer-wrapper.newtab-experience .ds-card-grid.ds-card-grid-hide-background.ds-card-grid-border .ds-card:not(.placeholder) .ds-card-link:focus { box-shadow: none; }-.outer-wrapper .ds-card-grid.ds-card-grid-compact-variant.ds-card-grid-border .ds-card:not(.placeholder) .ds-card-link:focus .img-wrapper .img img,-.outer-wrapper.newtab-experience .ds-card-grid.ds-card-grid-compact-variant.ds-card-grid-border .ds-card:not(.placeholder) .ds-card-link:focus .img-wrapper .img img {+.outer-wrapper .ds-card-grid.ds-card-grid-hide-background.ds-card-grid-border .ds-card:not(.placeholder) .ds-card-link:focus .img-wrapper .img img,+.outer-wrapper.newtab-experience .ds-card-grid.ds-card-grid-hide-background.ds-card-grid-border .ds-card:not(.placeholder) .ds-card-link:focus .img-wrapper .img img { border: 0; outline: 0; box-shadow: 0 0 0 3px var(--newtab-primary-action-background-dimmed), 0 0 0 1px var(--newtab-primary-action-background); }-.outer-wrapper .ds-card-grid.ds-card-grid-compact-variant.ds-card-grid-border .ds-card:not(.placeholder) .img-wrapper .img img,-.outer-wrapper.newtab-experience .ds-card-grid.ds-card-grid-compact-variant.ds-card-grid-border .ds-card:not(.placeholder) .img-wrapper .img img {+.outer-wrapper .ds-card-grid.ds-card-grid-hide-background.ds-card-grid-border .ds-card:not(.placeholder) .img-wrapper .img img,+.outer-wrapper.newtab-experience .ds-card-grid.ds-card-grid-hide-background.ds-card-grid-border .ds-card:not(.placeholder) .img-wrapper .img img { border-radius: 8px; box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15); }-.outer-wrapper .ds-card-grid.ds-card-grid-compact-variant.ds-card-grid-border .ds-card:not(.placeholder) .img-wrapper .img img.last-card-message-image,-.outer-wrapper.newtab-experience .ds-card-grid.ds-card-grid-compact-variant.ds-card-grid-border .ds-card:not(.placeholder) .img-wrapper .img img.last-card-message-image {+.outer-wrapper .ds-card-grid.ds-card-grid-hide-background.ds-card-grid-border .ds-card:not(.placeholder) .img-wrapper .img img.last-card-message-image,+.outer-wrapper.newtab-experience .ds-card-grid.ds-card-grid-hide-background.ds-card-grid-border .ds-card:not(.placeholder) .img-wrapper .img img.last-card-message-image { background: transparent; box-shadow: none; object-fit: contain;+}+.outer-wrapper .ds-card-grid.ds-card-grid-hide-background.ds-card-grid-border .ds-card:not(.placeholder) .meta,+.outer-wrapper.newtab-experience .ds-card-grid.ds-card-grid-hide-background.ds-card-grid-border .ds-card:not(.placeholder) .meta {+ padding: 12px 0 0; } .ds-layout .ds-card-grid-load-more-button {
Based on the provided CSS diff, I don't see any security-related changes. The changes appear to be purely stylistic and layout-related, primarily involving class name changes and layout adjustments. Here's the analysis: Vulnerability Existed: no No security vulnerability found [File] browser/components/newtab/css/activity-stream-windows.css The changes involve renaming classes from "ds-card-grid-compact-variant" to "ds-card-grid-four-card-variant" and adding new layout variants ("ds-card-grid-hybrid-layout"). These are styling changes without security implications. The diff shows: 1. Class name changes for styling variants 2. Addition of new layout rules 3. Media query adjustments for responsive design 4. Visual styling updates (paddings, shadows, etc.) None of these changes appear to address security vulnerabilities or introduce new ones. The modifications are focused on the visual presentation and layout of elements in Firefox's new tab page.
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/security/manager/ssl/tests/unit/test_crlite_preexisting.js+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/security/manager/ssl/tests/unit/test_crlite_preexisting.js@@ -123,31 +123,19 @@ Services.prefs.clearUserPref("security.OCSP.require"); Services.prefs.clearUserPref("security.OCSP.enabled");- // If the earliest certificate timestamp is within the merge delay of the- // logs for the filter we have, it won't be looked up, and thus won't be- // revoked.- // The earliest timestamp in this certificate is in August 2020, whereas- // the filter timestamp is in October 2020, so setting the merge delay to- // this large value simluates the situation being tested.- Services.prefs.setIntPref(- "security.pki.crlite_ct_merge_delay_seconds",- 60 * 60 * 24 * 60+ let notCoveredCert = constructCertFromFile(+ "test_crlite_filters/notcovered.pem" );- // Since setting the merge delay parameter this way effectively makes this- // certificate "too new" to be covered by the filter, the implementation- // would fall back to OCSP fetching. Since this would result in a crash and- // test failure, the Ci.nsIX509CertDB.FLAG_LOCAL_ONLY is used. await checkCertErrorGenericAtTime( certdb,- revokedCert,+ notCoveredCert, PRErrorCodeSuccess, certificateUsageSSLServer,- new Date("2020-10-20T00:00:00Z").getTime() / 1000,+ new Date("2022-01-07T00:00:00Z").getTime() / 1000, false,- "us-datarecovery.com",+ "peekaboophonics.com", Ci.nsIX509CertDB.FLAG_LOCAL_ONLY );- Services.prefs.clearUserPref("security.pki.crlite_ct_merge_delay_seconds"); }); function run_test() {@@ -163,6 +151,8 @@ // profile directory. let stashFile = do_get_file("test_crlite_preexisting/crlite.stash"); stashFile.copyTo(securityStateDirectory, "crlite.stash");+ let coverageFile = do_get_file("test_crlite_preexisting/crlite.coverage");+ coverageFile.copyTo(securityStateDirectory, "crlite.coverage"); let certStorageFile = do_get_file("test_crlite_preexisting/data.safe.bin"); certStorageFile.copyTo(securityStateDirectory, "data.safe.bin");
Let me analyze the code diff for security fixes: 1. Vulnerability Existed: not sure [Potential CRLite Coverage Issue] [security/manager/ssl/tests/unit/test_crlite_preexisting.js] [Lines 123-151] [Old Code] // If the earliest certificate timestamp is within the merge delay of the // logs for the filter we have, it won't be looked up, and thus won't be // revoked. // The earliest timestamp in this certificate is in August 2020, whereas // the filter timestamp is in October 2020, so setting the merge delay to // this large value simluates the situation being tested. Services.prefs.setIntPref( "security.pki.crlite_ct_merge_delay_seconds", 60 * 60 * 24 * 60 ); // Since setting the merge delay parameter this way effectively makes this // certificate "too new" to be covered by the filter, the implementation // would fall back to OCSP fetching. Since this would result in a crash and // test failure, the Ci.nsIX509CertDB.FLAG_LOCAL_ONLY is used. await checkCertErrorGenericAtTime( certdb, revokedCert, PRErrorCodeSuccess, certificateUsageSSLServer, new Date("2020-10-20T00:00:00Z").getTime() / 1000, false, "us-datarecovery.com", Ci.nsIX509CertDB.FLAG_LOCAL_ONLY ); Services.prefs.clearUserPref("security.pki.crlite_ct_merge_delay_seconds"); [Fixed Code] let notCoveredCert = constructCertFromFile( "test_crlite_filters/notcovered.pem" ); await checkCertErrorGenericAtTime( certdb, notCoveredCert, PRErrorCodeSuccess, certificateUsageSSLServer, new Date("2022-01-07T00:00:00Z").getTime() / 1000, false, "peekaboophonics.com", Ci.nsIX509CertDB.FLAG_LOCAL_ONLY ); 2. Vulnerability Existed: not sure [CRLite Coverage File Addition] [security/manager/ssl/tests/unit/test_crlite_preexisting.js] [Lines 163-166] [Old Code] let stashFile = do_get_file("test_crlite_preexisting/crlite.stash"); stashFile.copyTo(securityStateDirectory, "crlite.stash"); let certStorageFile = do_get_file("test_crlite_preexisting/data.safe.bin"); certStorageFile.copyTo(securityStateDirectory, "data.safe.bin"); [Fixed Code] let stashFile = do_get_file("test_crlite_preexisting/crlite.stash"); stashFile.copyTo(securityStateDirectory, "crlite.stash"); let coverageFile = do_get_file("test_crlite_preexisting/crlite.coverage"); coverageFile.copyTo(securityStateDirectory, "crlite.coverage"); let certStorageFile = do_get_file("test_crlite_preexisting/data.safe.bin"); certStorageFile.copyTo(securityStateDirectory, "data.safe.bin"); The changes appear to be related to CRLite (Certificate Revocation List Lite) functionality in Firefox. The first change modifies how certificate coverage is tested, replacing a time-based test with a direct test of a certificate marked as "not covered". The second change adds a new coverage file to the test setup. While these appear to be test improvements, I can't be certain if they're fixing actual security vulnerabilities or just improving test coverage.
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.fillStyle.parse.rgb-clamp-2.html+++ /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.fillStyle.parse.rgb-clamp-2.html@@ -17,14 +17,14 @@ }); 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 = '#f00'; ctx.fillStyle = 'rgb(-200%, 200%, -200%)'; ctx.fillRect(0, 0, 100, 50);-_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");+_assertPixel(canvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255"); t.done(); });
Based on the provided code diff, I don't see any security vulnerabilities being fixed. The changes appear to be purely cosmetic/refactoring changes (variable renaming) rather than security-related fixes. Here's the analysis following your requested format: Vulnerability Existed: no [No security vulnerability found] [testing/web-platform/tests/html/canvas/offscreen/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-2.html] [Lines 17-25] [Old Code] 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] 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 only involve: 1. Renaming the variable `offscreenCanvas` to `canvas` 2. Using the new variable name in the `_assertPixel` call No security implications are apparent 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/third_party/rust/futures-io/src/lib.rs+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/third_party/rust/futures-io/src/lib.rs@@ -8,7 +8,6 @@ //! All items of this library are only available when the `std` feature of this //! library is activated, and it is activated by default.-#![cfg_attr(all(feature = "read-initializer", feature = "std"), feature(read_initializer))] #![cfg_attr(not(feature = "std"), no_std)] #![warn(missing_debug_implementations, missing_docs, rust_2018_idioms, unreachable_pub)] // It cannot be included in the published code because this lints have false positives in the minimum required version.@@ -22,9 +21,6 @@ ))] #![cfg_attr(docsrs, feature(doc_cfg))]-#[cfg(all(feature = "read-initializer", not(feature = "unstable")))]-compile_error!("The `read-initializer` feature requires the `unstable` feature as an explicit opt-in to unstable features");- #[cfg(feature = "std")] mod if_std { use std::io;@@ -34,11 +30,6 @@ // Re-export some types from `std::io` so that users don't have to deal // with conflicts when `use`ing `futures::io` and `std::io`.- #[cfg(feature = "read-initializer")]- #[cfg_attr(docsrs, doc(cfg(feature = "read-initializer")))]- #[doc(no_inline)]- #[allow(unreachable_pub)] // https://github.com/rust-lang/rust/issues/57411- pub use io::Initializer; #[allow(unreachable_pub)] // https://github.com/rust-lang/rust/issues/57411 #[doc(no_inline)] pub use io::{Error, ErrorKind, IoSlice, IoSliceMut, Result, SeekFrom};@@ -51,27 +42,6 @@ /// for wakeup and return if data is not yet available, rather than blocking /// the calling thread. pub trait AsyncRead {- /// Determines if this `AsyncRead`er can work with buffers of- /// uninitialized memory.- ///- /// The default implementation returns an initializer which will zero- /// buffers.- ///- /// This method is only available when the `read-initializer` feature of this- /// library is activated.- ///- /// # Safety- ///- /// This method is `unsafe` because an `AsyncRead`er could otherwise- /// return a non-zeroing `Initializer` from another `AsyncRead` type- /// without an `unsafe` block.- #[cfg(feature = "read-initializer")]- #[cfg_attr(docsrs, doc(cfg(feature = "read-initializer")))]- #[inline]- unsafe fn initializer(&self) -> Initializer {- Initializer::zeroing()- }- /// Attempt to read from the `AsyncRead` into `buf`. /// /// On success, returns `Poll::Ready(Ok(num_bytes_read))`.@@ -329,11 +299,6 @@ macro_rules! deref_async_read { () => {- #[cfg(feature = "read-initializer")]- unsafe fn initializer(&self) -> Initializer {- (**self).initializer()- }- fn poll_read( mut self: Pin<&mut Self>, cx: &mut Context<'_>,@@ -365,11 +330,6 @@ P: DerefMut + Unpin, P::Target: AsyncRead, {- #[cfg(feature = "read-initializer")]- unsafe fn initializer(&self) -> Initializer {- (**self).initializer()- }- fn poll_read( self: Pin<&mut Self>, cx: &mut Context<'_>,@@ -389,11 +349,6 @@ macro_rules! delegate_async_read_to_stdio { () => {- #[cfg(feature = "read-initializer")]- unsafe fn initializer(&self) -> Initializer {- io::Read::initializer(self)- }- fn poll_read( mut self: Pin<&mut Self>, _: &mut Context<'_>,
Here's the analysis of the provided code diff for security fixes: 1. Vulnerability Existed: not sure [Potential Removal of Unstable Feature] [third_party/rust/futures-io/src/lib.rs] [Lines 8,22,34-38,51-65,329-333,365-369,389-393] [Old Code] #![cfg_attr(all(feature = "read-initializer", feature = "std"), feature(read_initializer))] #[cfg(all(feature = "read-initializer", not(feature = "unstable")))] compile_error!("The `read-initializer` feature requires the `unstable` feature as an explicit opt-in to unstable features"); [Various implementations of `initializer()` function] [Fixed Code] [All above code removed] Additional Details: The diff shows removal of the `read-initializer` feature and all related code. While this appears to be removing potentially unsafe functionality (as indicated by the `unsafe` keyword in the initializer function), without more context about the specific security implications of this feature, we can't be certain if this was fixing a known vulnerability or just removing unstable functionality. 2. Vulnerability Existed: not sure [Potential Memory Safety Issue] [third_party/rust/futures-io/src/lib.rs] [Lines 51-65] [Old Code] unsafe fn initializer(&self) -> Initializer { Initializer::zeroing() } [Fixed Code] [Removed entirely] Additional Details: The removed function was marked as `unsafe` and dealt with memory initialization, which could potentially relate to memory safety issues. However, without more context about how this function was being used or misused, we can't definitively say if this was fixing a specific vulnerability. The changes appear to be removing unstable and potentially unsafe functionality related to memory initialization, but without specific vulnerability reports or more context about the removed features, we can't be certain about specific security vulnerabilities being fixed. The removal of unsafe code generally improves security, but we can't point to a specific CVE or vulnerability that was addressed.
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/webrender/src/clip.rs+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/gfx/wr/webrender/src/clip.rs@@ -760,7 +760,7 @@ active_clip_node_info: Vec<ClipNodeInfo>, active_local_clip_rect: Option<LayoutRect>,- active_pic_clip_rect: PictureRect,+ active_pic_coverage_rect: PictureRect, // No malloc sizeof since it's not implemented for ops::Range, but these // allocations are tiny anyway.@@ -792,8 +792,8 @@ pub needs_mask: bool, // Combined clip rect in picture space (may // be more conservative that local_clip_rect).- pub pic_clip_rect: PictureRect,- // Space, in which the `pic_clip_rect` is defined.+ pub pic_coverage_rect: PictureRect,+ // Space, in which the `pic_coverage_rect` is defined. pub pic_spatial_node_index: SpatialNodeIndex, }@@ -807,7 +807,7 @@ local_clip_rect: LayoutRect::zero(), has_non_local_clips: false, needs_mask: false,- pic_clip_rect: PictureRect::zero(),+ pic_coverage_rect: PictureRect::zero(), pic_spatial_node_index: SpatialNodeIndex::INVALID, } }@@ -1012,7 +1012,7 @@ mask_tiles: Vec::new(), active_clip_node_info: Vec::new(), active_local_clip_rect: None,- active_pic_clip_rect: PictureRect::max_rect(),+ active_pic_coverage_rect: PictureRect::max_rect(), templates, instances: Vec::with_capacity(stats.instances_capacity), chain_builder_stack: Vec::new(),@@ -1164,7 +1164,7 @@ ) { self.active_clip_node_info.clear(); self.active_local_clip_rect = None;- self.active_pic_clip_rect = PictureRect::max_rect();+ self.active_pic_coverage_rect = PictureRect::max_rect(); let mut local_clip_rect = local_prim_clip_rect;@@ -1177,7 +1177,7 @@ pic_spatial_node_index, &mut local_clip_rect, &mut self.active_clip_node_info,- &mut self.active_pic_clip_rect,+ &mut self.active_pic_coverage_rect, clip_data_store, spatial_tree, ) {@@ -1202,7 +1202,7 @@ self.active_clip_node_info.clear(); self.active_local_clip_rect = Some(prim_clip_chain.local_clip_rect);- self.active_pic_clip_rect = prim_clip_chain.pic_clip_rect;+ self.active_pic_coverage_rect = prim_clip_chain.pic_coverage_rect; let clip_instances = &self .clip_node_instances[prim_clip_chain.clips_range.to_range()];@@ -1230,7 +1230,7 @@ clip_data_store: &ClipDataStore, spatial_tree: &SpatialTree, ) -> Option<PictureRect> {- let mut inner_rect = clip_chain.pic_clip_rect;+ let mut inner_rect = clip_chain.pic_coverage_rect; let clip_instances = &self .clip_node_instances[clip_chain.clips_range.to_range()];@@ -1251,7 +1251,7 @@ ClipItemKind::RoundedRectangle { mode: ClipMode::ClipOut, .. } => { return None; }- // Normal Clip rects are already handled by the clip-chain pic_clip_rect,+ // Normal Clip rects are already handled by the clip-chain pic_coverage_rect, // no need to do anything here ClipItemKind::Rectangle { mode: ClipMode::Clip, .. } => {} ClipItemKind::RoundedRectangle { mode: ClipMode::Clip, rect, radius } => {@@ -1302,12 +1302,12 @@ }; profile_scope!("build_clip_chain_instance"); if is_chased {- println!("\tbuilding clip chain instance with local rect {:?}", local_prim_rect);+ info!("\tbuilding clip chain instance with local rect {:?}", local_prim_rect); } let local_bounding_rect = local_prim_rect.intersection(&local_clip_rect)?;- let mut pic_clip_rect = prim_to_pic_mapper.map(&local_bounding_rect)?;- let world_clip_rect = pic_to_world_mapper.map(&pic_clip_rect)?;+ let mut pic_coverage_rect = prim_to_pic_mapper.map(&local_bounding_rect)?;+ let world_clip_rect = pic_to_world_mapper.map(&pic_coverage_rect)?; // Now, we've collected all the clip nodes that *potentially* affect this // primitive region, and reduced the size of the prim region as much as possible.@@ -1342,8 +1342,8 @@ }; if is_chased {- println!("\t\tclip {:?}", node.item);- println!("\t\tflags {:?}, resulted in {:?}", node_info.conversion.to_flags(), clip_result);+ info!("\t\tclip {:?}", node.item);+ info!("\t\tflags {:?}, resulted in {:?}", node_info.conversion.to_flags(), clip_result); } match clip_result {@@ -1409,15 +1409,15 @@ // reject checks above, so that we don't eliminate masks accidentally (since // we currently only support a local clip rect in the vertex shader). if needs_mask {- pic_clip_rect = pic_clip_rect.intersection(&self.active_pic_clip_rect)?;+ pic_coverage_rect = pic_coverage_rect.intersection(&self.active_pic_coverage_rect)?; } // Return a valid clip chain instance Some(ClipChainInstance { clips_range, has_non_local_clips,- local_clip_rect: local_clip_rect,- pic_clip_rect: pic_clip_rect,+ local_clip_rect,+ pic_coverage_rect, pic_spatial_node_index: prim_to_pic_mapper.ref_spatial_node_index, needs_mask, })@@ -2141,7 +2141,7 @@ pic_spatial_node_index: SpatialNodeIndex, local_clip_rect: &mut LayoutRect, clip_node_info: &mut Vec<ClipNodeInfo>,- current_pic_clip_rect: &mut PictureRect,+ pic_coverage_rect: &mut PictureRect, clip_data_store: &ClipDataStore, spatial_tree: &SpatialTree, ) -> bool {@@ -2199,8 +2199,8 @@ ); if let Some(pic_clip_rect) = mapper.map(&clip_rect) {- *current_pic_clip_rect = pic_clip_rect- .intersection(current_pic_clip_rect)+ *pic_coverage_rect = pic_clip_rect+ .intersection(pic_coverage_rect) .unwrap_or(PictureRect::zero()); } }
Based on the provided code diff, I'll analyze it for potential security vulnerabilities. Vulnerability Existed: no The changes appear to be primarily renaming variables from `pic_clip_rect` to `pic_coverage_rect` and some minor logging changes from `println!` to `info!`. These modifications don't indicate any security fixes but rather code clarity improvements and better naming conventions. The changes include: 1. Renaming struct fields and variables related to clip rectangles to use "coverage" terminology 2. Changing debug print statements to use proper logging 3. Maintaining the same functionality with clearer variable names No security vulnerabilities are apparent in these changes, as they don't modify any security-critical logic or fix any unsafe operations. The changes are purely refactoring for better code clarity and maintainability. If there were any security implications to these changes, they would likely be related to information disclosure through logging, but since the changes actually move from direct printing to proper logging macros (`info!`), this would be an improvement rather than a vulnerability 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.