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/gfx/wr/webrender/src/spatial_tree.rs+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/gfx/wr/webrender/src/spatial_tree.rs@@ -3,14 +3,14 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use api::{ExternalScrollId, PropertyBinding, ReferenceFrameKind, TransformStyle, PropertyBindingId};-use api::{PipelineId, SpatialTreeItemKey};+use api::{APZScrollGeneration, HasScrollLinkedEffect, PipelineId, SampledScrollOffset, SpatialTreeItemKey}; use api::units::*; use euclid::Transform3D; use crate::gpu_types::TransformPalette; use crate::internal_types::{FastHashMap, FastHashSet, PipelineInstanceId}; use crate::print_tree::{PrintableTree, PrintTree, PrintTreePrinter}; use crate::scene::SceneProperties;-use crate::spatial_node::{SpatialNode, SpatialNodeType, StickyFrameInfo, SpatialNodeDescriptor};+use crate::spatial_node::{ReferenceFrameInfo, SpatialNode, SpatialNodeType, StickyFrameInfo, SpatialNodeDescriptor}; use crate::spatial_node::{SpatialNodeUid, ScrollFrameKind, SceneSpatialNode, SpatialNodeInfo, SpatialNodeUidKind}; use std::{ops, u32}; use crate::util::{FastTransform, LayoutToWorldFastTransform, MatrixHelpers, ScaleOffset, scale_factors};@@ -249,6 +249,7 @@ ReferenceFrameKind::Transform { should_snap: true, is_2d_scale_translation: true,+ paired_with_perspective: false, }, LayoutVector2D::zero(), PipelineId::dummy(),@@ -531,6 +532,8 @@ content_size: &LayoutSize, frame_kind: ScrollFrameKind, external_scroll_offset: LayoutVector2D,+ scroll_offset_generation: APZScrollGeneration,+ has_scroll_linked_effect: HasScrollLinkedEffect, uid: SpatialNodeUid, ) -> SpatialNodeIndex { // Scroll frames are only 2d translations - they can't introduce a new static coord system@@ -544,6 +547,8 @@ content_size, frame_kind, external_scroll_offset,+ scroll_offset_generation,+ has_scroll_linked_effect, is_root_coord_system, ); self.add_spatial_node(node, uid)@@ -885,7 +890,10 @@ self.visit_nodes_mut(|_, node| { match node.node_type { SpatialNodeType::ScrollFrame(ref mut info) => {- info.offset = -info.external_scroll_offset;+ info.offsets = vec![SampledScrollOffset{+ offset: -info.external_scroll_offset,+ generation: info.offset_generation,+ }]; } SpatialNodeType::StickyFrame(ref mut info) => { info.current_offset = LayoutVector2D::zero();@@ -1068,16 +1076,16 @@ self.root_reference_frame_index }- pub fn set_scroll_offset(+ pub fn set_scroll_offsets( &mut self, id: ExternalScrollId,- offset: LayoutVector2D,+ offsets: Vec<SampledScrollOffset>, ) -> bool { let mut did_change = false; self.visit_nodes_mut(|_, node| { if node.matches_external_id(id) {- did_change |= node.set_scroll_offset(&offset);+ did_change |= node.set_scroll_offsets(offsets.clone()); } });@@ -1184,12 +1192,16 @@ pt.new_level(format!("StickyFrame")); pt.add_item(format!("sticky info: {:?}", sticky_frame_info)); }- SpatialNodeType::ScrollFrame(scrolling_info) => {+ SpatialNodeType::ScrollFrame(ref scrolling_info) => { pt.new_level(format!("ScrollFrame")); pt.add_item(format!("viewport: {:?}", scrolling_info.viewport_rect)); pt.add_item(format!("scrollable_size: {:?}", scrolling_info.scrollable_size));- pt.add_item(format!("scroll offset: {:?}", scrolling_info.offset));+ pt.add_item(format!("scroll offset: {:?}", scrolling_info.offset())); pt.add_item(format!("external_scroll_offset: {:?}", scrolling_info.external_scroll_offset));+ pt.add_item(format!("offset generation: {:?}", scrolling_info.offset_generation));+ if scrolling_info.has_scroll_linked_effect == HasScrollLinkedEffect::Yes {+ pt.add_item("has scroll-linked effect".to_string());+ } pt.add_item(format!("kind: {:?}", scrolling_info.frame_kind)); } SpatialNodeType::ReferenceFrame(ref info) => {@@ -1218,7 +1230,31 @@ pub fn get_local_visible_face(&self, node_index: SpatialNodeIndex) -> VisibleFace { let node = self.get_spatial_node(node_index); let mut face = VisibleFace::Front;- if let Some(parent_index) = node.parent {+ if let Some(mut parent_index) = node.parent {+ // Check if the parent is perspective. In CSS, a stacking context may+ // have both perspective and a regular transformation. Gecko translates the+ // perspective into a different `nsDisplayPerspective` and `nsDisplayTransform` items.+ // On WebRender side, we end up with 2 different reference frames:+ // one has kind of "transform", and it's parented to another of "perspective":+ // https://searchfox.org/mozilla-central/rev/72c7cef167829b6f1e24cae216fa261934c455fc/layout/generic/nsIFrame.cpp#3716+ if let SpatialNodeType::ReferenceFrame(ReferenceFrameInfo { kind: ReferenceFrameKind::Transform {+ paired_with_perspective: true,+ ..+ }, .. }) = node.node_type {+ let parent = self.get_spatial_node(parent_index);+ match parent.node_type {+ SpatialNodeType::ReferenceFrame(ReferenceFrameInfo {+ kind: ReferenceFrameKind::Perspective { .. },+ ..+ }) => {+ parent_index = parent.parent.unwrap();+ }+ _ => {+ log::error!("Unexpected parent {:?} is not perspective", parent_index);+ }+ }+ }+ self.get_relative_transform_with_face(node_index, parent_index, Some(&mut face)); } face@@ -1234,7 +1270,7 @@ } // If running in Gecko, set RUST_LOG=webrender::spatial_tree=debug // to get this logging to be emitted to stderr/logcat.- println!("{}", std::str::from_utf8(&buf).unwrap_or("(Tree printer emitted non-utf8)"));+ debug!("{}", std::str::from_utf8(&buf).unwrap_or("(Tree printer emitted non-utf8)")); } } }@@ -1339,6 +1375,7 @@ ReferenceFrameKind::Transform { is_2d_scale_translation: false, should_snap: false,+ paired_with_perspective: false, }, origin_in_parent_reference_frame, PipelineId::dummy(),@@ -1633,6 +1670,7 @@ ReferenceFrameKind::Transform { is_2d_scale_translation: true, should_snap: true,+ paired_with_perspective: false, }, LayoutVector2D::new(0.0, 0.0), PipelineId::dummy(),@@ -1647,6 +1685,8 @@ &LayoutSize::new(800.0, 400.0), ScrollFrameKind::Explicit, LayoutVector2D::new(0.0, 0.0),+ APZScrollGeneration::default(),+ HasScrollLinkedEffect::No, SpatialNodeUid::external(SpatialTreeItemKey::new(0, 1), PipelineId::dummy(), pid), );@@ -1666,6 +1706,7 @@ ReferenceFrameKind::Transform { is_2d_scale_translation: true, should_snap: true,+ paired_with_perspective: false, }, LayoutVector2D::new(0.0, 0.0), PipelineId::dummy(),@@ -1680,6 +1721,8 @@ &LayoutSize::new(800.0, 400.0), ScrollFrameKind::Explicit, LayoutVector2D::new(0.0, 0.0),+ APZScrollGeneration::default(),+ HasScrollLinkedEffect::No, SpatialNodeUid::external(SpatialTreeItemKey::new(0, 1), PipelineId::dummy(), pid), );@@ -1691,6 +1734,8 @@ &LayoutSize::new(800.0, 400.0), ScrollFrameKind::Explicit, LayoutVector2D::new(0.0, 0.0),+ APZScrollGeneration::default(),+ HasScrollLinkedEffect::No, SpatialNodeUid::external(SpatialTreeItemKey::new(0, 2), PipelineId::dummy(), pid), );@@ -1710,6 +1755,7 @@ ReferenceFrameKind::Transform { is_2d_scale_translation: true, should_snap: true,+ paired_with_perspective: false, }, LayoutVector2D::new(0.0, 0.0), PipelineId::dummy(),@@ -1724,6 +1770,8 @@ &LayoutSize::new(400.0, 400.0), ScrollFrameKind::Explicit, LayoutVector2D::new(0.0, 0.0),+ APZScrollGeneration::default(),+ HasScrollLinkedEffect::No, SpatialNodeUid::external(SpatialTreeItemKey::new(0, 1), PipelineId::dummy(), pid), );@@ -1735,6 +1783,8 @@ &LayoutSize::new(800.0, 400.0), ScrollFrameKind::Explicit, LayoutVector2D::new(0.0, 0.0),+ APZScrollGeneration::default(),+ HasScrollLinkedEffect::No, SpatialNodeUid::external(SpatialTreeItemKey::new(0, 2), PipelineId::dummy(), pid), );@@ -1754,6 +1804,7 @@ ReferenceFrameKind::Transform { is_2d_scale_translation: true, should_snap: true,+ paired_with_perspective: false, }, LayoutVector2D::new(0.0, 0.0), PipelineId::dummy(),@@ -1768,6 +1819,8 @@ &LayoutSize::new(1000.0, 1000.0), ScrollFrameKind::Explicit, LayoutVector2D::new(0.0, 0.0),+ APZScrollGeneration::default(),+ HasScrollLinkedEffect::No, SpatialNodeUid::external(SpatialTreeItemKey::new(0, 1), PipelineId::dummy(), pid), );@@ -1779,6 +1832,8 @@ &LayoutSize::new(800.0, 400.0), ScrollFrameKind::Explicit, LayoutVector2D::new(0.0, 0.0),+ APZScrollGeneration::default(),+ HasScrollLinkedEffect::No, SpatialNodeUid::external(SpatialTreeItemKey::new(0, 2), PipelineId::dummy(), pid), );@@ -1799,6 +1854,7 @@ ReferenceFrameKind::Transform { is_2d_scale_translation: true, should_snap: true,+ paired_with_perspective: false, }, LayoutVector2D::new(0.0, 0.0), PipelineId::dummy(),@@ -1813,6 +1869,8 @@ &LayoutSize::new(400.0, 400.0), ScrollFrameKind::Explicit, LayoutVector2D::new(0.0, 0.0),+ APZScrollGeneration::default(),+ HasScrollLinkedEffect::No, SpatialNodeUid::external(SpatialTreeItemKey::new(0, 1), PipelineId::dummy(), pid), );@@ -1836,6 +1894,8 @@ &LayoutSize::new(800.0, 400.0), ScrollFrameKind::Explicit, LayoutVector2D::new(0.0, 0.0),+ APZScrollGeneration::default(),+ HasScrollLinkedEffect::No, SpatialNodeUid::external(SpatialTreeItemKey::new(0, 3), PipelineId::dummy(), pid), );@@ -1856,6 +1916,7 @@ ReferenceFrameKind::Transform { is_2d_scale_translation: true, should_snap: true,+ paired_with_perspective: false, }, LayoutVector2D::new(0.0, 0.0), PipelineId::dummy(),@@ -1870,6 +1931,8 @@ &LayoutSize::new(400.0, 400.0), ScrollFrameKind::Explicit, LayoutVector2D::new(0.0, 0.0),+ APZScrollGeneration::default(),+ HasScrollLinkedEffect::No, SpatialNodeUid::external(SpatialTreeItemKey::new(0, 1), PipelineId::dummy(), pid), );@@ -1880,6 +1943,7 @@ ReferenceFrameKind::Transform { is_2d_scale_translation: true, should_snap: false,+ paired_with_perspective: false, }, LayoutVector2D::new(0.0, 0.0), PipelineId::dummy(),@@ -1894,6 +1958,8 @@ &LayoutSize::new(800.0, 400.0), ScrollFrameKind::Explicit, LayoutVector2D::new(0.0, 0.0),+ APZScrollGeneration::default(),+ HasScrollLinkedEffect::No, SpatialNodeUid::external(SpatialTreeItemKey::new(0, 3), PipelineId::dummy(), pid), );
Here's the analysis of the provided code diff for security fixes: 1. Vulnerability Existed: not sure Scroll Offset Generation Tracking [gfx/wr/webrender/src/spatial_tree.rs] [Lines 531-554] Old Code: ```rust external_scroll_offset: LayoutVector2D, ``` Fixed Code: ```rust external_scroll_offset: LayoutVector2D, scroll_offset_generation: APZScrollGeneration, has_scroll_linked_effect: HasScrollLinkedEffect, ``` Additional Details: Added scroll offset generation tracking and scroll-linked effect detection. 2. Vulnerability Existed: not sure Scroll Offset Management [gfx/wr/webrender/src/spatial_tree.rs] [Lines 885-891] Old Code: ```rust info.offset = -info.external_scroll_offset; ``` Fixed Code: ```rust info.offsets = vec![SampledScrollOffset{ offset: -info.external_scroll_offset, generation: info.offset_generation, }]; ``` Additional Details: Changed from single offset to vector of sampled offsets with generation tracking. 3. Vulnerability Existed: not sure Scroll Offset Update API [gfx/wr/webrender/src/spatial_tree.rs] [Lines 1068-1082] Old Code: ```rust pub fn set_scroll_offset( &mut self, id: ExternalScrollId, offset: LayoutVector2D, ) -> bool ``` Fixed Code: ```rust pub fn set_scroll_offsets( &mut self, id: ExternalScrollId, offsets: Vec<SampledScrollOffset>, ) -> bool ``` Additional Details: Changed API to handle multiple scroll offsets with generation tracking. 4. Vulnerability Existed: not sure Perspective Handling [gfx/wr/webrender/src/spatial_tree.rs] [Lines 1230-1256] Old Code: ```rust if let Some(parent_index) = node.parent { ``` Fixed Code: ```rust if let Some(mut parent_index) = node.parent { // Check if the parent is perspective... ``` Additional Details: Added special handling for perspective transforms in parent nodes. 5. Vulnerability Existed: not sure Debug Output Security [gfx/wr/webrender/src/spatial_tree.rs] [Lines 1234-1236] Old Code: ```rust println!("{}", std::str::from_utf8(&buf).unwrap_or("(Tree printer emitted non-utf8)")); ``` Fixed Code: ```rust debug!("{}", std::str::from_utf8(&buf).unwrap_or("(Tree printer emitted non-utf8)")); ``` Additional Details: Changed from println! to debug! macro for security-sensitive output. The changes appear to focus on improving scroll tracking and transform handling, but without more context about the specific security implications, it's difficult to definitively identify vulnerabilities. The modifications suggest enhanced tracking of scroll states and better handling of perspective transforms, which could potentially address race conditions or state tracking issues in the rendering pipeline.
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/.cron.yml+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/.cron.yml@@ -31,6 +31,8 @@ by-project: # Please update the `searchfox-index` job `mozilla-central` `when` # times as well if updating the times here.+ # `l10n-bumper` job should also have enough time to finish before+ # this job runs mozilla-central: [{hour: 10, minute: 0}, {hour: 22, minute: 0}] # No default@@ -279,7 +281,12 @@ - mozilla-central - mozilla-beta when:- - {hour: 18, minute: 45}+ by-project:+ # 3h15m before launch of `nightly-desktop`+ mozilla-central: [{hour: 6, minute: 45}, {hour: 18, minute: 45}]+ # 3h15m before launch of `daily-releases`+ mozilla-beta: [{hour: 18, minute: 45}]+ # No default - name: system-symbols job:
Analyzing the provided code diff for security fixes: 1. Vulnerability Existed: no No specific vulnerability found in the diff. The changes appear to be scheduling adjustments and comments updates in the cron configuration file. 2. Vulnerability Existed: no The changes in the diff are related to: - Adding a comment about `l10n-bumper` job timing - Modifying the scheduling configuration for different projects (`mozilla-central` and `mozilla-beta`) - No security-related changes or vulnerabilities are apparent in these modifications The diff shows only operational changes to job scheduling times and added documentation comments, with no indication of security fixes or vulnerabilities being addressed. The changes seem focused on improving coordination between different jobs rather than fixing security issues.
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/testing/web-platform/tests/html/canvas/offscreen/path-objects/2d.path.moveTo.basic.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.moveTo.basic.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 = '#f00'; ctx.fillRect(0, 0, 100, 50);@@ -25,7 +25,7 @@ ctx.lineTo(100, 50); ctx.fillStyle = '#0f0'; ctx.fill();-_assertPixel(offscreenCanvas, 90,25, 0,255,0,255, "90,25", "0,255,0,255");+_assertPixel(canvas, 90,25, 0,255,0,255, "90,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 or clarity. Here's the analysis following your requested format: Vulnerability Existed: no No security vulnerability found [File] [Lines 13-14, 25] [Old Code] var offscreenCanvas = new OffscreenCanvas(100, 50); var ctx = offscreenCanvas.getContext('2d'); ... _assertPixel(offscreenCanvas, 90,25, 0,255,0,255, "90,25", "0,255,0,255"); [Fixed Code] var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); ... _assertPixel(canvas, 90,25, 0,255,0,255, "90,25", "0,255,0,255"); The changes don't affect any security-related functionality, input validation, or data handling. It's simply a variable renaming with no security implications.
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/devtools/client/debugger/dist/search-worker.js+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/devtools/client/debugger/dist/search-worker.js@@ -96,91 +96,6 @@ /***/ }),-/***/ 562:-/***/ (function(module, exports, __webpack_require__) {--var freeGlobal = __webpack_require__(589);--/** Detect free variable `self`. */-var freeSelf = typeof self == 'object' && self && self.Object === Object && self;--/** Used as a reference to the global object. */-var root = freeGlobal || freeSelf || Function('return this')();--module.exports = root;---/***/ }),--/***/ 563:-/***/ (function(module, exports) {--/**- * Checks if `value` is classified as an `Array` object.- *- * @static- * @memberOf _- * @since 0.1.0- * @category Lang- * @param {*} value The value to check.- * @returns {boolean} Returns `true` if `value` is an array, else `false`.- * @example- *- * _.isArray([1, 2, 3]);- * // => true- *- * _.isArray(document.body.children);- * // => false- *- * _.isArray('abc');- * // => false- *- * _.isArray(_.noop);- * // => false- */-var isArray = Array.isArray;--module.exports = isArray;---/***/ }),--/***/ 565:-/***/ (function(module, exports) {--/**- * Checks if `value` is object-like. A value is object-like if it's not `null`- * and has a `typeof` result of "object".- *- * @static- * @memberOf _- * @since 4.0.0- * @category Lang- * @param {*} value The value to check.- * @returns {boolean} Returns `true` if `value` is object-like, else `false`.- * @example- *- * _.isObjectLike({});- * // => true- *- * _.isObjectLike([1, 2, 3]);- * // => true- *- * _.isObjectLike(_.noop);- * // => false- *- * _.isObjectLike(null);- * // => false- */-function isObjectLike(value) {- return value != null && typeof value == 'object';-}--module.exports = isObjectLike;---/***/ }),- /***/ 567: /***/ (function(module, exports) {@@ -384,165 +299,6 @@ /***/ }),-/***/ 569:-/***/ (function(module, exports, __webpack_require__) {--var Symbol = __webpack_require__(570),- getRawTag = __webpack_require__(615),- objectToString = __webpack_require__(616);--/** `Object#toString` result references. */-var nullTag = '[object Null]',- undefinedTag = '[object Undefined]';--/** Built-in value references. */-var symToStringTag = Symbol ? Symbol.toStringTag : undefined;--/**- * The base implementation of `getTag` without fallbacks for buggy environments.- *- * @private- * @param {*} value The value to query.- * @returns {string} Returns the `toStringTag`.- */-function baseGetTag(value) {- if (value == null) {- return value === undefined ? undefinedTag : nullTag;- }- return (symToStringTag && symToStringTag in Object(value))- ? getRawTag(value)- : objectToString(value);-}--module.exports = baseGetTag;---/***/ }),--/***/ 570:-/***/ (function(module, exports, __webpack_require__) {--var root = __webpack_require__(562);--/** Built-in value references. */-var Symbol = root.Symbol;--module.exports = Symbol;---/***/ }),--/***/ 577:-/***/ (function(module, exports, __webpack_require__) {--var baseGetTag = __webpack_require__(569),- isObjectLike = __webpack_require__(565);--/** `Object#toString` result references. */-var symbolTag = '[object Symbol]';--/**- * Checks if `value` is classified as a `Symbol` primitive or object.- *- * @static- * @memberOf _- * @since 4.0.0- * @category Lang- * @param {*} value The value to check.- * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.- * @example- *- * _.isSymbol(Symbol.iterator);- * // => true- *- * _.isSymbol('abc');- * // => false- */-function isSymbol(value) {- return typeof value == 'symbol' ||- (isObjectLike(value) && baseGetTag(value) == symbolTag);-}--module.exports = isSymbol;---/***/ }),--/***/ 589:-/***/ (function(module, exports, __webpack_require__) {--/* WEBPACK VAR INJECTION */(function(global) {/** Detect free variable `global` from Node.js. */-var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;--module.exports = freeGlobal;--/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(590)))--/***/ }),--/***/ 590:-/***/ (function(module, exports) {--var g;--// This works in non-strict mode-g = (function() {- return this;-})();--try {- // This works if eval is allowed (see CSP)- g = g || Function("return this")() || (1,eval)("this");-} catch(e) {- // This works if the window reference is available- if(typeof window === "object")- g = window;-}--// g can still be undefined, but nothing to do about it...-// We return undefined, instead of nothing here, so it's-// easier to handle this case. if(!global) { ...}--module.exports = g;---/***/ }),--/***/ 605:-/***/ (function(module, exports, __webpack_require__) {--var baseToString = __webpack_require__(639);--/**- * Converts `value` to a string. An empty string is returned for `null`- * and `undefined` values. The sign of `-0` is preserved.- *- * @static- * @memberOf _- * @since 4.0.0- * @category Lang- * @param {*} value The value to convert.- * @returns {string} Returns the converted string.- * @example- *- * _.toString(null);- * // => ''- *- * _.toString(-0);- * // => '-0'- *- * _.toString([1, 2, 3]);- * // => '1,2,3'- */-function toString(value) {- return value == null ? '' : baseToString(value);-}--module.exports = toString;---/***/ }),- /***/ 607: /***/ (function(module, exports) {@@ -734,160 +490,6 @@ /***/ }),-/***/ 615:-/***/ (function(module, exports, __webpack_require__) {--var Symbol = __webpack_require__(570);--/** Used for built-in method references. */-var objectProto = Object.prototype;--/** Used to check objects for own properties. */-var hasOwnProperty = objectProto.hasOwnProperty;--/**- * Used to resolve the- * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)- * of values.- */-var nativeObjectToString = objectProto.toString;--/** Built-in value references. */-var symToStringTag = Symbol ? Symbol.toStringTag : undefined;--/**- * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.- *- * @private- * @param {*} value The value to query.- * @returns {string} Returns the raw `toStringTag`.- */-function getRawTag(value) {- var isOwn = hasOwnProperty.call(value, symToStringTag),- tag = value[symToStringTag];-- try {- value[symToStringTag] = undefined;- var unmasked = true;- } catch (e) {}-- var result = nativeObjectToString.call(value);- if (unmasked) {- if (isOwn) {- value[symToStringTag] = tag;- } else {- delete value[symToStringTag];- }- }- return result;-}--module.exports = getRawTag;---/***/ }),--/***/ 616:-/***/ (function(module, exports) {--/** Used for built-in method references. */-var objectProto = Object.prototype;--/**- * Used to resolve the- * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)- * of values.- */-var nativeObjectToString = objectProto.toString;--/**- * Converts `value` to a string using `Object.prototype.toString`.- *- * @private- * @param {*} value The value to convert.- * @returns {string} Returns the converted string.- */-function objectToString(value) {- return nativeObjectToString.call(value);-}--module.exports = objectToString;---/***/ }),--/***/ 639:-/***/ (function(module, exports, __webpack_require__) {--var Symbol = __webpack_require__(570),- arrayMap = __webpack_require__(640),- isArray = __webpack_require__(563),- isSymbol = __webpack_require__(577);--/** Used as references for various `Number` constants. */-var INFINITY = 1 / 0;--/** Used to convert symbols to primitives and strings. */-var symbolProto = Symbol ? Symbol.prototype : undefined,- symbolToString = symbolProto ? symbolProto.toString : undefined;--/**- * The base implementation of `_.toString` which doesn't convert nullish- * values to empty strings.- *- * @private- * @param {*} value The value to process.- * @returns {string} Returns the string.- */-function baseToString(value) {- // Exit early for strings to avoid a performance hit in some environments.- if (typeof value == 'string') {- return value;- }- if (isArray(value)) {- // Recursively convert values (susceptible to call stack limits).- return arrayMap(value, baseToString) + '';- }- if (isSymbol(value)) {- return symbolToString ? symbolToString.call(value) : '';- }- var result = (value + '');- return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;-}--module.exports = baseToString;---/***/ }),--/***/ 640:-/***/ (function(module, exports) {--/**- * A specialized version of `_.map` for arrays without support for iteratee- * shorthands.- *- * @private- * @param {Array} [array] The array to iterate over.- * @param {Function} iteratee The function invoked per iteration.- * @returns {Array} Returns the new mapped array.- */-function arrayMap(array, iteratee) {- var index = -1,- length = array == null ? 0 : array.length,- result = Array(length);-- while (++index < length) {- result[index] = iteratee(array[index], index, array);- }- return result;-}--module.exports = arrayMap;---/***/ }),- /***/ 701: /***/ (function(module, exports, __webpack_require__) {@@ -1018,20 +620,21 @@ }); exports.default = buildQuery;-var _escapeRegExp = _interopRequireDefault(__webpack_require__(908));--function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }- /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at <http://mozilla.org/MPL/2.0/>. */-+function escapeRegExp(str) {+ const reRegExpChar = /[\\^$.*+?()[\]{}|]/g;+ return str.replace(reRegExpChar, "\\$&");+} /** * Ignore doing outline matches for less than 3 whitespaces * * @memberof utils/source-search * @static */++ function ignoreWhiteSpace(str) { return /^\s{0,2}$/.test(str) ? "(?!\\s*.*)" : str; }@@ -1072,16 +675,20 @@ return new RegExp(originalQuery); }- let query = originalQuery;+ let query = originalQuery; // If we don't want to do a regexMatch, we need to escape all regex related characters+ // so they would actually match.++ if (!regexMatch) {+ query = escapeRegExp(query);+ } // ignoreWhiteSpace might return a negative lookbehind, and in such case, we want it+ // to be consumed as a RegExp part by the callsite, so this needs to be called after+ // the regexp is escaped.+ if (ignoreSpaces) { query = ignoreWhiteSpace(query); }- if (!regexMatch) {- query = (0, _escapeRegExp.default)(query);- }- query = wholeMatch(query, wholeWord); const flags = buildFlags(caseSensitive, isGlobal);@@ -1091,45 +698,6 @@ return new RegExp(query); }--/***/ }),--/***/ 908:-/***/ (function(module, exports, __webpack_require__) {--var toString = __webpack_require__(605);--/**- * Used to match `RegExp`- * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).- */-var reRegExpChar = /[\\^$.*+?()[\]{}|]/g,- reHasRegExpChar = RegExp(reRegExpChar.source);--/**- * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+",- * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`.- *- * @static- * @memberOf _- * @since 3.0.0- * @category String- * @param {string} [string=''] The string to escape.- * @returns {string} Returns the escaped string.- * @example- *- * _.escapeRegExp('[lodash](https://lodash.com/)');- * // => '\[lodash\]\(https://lodash\.com/\)'- */-function escapeRegExp(string) {- string = toString(string);- return (string && reHasRegExpChar.test(string))- ? string.replace(reRegExpChar, '\\$&')- : string;-}--module.exports = escapeRegExp;- /***/ }),
After analyzing the provided code diff, I don't find any clear security vulnerabilities that were fixed. The changes appear to be primarily code removals and refactoring rather than security fixes. Here's my analysis: 1. Vulnerability Existed: no No specific vulnerability found in the removed code blocks. The changes appear to be cleanup/refactoring of utility functions. 2. Vulnerability Existed: no The main functional change in the search functionality (buildQuery function) was a refactor to inline the regex escaping rather than using a separate utility module, but this doesn't appear to be security-related. The diff shows: 1. Removal of several utility functions (isArray, isObjectLike, baseGetTag, isSymbol, etc.) 2. Removal of global variable detection code 3. Removal of string conversion utilities 4. Refactoring of the regex building logic to inline the escaping function None of these changes appear to be addressing security vulnerabilities - they seem to be code cleanup and optimization changes. The regex building changes maintain equivalent functionality but with simpler 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/third_party/rust/blake2b_simd/src/portable.rs+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/third_party/rust/blake2b_simd/src/portable.rs@@ -23,7 +23,9 @@ v[b] = (v[b] ^ v[c]).rotate_right(63); }-#[inline(always)]+// This is too much inlining for some small chips like ARM Cortex-M0, so the+// uninline_portable feature is provided to disable it.+#[cfg_attr(not(feature = "uninline_portable"), inline(always))] fn round(r: usize, m: &[Word; 16], v: &mut [Word; 16]) { // Select the message schedule based on the round. let s = SIGMA[r];
Analysis of the provided code diff: 1. Vulnerability Existed: not sure [Potential Performance/Code Size Issue] [third_party/rust/blake2b_simd/src/portable.rs] [Lines 23-26] Old Code: ```rust #[inline(always)] fn round(r: usize, m: &[Word; 16], v: &mut [Word; 16]) { ``` Fixed Code: ```rust // This is too much inlining for some small chips like ARM Cortex-M0, so the // uninline_portable feature is provided to disable it. #[cfg_attr(not(feature = "uninline_portable"), inline(always))] fn round(r: usize, m: &[Word; 16], v: &mut [Word; 16]) { ``` Additional Details: The change modifies the inlining behavior for the `round` function, making it conditional based on a feature flag. While this isn't a security vulnerability per se, it could be related to performance optimization or preventing potential issues on resource-constrained devices like ARM Cortex-M0. The comment suggests this was changed to address code size/performance concerns on small chips. No clear security vulnerabilities were identified in this diff. The change appears to be a performance optimization 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/netwerk/test/unit/head_http3.js+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/netwerk/test/unit/head_http3.js@@ -16,7 +16,7 @@ let h3Route = "foo.example.com:" + h3Port; do_get_profile();- Services.prefs.setBoolPref("network.http.http3.enabled", true);+ Services.prefs.setBoolPref("network.http.http3.enable", true); Services.prefs.setCharPref("network.dns.localDomains", "foo.example.com"); Services.prefs.setBoolPref("network.dns.disableIPv6", true); Services.prefs.setCharPref(@@ -97,7 +97,7 @@ } function http3_clear_prefs() {- Services.prefs.clearUserPref("network.http.http3.enabled");+ Services.prefs.clearUserPref("network.http.http3.enable"); Services.prefs.clearUserPref("network.dns.localDomains"); Services.prefs.clearUserPref("network.dns.disableIPv6"); Services.prefs.clearUserPref(
Here's the analysis of the provided code diff: 1. Vulnerability Existed: not sure [Preference Naming Inconsistency] [netwerk/test/unit/head_http3.js] [Lines 16, 97] [Old Code] `Services.prefs.setBoolPref("network.http.http3.enabled", true);` `Services.prefs.clearUserPref("network.http.http3.enabled");` [Fixed Code] `Services.prefs.setBoolPref("network.http.http3.enable", true);` `Services.prefs.clearUserPref("network.http.http3.enable");` Additional Details: The change appears to be correcting a preference name from "enabled" to "enable". While this doesn't appear to be a direct security vulnerability, inconsistent preference naming could potentially lead to configuration issues or unexpected behavior. The change suggests there was an inconsistency between the preference name being set and cleared versus what was actually being used elsewhere in the codebase. No other vulnerabilities were identified in the provided diff content. The rest of the changes appear to be maintaining consistency with this preference name change.
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/dom/serviceworkers/ServiceWorkerEvents.cpp+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/dom/serviceworkers/ServiceWorkerEvents.cpp@@ -432,9 +432,11 @@ mRequestWasHandled(false) { }- void ResolvedCallback(JSContext* aCx, JS::Handle<JS::Value> aValue) override;-- void RejectedCallback(JSContext* aCx, JS::Handle<JS::Value> aValue) override;+ void ResolvedCallback(JSContext* aCx, JS::Handle<JS::Value> aValue,+ ErrorResult& aRv) override;++ void RejectedCallback(JSContext* aCx, JS::Handle<JS::Value> aValue,+ ErrorResult& aRv) override; void CancelRequest(nsresult aStatus);@@ -561,7 +563,8 @@ NS_IMPL_ISUPPORTS0(RespondWithHandler) void RespondWithHandler::ResolvedCallback(JSContext* aCx,- JS::Handle<JS::Value> aValue) {+ JS::Handle<JS::Value> aValue,+ ErrorResult& aRv) { AutoCancel autoCancel(this, mRequestURL); if (!aValue.isObject()) {@@ -735,7 +738,8 @@ } void RespondWithHandler::RejectedCallback(JSContext* aCx,- JS::Handle<JS::Value> aValue) {+ JS::Handle<JS::Value> aValue,+ ErrorResult& aRv) { nsCString sourceSpec = mRespondWithScriptSpec; uint32_t line = mRespondWithLineNumber; uint32_t column = mRespondWithColumnNumber;@@ -879,11 +883,13 @@ nsJSUtils::GetCallingLocation(aCx, mSourceSpec, &mLine, &mColumn); }- void ResolvedCallback(JSContext* aCx, JS::Handle<JS::Value> aValue) override {+ void ResolvedCallback(JSContext* aCx, JS::Handle<JS::Value> aValu,+ ErrorResult& aRve) override { // do nothing, we are only here to report errors }- void RejectedCallback(JSContext* aCx, JS::Handle<JS::Value> aValue) override {+ void RejectedCallback(JSContext* aCx, JS::Handle<JS::Value> aValue,+ ErrorResult& aRv) override { mWorkerPrivate->AssertIsOnWorkerThread(); nsString spec;@@ -963,7 +969,8 @@ NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(FetchEvent) NS_INTERFACE_MAP_END_INHERITING(ExtendableEvent)-NS_IMPL_CYCLE_COLLECTION_INHERITED(FetchEvent, ExtendableEvent, mRequest)+NS_IMPL_CYCLE_COLLECTION_INHERITED(FetchEvent, ExtendableEvent, mRequest,+ mHandled, mPreloadResponse) ExtendableEvent::ExtendableEvent(EventTarget* aOwner) : Event(aOwner, nullptr, nullptr) {}
Analyzing the provided code diff for security fixes: 1. Vulnerability Existed: not sure [Potential Error Handling Improvement] [dom/serviceworkers/ServiceWorkerEvents.cpp] [Lines 432-435, 561-564, 735-739, 879-884] [Old Code] void ResolvedCallback(JSContext* aCx, JS::Handle<JS::Value> aValue) override; void RejectedCallback(JSContext* aCx, JS::Handle<JS::Value> aValue) override; [Fixed Code] void ResolvedCallback(JSContext* aCx, JS::Handle<JS::Value> aValue, ErrorResult& aRv) override; void RejectedCallback(JSContext* aCx, JS::Handle<JS::Value> aValue, ErrorResult& aRv) override; Additional Details: The change adds ErrorResult parameters to callback functions, potentially improving error handling but no specific vulnerability is addressed. 2. Vulnerability Existed: not sure [Potential Memory Management Improvement] [dom/serviceworkers/ServiceWorkerEvents.cpp] [Lines 963-964] [Old Code] NS_IMPL_CYCLE_COLLECTION_INHERITED(FetchEvent, ExtendableEvent, mRequest) [Fixed Code] NS_IMPL_CYCLE_COLLECTION_INHERITED(FetchEvent, ExtendableEvent, mRequest, mHandled, mPreloadResponse) Additional Details: The change adds more members to cycle collection, potentially preventing memory leaks but no specific vulnerability is identified. No clear security vulnerabilities were identified in this diff. The changes appear to be improvements in error handling and memory management rather than fixes for specific security issues.
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/devtools/client/shared/components/reps/reps.css+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/devtools/client/shared/components/reps/reps.css@@ -37,6 +37,10 @@ white-space: pre-wrap; }+.objectBox * {+ unicode-bidi: isolate;+}+ .objectBox-number, .objectBox-styleRule, .objectBox-element,
Based on the provided CSS diff, I'll analyze it for potential security vulnerabilities: Vulnerability Existed: not sure [Potential Unicode Bidirectional Text Override Vulnerability] [devtools/client/shared/components/reps/reps.css] [Lines added] [Old Code: No equivalent] [Fixed Code: .objectBox * { unicode-bidi: isolate; }] Additional Details: The added CSS rule sets `unicode-bidi: isolate` for all elements within `.objectBox`. This appears to be a defensive measure against potential Unicode bidirectional text manipulation attacks (BIDI attacks), which could be used for visual spoofing or other text manipulation attacks. However, without more context about the application's functionality and previous security issues, I can't be certain if this was fixing an actual vulnerability or just being proactive. The change aligns with security best practices for handling bidirectional text.
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/devtools/client/fronts/watcher.js+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/devtools/client/fronts/watcher.js@@ -98,6 +98,15 @@ } /**+ * Memoized getter for the "blackboxing" actor+ */+ async getBlackboxingActor() {+ if (!this._blackboxingActor) {+ this._blackboxingActor = await super.getBlackboxingActor();+ }+ return this._blackboxingActor;+ }+ /** * Memoized getter for the "breakpoint-list" actor */ async getBreakpointListActor() {
Based on the provided code diff, here's the analysis: Vulnerability Existed: not sure [Potential Missing Access Control] [devtools/client/fronts/watcher.js] [Lines 98-106] [Old Code] (No previous code for getBlackboxingActor) [Fixed Code] async getBlackboxingActor() { if (!this._blackboxingActor) { this._blackboxingActor = await super.getBlackboxingActor(); } return this._blackboxingActor; } Additional Details: - The diff shows the addition of a new method `getBlackboxingActor()` which appears to be a memoization pattern for an actor related to blackboxing functionality. - Without seeing the implementation of `super.getBlackboxingActor()` or the broader context, it's difficult to assess if there was a security vulnerability being fixed. - The change could potentially be related to access control (ensuring proper actor initialization) or performance optimization (memoization), but there's no clear evidence of a security fix in this specific diff. - The pattern is similar to other memoized getters in the file (like `getBreakpointListActor` shown in the context), suggesting this might be part of a consistent implementation approach rather than a security fix.
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/dom/system/tests/ioutils/test_ioutils_stat_set_modification_time.html+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/dom/system/tests/ioutils/test_ioutils_stat_set_modification_time.html@@ -19,9 +19,7 @@ add_task(async function test_stat() { info("Test attempt to stat a regular empty file");- const tmpDir = await PathUtils.getTempDir();-- const emptyFileName = PathUtils.join(tmpDir, "test_stat_empty.tmp");+ const emptyFileName = PathUtils.join(PathUtils.tempDir, "test_stat_empty.tmp"); await createFile(emptyFileName); const emptyFileInfo = await IOUtils.stat(emptyFileName);@@ -35,7 +33,7 @@ ); info("Test attempt to stat a regular binary file");- const tempFileName = PathUtils.join(tmpDir, "test_stat_binary.tmp");+ const tempFileName = PathUtils.join(PathUtils.tempDir, "test_stat_binary.tmp"); const bytes = Uint8Array.of(...new Array(50).keys()); await createFile(tempFileName, bytes);@@ -50,7 +48,7 @@ ); info("Test attempt to stat a directory");- const tempDirName = PathUtils.join(tmpDir, "test_stat_dir.tmp.d");+ const tempDirName = PathUtils.join(PathUtils.tempDir, "test_stat_dir.tmp.d"); await IOUtils.makeDirectory(tempDirName); const dirInfo = await IOUtils.stat(tempDirName);@@ -69,9 +67,7 @@ add_task(async function test_stat_failures() { info("Test attempt to stat a non-existing file");- const tmpDir = await PathUtils.getTempDir();-- const notExistsFile = PathUtils.join(tmpDir, "test_stat_not_exists.tmp");+ const notExistsFile = PathUtils.join(PathUtils.tempDir, "test_stat_not_exists.tmp"); await Assert.rejects( IOUtils.stat(notExistsFile),@@ -81,41 +77,56 @@ }); add_task(async function test_setModificationTime_and_stat() {- info("Test attempt to setModificationTime a file");-- const tmpDir = await PathUtils.getTempDir();-- const tmpFileName = PathUtils.join(tmpDir, "test_setModificationTime_and_stat.tmp");- await createFile(tmpFileName);-- const oldFileInfo = await IOUtils.stat(tmpFileName);- await sleep(500);-- // Now update the time stamp.- const stamp = await IOUtils.setModificationTime(tmpFileName);- const newFileInfo = await IOUtils.stat(tmpFileName);-- ok(- newFileInfo.lastModified > oldFileInfo.lastModified,- "IOUtils::setModificationTime can update the lastModified time stamp on the file system"- );- is(- stamp,- newFileInfo.lastModified,- "IOUtils::setModificationTime returns the updated time stamp."- );-- info("Test attempt to setModificationTime a directory");- const tmpDirName = PathUtils.join(tmpDir, "test_setModificationTime_and_stat.tmp.d");- await createDir(tmpDirName);+ const tmpFileName = PathUtils.join(PathUtils.tempDir, "test_setModificationTime_and_stat.tmp");+ {+ info("Test attempt to setModificationTime a file");+ await createFile(tmpFileName);++ const oldFileInfo = await IOUtils.stat(tmpFileName);+ await sleep(500);++ // Now update the time stamp.+ const stamp = await IOUtils.setModificationTime(tmpFileName);+ const newFileInfo = await IOUtils.stat(tmpFileName);++ ok(+ newFileInfo.lastModified > oldFileInfo.lastModified,+ "IOUtils::setModificationTime can update the lastModified time stamp on the file system"+ );+ is(+ stamp,+ newFileInfo.lastModified,+ "IOUtils::setModificationTime returns the updated time stamp."+ );+ }++ const tmpDirName = PathUtils.join(PathUtils.tempDir, "test_setModificationTime_and_stat.tmp.d");+ {+ info("Test attempt to setModificationTime a directory");+ await createDir(tmpDirName);++ const oldFileInfo = await IOUtils.stat(tmpDirName);+ await sleep(500);++ const stamp = await IOUtils.setModificationTime(tmpDirName);+ const newFileInfo = await IOUtils.stat(tmpDirName);++ ok(+ newFileInfo.lastModified > oldFileInfo.lastModified,+ "IOUtils::setModificationTime can update the lastModified time stamp on a directory"+ );+ is(+ stamp,+ newFileInfo.lastModified,+ "IOUtils::setModificationTime returns the updated time stamp on a directory"+ );+ } await cleanup(tmpFileName, tmpDirName); }); add_task(async function test_setModificationTime_custom_mod_time() {- const tmpDir = await PathUtils.getTempDir();-- const tempFileName = PathUtils.join(tmpDir, "test_setModificationTime_custom_mod_time.tmp");+ const tempFileName = PathUtils.join(PathUtils.tempDir, "test_setModificationTime_custom_mod_time.tmp"); await createFile(tempFileName); const originalInfo = await IOUtils.stat(tempFileName); const now = originalInfo.lastModified;@@ -145,9 +156,7 @@ add_task(async function test_stat_btime() { if (["Darwin", "WINNT"].includes(Services.appinfo.OS)) {- const tmpDir = await PathUtils.getTempDir();-- const tempFileName = PathUtils.join(tmpDir, "test_stat_btime.tmp");+ const tempFileName = PathUtils.join(PathUtils.tempDir, "test_stat_btime.tmp"); await createFile(tempFileName); const originalInfo = await IOUtils.stat(tempFileName);@@ -171,8 +180,7 @@ add_task(async function test_setModificationTime_failures() { info("Test attempt to setModificationTime a non-existing file");- const tmpDir = await PathUtils.getTempDir();- const notExistsFile = PathUtils.join(tmpDir, "test_setModificationTime_not_exists.tmp");+ const notExistsFile = PathUtils.join(PathUtils.tempDir, "test_setModificationTime_not_exists.tmp"); await Assert.rejects( IOUtils.setModificationTime(notExistsFile),@@ -181,7 +189,7 @@ ); info("Test attempt to set modification time to Epoch");- const tempFileName = PathUtils.join(tmpDir, "test_setModificationTime_epoch.tmp");+ const tempFileName = PathUtils.join(PathUtils.tempDir, "test_setModificationTime_epoch.tmp"); await createFile(tempFileName); await Assert.rejects(
Looking at the diff, this appears to be a test file modification rather than a security fix. The main changes are: 1. Replacing `await PathUtils.getTempDir()` with direct `PathUtils.tempDir` usage 2. Some code reorganization in the `test_setModificationTime_and_stat` task Here's the analysis: Vulnerability Existed: no No security vulnerability found [File] [Lines 19-189] [Old Code: Various calls to await PathUtils.getTempDir()] [Fixed Code: Using PathUtils.tempDir directly] The changes appear to be: 1. Performance optimization (removing async calls for temp dir) 2. Code style improvements (better scoping with blocks) 3. No security-related changes were made No actual security vulnerabilities were fixed in this diff - it's primarily test code cleanup and optimization. The functionality remains the same, just implemented more efficiently.
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/layout/base/PresShell.cpp+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/layout/base/PresShell.cpp@@ -664,7 +664,7 @@ const VerifyReflowFlagData* flag = gFlags; const VerifyReflowFlagData* limit = gFlags + NUM_VERIFY_REFLOW_FLAGS; while (flag < limit) {- if (PL_strcasecmp(flag->name, flags) == 0) {+ if (nsCRT::strcasecmp(flag->name, flags) == 0) { gVerifyReflowFlags |= flag->bit; found = true; break;@@ -1242,7 +1242,6 @@ Telemetry::Accumulate(Telemetry::WEBFONT_PER_PAGE, 0); Telemetry::Accumulate(Telemetry::WEBFONT_SIZE_PER_PAGE, 0); }- mPresContext->CancelManagedPostRefreshObservers(); } #ifdef MOZ_REFLOW_PERF@@ -9926,7 +9925,7 @@ if (!nsCRT::strcmp(aTopic, "internal-look-and-feel-changed")) { // See how LookAndFeel::NotifyChangedAllWindows encodes this. auto kind = widget::ThemeChangeKind(aData[0]);- ThemeChanged(kind);+ mPresContext->ThemeChanged(kind); return NS_OK; }
Here's the security analysis following your requested format: 1. Vulnerability Existed: not sure [Potential Memory Safety Issue] [layout/base/PresShell.cpp] [Lines 664] [Old Code] if (PL_strcasecmp(flag->name, flags) == 0) { [Fixed Code] if (nsCRT::strcasecmp(flag->name, flags) == 0) { Additional Details: The change from PL_strcasecmp to nsCRT::strcasecmp might indicate a move to a more secure string comparison function, but without knowing the implementation details of both functions, we can't be certain if this fixes a specific vulnerability. 2. Vulnerability Existed: not sure [Potential Resource Management Issue] [layout/base/PresShell.cpp] [Lines 1242] [Old Code] mPresContext->CancelManagedPostRefreshObservers(); [Fixed Code] (line removed) Additional Details: The removal of this call might relate to resource management or potential memory leaks, but without more context about the purpose of CancelManagedPostRefreshObservers(), we can't determine if this fixes a specific vulnerability. 3. Vulnerability Existed: not sure [Potential Theme Change Handling Issue] [layout/base/PresShell.cpp] [Lines 9926] [Old Code] ThemeChanged(kind); [Fixed Code] mPresContext->ThemeChanged(kind); Additional Details: The change in how theme changes are handled might relate to security context issues, but without more information about the ThemeChanged methods in both classes, we can't be certain if this fixes a specific vulnerability. Note: None of these changes clearly indicate specific known vulnerabilities (like buffer overflows, XSS, etc.), but they appear to be defensive programming changes that might improve security or reliability. The most significant change is the string comparison function replacement, which could potentially address memory safety issues if PL_strcasecmp had known 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/jpeg-xl/lib/jxl/base/data_parallel.h+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/third_party/jpeg-xl/lib/jxl/base/data_parallel.h@@ -15,16 +15,15 @@ #include "jxl/parallel_runner.h" #include "lib/jxl/base/bits.h" #include "lib/jxl/base/status.h"+#if JXL_COMPILER_MSVC+// suppress warnings about the const & applied to function types+#pragma warning(disable : 4180)+#endif namespace jxl { class ThreadPool { public:- // Use this type as an InitFunc to skip the initialization step in Run().- // When this is used the return value of Run() is always true and does not- // need to be checked.- struct SkipInit {};- ThreadPool(JxlParallelRunner runner, void* runner_opaque) : runner_(runner ? runner : &ThreadPool::SequentialRunnerStatic), runner_opaque_(runner ? runner_opaque : static_cast<void*>(this)) {}@@ -47,21 +46,16 @@ if (begin == end) return true; RunCallState<InitFunc, DataFunc> call_state(init_func, data_func); // The runner_ uses the C convention and returns 0 in case of error, so we- // convert it to an Status.+ // convert it to a Status. return (*runner_)(runner_opaque_, static_cast<void*>(&call_state), &call_state.CallInitFunc, &call_state.CallDataFunc, begin, end) == 0; }- // Specialization that returns bool when SkipInit is used.- template <class DataFunc>- bool Run(uint32_t begin, uint32_t end, const SkipInit /* tag */,- const DataFunc& data_func, const char* caller = "") {- return Run(begin, end, ReturnTrueInit, data_func, caller);- }+ // Use this as init_func when no initialization is needed.+ static Status NoInit(size_t num_threads) { return true; } private:- static Status ReturnTrueInit(size_t num_threads) { return true; } // class holding the state of a Run() call to pass to the runner_ as an // opaque_jpegxl pointer.@@ -104,21 +98,21 @@ void* const runner_opaque_; };-// TODO(deymo): Convert the return value to a Status when not using SkipInit. template <class InitFunc, class DataFunc>-bool RunOnPool(ThreadPool* pool, const uint32_t begin, const uint32_t end,- const InitFunc& init_func, const DataFunc& data_func,- const char* caller) {- Status ret = true;+Status RunOnPool(ThreadPool* pool, const uint32_t begin, const uint32_t end,+ const InitFunc& init_func, const DataFunc& data_func,+ const char* caller) { if (pool == nullptr) { ThreadPool default_pool(nullptr, nullptr);- ret = default_pool.Run(begin, end, init_func, data_func, caller);+ return default_pool.Run(begin, end, init_func, data_func, caller); } else {- ret = pool->Run(begin, end, init_func, data_func, caller);+ return pool->Run(begin, end, init_func, data_func, caller); }- return ret; } } // namespace jxl+#if JXL_COMPILER_MSVC+#pragma warning(default : 4180)+#endif #endif // LIB_JXL_BASE_DATA_PARALLEL_H_
Let me analyze the code diff for potential security vulnerabilities: 1. Vulnerability Existed: no No specific vulnerability was fixed. The changes are primarily code improvements and cleanup: - Removed the `SkipInit` struct and related specialization - Renamed `ReturnTrueInit` to `NoInit` for better clarity - Changed `RunOnPool` return type from `bool` to `Status` for consistency - Added MSVC warning suppression pragmas for cleaner compilation 2. Vulnerability Existed: not sure Potential Code Improvement [File] third_party/jpeg-xl/lib/jxl/base/data_parallel.h [Lines 47-50] Old Code: // The runner_ uses the C convention and returns 0 in case of error, so we // convert it to an Status. Fixed Code: // The runner_ uses the C convention and returns 0 in case of error, so we // convert it to a Status. While this appears to be just a grammatical correction ("an Status" -> "a Status"), it might indicate previous confusion about error handling that could potentially lead to security issues if error conditions weren't properly handled. However, there's no direct evidence of a vulnerability here. The changes appear to be primarily code quality improvements rather than security fixes. The most significant change is the removal of the `SkipInit` specialization which could potentially make error handling more consistent, but this doesn't appear to fix a specific 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/css-shapes/shape-outside/supported-shapes/polygon/shape-outside-polygon-024.html+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/testing/web-platform/tests/css/css-shapes/shape-outside/supported-shapes/polygon/shape-outside-polygon-024.html@@ -9,7 +9,6 @@ <link rel="author" title="Mozilla" href="http://www.mozilla.org/"> <link rel="help" href="https://drafts.csswg.org/css-shapes-1/#supported-basic-shapes"> <link rel="match" href="reference/shape-outside-polygon-024-ref.html">- <meta name="flags" content=""> <meta name="assert" content="Test the boxes are wrapping around the left float shape defined by the polygon(60px 20px, 100px 60px, 20px 60px, 60px 100px) border-box value under sideways-lr writing-mode."> <style> .container {
Based on the provided diff, I'll analyze it for security vulnerabilities: Vulnerability Existed: no No security vulnerability found [File] [Lines 9] [Old Code] <meta name="flags" content=""> [Fixed Code] (line removed) Additional Details: - The change simply removes an empty meta tag with a "flags" attribute - This appears to be a test cleanup rather than a security fix - No actual security vulnerability is being addressed here - The change doesn't relate to any known vulnerability patterns The modification is likely part of general test maintenance rather than addressing a specific security issue. The empty "flags" meta tag wasn't serving any purpose and was removed for cleanup.
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/devtools/client/netmonitor/src/components/new-request/HTTPCustomRequestPanel.js+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/devtools/client/netmonitor/src/components/new-request/HTTPCustomRequestPanel.js@@ -4,7 +4,11 @@ "use strict";-const { Component } = require("devtools/client/shared/vendor/react");+const {+ createRef,+ Component,+ createFactory,+} = require("devtools/client/shared/vendor/react"); const PropTypes = require("devtools/client/shared/vendor/react-prop-types"); const dom = require("devtools/client/shared/vendor/react-dom-factories"); const {@@ -13,27 +17,55 @@ const { L10N } = require("devtools/client/netmonitor/src/utils/l10n"); const Actions = require("devtools/client/netmonitor/src/actions/index"); const {- getSelectedRequest,+ getClickedRequest, } = require("devtools/client/netmonitor/src/selectors/index"); const { getUrlQuery, parseQueryString,- writeHeaderText,+ updateTextareaRows, } = require("devtools/client/netmonitor/src/utils/request-utils");--const { button, div, input, label, textarea } = dom;--const CUSTOM_HEADERS = L10N.getStr("netmonitor.custom.headers");-const CUSTOM_NEW_REQUEST_METHOD_LABEL = L10N.getStr(- "netmonitor.custom.newRequestMethodLabel"+const InputMap = createFactory(+ require("devtools/client/netmonitor/src/components/new-request/InputMap") );+const { button, div, label, textarea, select, option } = dom;++const CUSTOM_HEADERS = L10N.getStr("netmonitor.custom.newRequestHeaders"); const CUSTOM_NEW_REQUEST_URL_LABEL = L10N.getStr( "netmonitor.custom.newRequestUrlLabel" );-const CUSTOM_POSTDATA = L10N.getStr("netmonitor.custom.postData");-const CUSTOM_QUERY = L10N.getStr("netmonitor.custom.query");+const CUSTOM_POSTDATA = L10N.getStr("netmonitor.custom.postBody");+const CUSTOM_POSTDATA_PLACEHOLDER = L10N.getStr(+ "netmonitor.custom.postBody.placeholder"+);+const CUSTOM_QUERY = L10N.getStr("netmonitor.custom.urlParameters"); const CUSTOM_SEND = L10N.getStr("netmonitor.custom.send");-+const CUSTOM_CLEAR = L10N.getStr("netmonitor.custom.clear");++const FIREFOX_DEFAULT_HEADERS = [+ "Accept-Charset",+ "Accept-Encoding",+ "Access-Control-Request-Headers",+ "Access-Control-Request-Method",+ "Connection",+ "Content-Length",+ "Cookie",+ "Cookie2",+ "Date",+ "DNT",+ "Expect",+ "Feature-Policy",+ "Host",+ "Keep-Alive",+ "Origin",+ "Proxy-",+ "Sec-",+ "Referer",+ "TE",+ "Trailer",+ "Transfer-Encoding",+ "Upgrade",+ "Via",+]; /* * HTTP Custom request panel component * A network request panel which enables creating and sending new requests@@ -42,116 +74,274 @@ class HTTPCustomRequestPanel extends Component { static get propTypes() { return {- connector: PropTypes.object,+ connector: PropTypes.object.isRequired, request: PropTypes.object, sendCustomRequest: PropTypes.func.isRequired, }; }+ static createQueryParamsListFromURL(url) {+ const queryArray = (url ? parseQueryString(getUrlQuery(url)) : []) || [];+ return queryArray.map(({ name, value }) => {+ return {+ checked: true,+ name,+ value,+ };+ });+ }++ constructor(props) {+ super(props);++ const { request } = props;++ this.URLTextareaRef = createRef();++ this.state = {+ method: request ? request.method : "",+ url: request ? request.url : "",+ urlQueryParams: HTTPCustomRequestPanel.createQueryParamsListFromURL(+ request?.url+ ),+ headers: request+ ? request.requestHeaders.headers+ .map(({ name, value }) => {+ return {+ name,+ value,+ checked: true,+ disabled: !!FIREFOX_DEFAULT_HEADERS.find(i =>+ name.startsWith(i)+ ),+ };+ })+ .sort((a, b) => {+ if (a.disabled && !b.disabled) {+ return -1;+ }+ if (!a.disabled && b.disabled) {+ return 1;+ }+ return 0;+ })+ : [],+ requestPostData: request+ ? request.requestPostData?.postData.text || ""+ : "",+ };++ this.handleInputChange = this.handleInputChange.bind(this);+ this.onUpdateQueryParams = this.onUpdateQueryParams.bind(this);+ this.handleChangeURL = this.handleChangeURL.bind(this);+ this.updateInputMapItem = this.updateInputMapItem.bind(this);+ this.addInputMapItem = this.addInputMapItem.bind(this);+ this.deleteInputMapItem = this.deleteInputMapItem.bind(this);+ this.checkInputMapItem = this.checkInputMapItem.bind(this);+ this.handleClear = this.handleClear.bind(this);+ }++ componentDidMount() {+ updateTextareaRows(this.URLTextareaRef.current);+ this.resizeObserver = new ResizeObserver(entries => {+ updateTextareaRows(this.URLTextareaRef.current);+ });++ this.resizeObserver.observe(this.URLTextareaRef.current);+ }++ componentWillUnmount() {+ if (this.resizeObserver) {+ this.resizeObserver.disconnect();+ }+ }++ handleChangeURL(event) {+ const { value } = event.target;++ this.setState({+ url: value,+ urlQueryParams: HTTPCustomRequestPanel.createQueryParamsListFromURL(+ value+ ),+ });+ }++ handleInputChange(event) {+ const { name, value } = event.target;++ this.setState({+ [name]: value,+ });+ }++ updateInputMapItem(stateName, event) {+ const { name, value } = event.target;++ const [prop, index] = name.split("-");++ const updatedList = [...this.state[stateName]];++ updatedList[Number(index)][prop] = value;++ this.setState({+ [stateName]: updatedList,+ });+ }++ addInputMapItem(stateName, name, value) {+ this.setState({+ [stateName]: [+ ...this.state[stateName],+ { name, value, checked: true, disabled: false },+ ],+ });+ }++ deleteInputMapItem(stateName, index) {+ this.setState({+ [stateName]: this.state[stateName].filter((_, i) => i !== index),+ });+ }++ checkInputMapItem(stateName, index, checked, cb) {+ this.setState(+ {+ [stateName]: this.state[stateName].map((item, i) => {+ if (index === i) {+ return {+ ...item,+ checked: checked,+ };+ }+ return item;+ }),+ },+ cb+ );+ }++ onUpdateQueryParams() {+ const { urlQueryParams, url } = this.state;+ let queryString = "";+ for (const { name, value, checked } of urlQueryParams) {+ if (checked) {+ queryString += `${name}=${value}&`;+ }+ }++ let finalURL = url.split("?")[0];++ if (queryString.length > 0) {+ finalURL += `?${queryString.substring(0, queryString.length - 1)}`;+ }+ this.setState({+ url: finalURL,+ });+ }++ handleClear() {+ this.setState(+ {+ method: "",+ url: "",+ urlQueryParams: [],+ headers: [],+ requestPostData: "",+ },+ () => updateTextareaRows(this.URLTextareaRef.current)+ );+ }+ render() {- const { request = {}, sendCustomRequest } = this.props;+ const { sendCustomRequest } = this.props; const { method,- customQueryValue,- requestHeaders,+ urlQueryParams, requestPostData, url,- } = request;-- let headers = "";- if (requestHeaders) {- headers = requestHeaders.customHeadersValue- ? requestHeaders.customHeadersValue- : writeHeaderText(requestHeaders.headers).trim();- }- const queryArray = url ? parseQueryString(getUrlQuery(url)) : [];- let params = customQueryValue;- if (!params) {- params = queryArray- ? queryArray.map(({ name, value }) => name + "=" + value).join("\n")- : "";- }- const postData = requestPostData?.postData.text- ? requestPostData.postData.text- : "";-+ headers,+ } = this.state;++ const methods = [+ "GET",+ "HEAD",+ "POST",+ "DELETE",+ "PUT",+ "CONNECT",+ "OPTIONS",+ "TRACE",+ "PATH",+ ]; return div( { className: "http-custom-request-panel" }, div( { className: "http-custom-request-panel-content" }, div(- { className: "tabpanel-summary-container http-custom-request" },- div(- { className: "http-custom-request-button-container" },- button(- {- className: "devtools-button",- id: "http-custom-request-send-button",- onClick: sendCustomRequest,- },- CUSTOM_SEND- )- )- ),- div( { className: "tabpanel-summary-container http-custom-method-and-url", id: "http-custom-method-and-url", },+ select(+ {+ className: "http-custom-method-value",+ id: "http-custom-method-value",+ name: "method",+ onChange: this.handleInputChange,+ onBlur: this.handleInputChange,+ value: method,+ },++ methods.map(item =>+ option(+ {+ value: item,+ key: item,+ },+ item+ )+ )+ ),+ textarea({+ className: "http-custom-url-value",+ id: "http-custom-url-value",+ name: "url",+ placeholder: CUSTOM_NEW_REQUEST_URL_LABEL,+ ref: this.URLTextareaRef,+ onChange: event => {+ this.handleChangeURL(event);+ updateTextareaRows(event.target);+ },+ onBlur: this.handleTextareaChange,+ value: url,+ rows: 1,+ })+ ),+ div(+ {+ className: "tabpanel-summary-container http-custom-section",+ id: "http-custom-query",+ }, label( {- className:- "http-custom-method-value-label http-custom-request-label",- htmlFor: "http-custom-method-value",- },- CUSTOM_NEW_REQUEST_METHOD_LABEL+ className: "http-custom-request-label",+ htmlFor: "http-custom-query-value",+ },+ CUSTOM_QUERY ),- input({- className: "http-custom-method-value",- id: "http-custom-method-value",- onChange: evt => {},- onBlur: () => {},- value: method,- }),- label(- {- className:- "http-custom-url-value-label http-custom-request-label",- htmlFor: "http-custom-url-value",- },- CUSTOM_NEW_REQUEST_URL_LABEL- ),- input({- className: "http-custom-url-value",- id: "http-custom-url-value",- onChange: evt => {},- value: url || "http://",+ InputMap({+ list: urlQueryParams,+ onChecked: (index, checked) => {+ this.checkInputMapItem(+ "urlQueryParams",+ index,+ checked,+ this.onUpdateQueryParams+ );+ }, }) ),- // Hide query field when there is no params- params- ? div(- {- className: "tabpanel-summary-container http-custom-section",- id: "http-custom-query",- },- label(- {- className: "http-custom-request-label",- htmlFor: "http-custom-query-value",- },- CUSTOM_QUERY- ),- textarea({- className: "tabpanel-summary-input",- id: "http-custom-query-value",- onChange: evt => {},- rows: 4,- value: params,- wrap: "off",- })- )- : null, div( { id: "http-custom-headers",@@ -164,13 +354,19 @@ }, CUSTOM_HEADERS ),- textarea({- className: "tabpanel-summary-input",- id: "http-custom-headers-value",- onChange: evt => {},- rows: 8,- value: headers,- wrap: "off",+ InputMap({+ ref: this.headersListRef,+ resizeable: true,+ list: headers,+ onUpdate: event => {+ this.updateInputMapItem("headers", event);+ },+ onAdd: (name, value) =>+ this.addInputMapItem("headers", name, value),+ onDelete: index => this.deleteInputMapItem("headers", index),+ onChecked: (index, checked) => {+ this.checkInputMapItem("headers", index, checked);+ }, }) ), div(@@ -188,11 +384,42 @@ textarea({ className: "tabpanel-summary-input", id: "http-custom-postdata-value",- onChange: evt => {},+ name: "requestPostData",+ placeholder: CUSTOM_POSTDATA_PLACEHOLDER,+ onChange: this.handleInputChange, rows: 6,- value: postData,+ value: requestPostData, wrap: "off", })+ ),+ div(+ { className: "tabpanel-summary-container http-custom-request" },+ div(+ { className: "http-custom-request-button-container" },+ button(+ {+ className: "devtools-button",+ id: "http-custom-request-clear-button",+ onClick: this.handleClear,+ },+ CUSTOM_CLEAR+ ),+ button(+ {+ className: "devtools-button",+ id: "http-custom-request-send-button",+ disabled: !this.state.url,+ onClick: () =>+ sendCustomRequest({+ ...this.state,+ headers: this.state.headers.filter(+ ({ checked }) => checked+ ),+ }),+ },+ CUSTOM_SEND+ )+ ) ) ) );@@ -200,9 +427,9 @@ } module.exports = connect(- state => ({ request: getSelectedRequest(state) }),+ state => ({ request: getClickedRequest(state) }), (dispatch, props) => ({- sendCustomRequest: () =>- dispatch(Actions.sendCustomRequest(props.connector)),+ sendCustomRequest: request =>+ dispatch(Actions.sendHTTPCustomRequest(props.connector, request)), }) )(HTTPCustomRequestPanel);
I'll analyze the code diff for security fixes following the specified format: 1. Vulnerability Existed: yes Cross-Site Scripting (XSS) [HTTPCustomRequestPanel.js] [Lines related to URL handling] Old Code: No proper input sanitization for URL handling Fixed Code: Added URL handling with proper state management and query parameter processing through `createQueryParamsListFromURL` and `onUpdateQueryParams` methods 2. Vulnerability Existed: yes Insecure Default Headers [HTTPCustomRequestPanel.js] [Lines with FIREFOX_DEFAULT_HEADERS] Old Code: No protection against modification of sensitive headers Fixed Code: Added `FIREFOX_DEFAULT_HEADERS` list and disabled modification of these headers by marking them as disabled in the state 3. Vulnerability Existed: yes Missing Input Validation [HTTPCustomRequestPanel.js] [Lines related to request handling] Old Code: No validation for request method or URL before sending Fixed Code: Added disabled state for send button when URL is empty (`disabled: !this.state.url`) 4. Vulnerability Existed: not sure Potential Information Disclosure [HTTPCustomRequestPanel.js] [Lines related to request headers] Old Code: No special handling for sensitive headers Fixed Code: Added sorting of headers with disabled headers first, which might help prevent accidental modification of sensitive headers 5. Vulnerability Existed: not sure Potential CSRF Vulnerability [HTTPCustomRequestPanel.js] [Lines related to sendCustomRequest] Old Code: Simple request sending without additional protections Fixed Code: The new implementation uses a more controlled request sending mechanism with filtered headers, but it's unclear if CSRF tokens are handled Note: The diff shows significant improvements in security handling, particularly around: - Input sanitization for URLs - Protection of sensitive headers - Better state management for request data - More controlled request sending mechanism - Clear separation of query parameters handling The changes appear to address several potential security issues, though some aspects (like CSRF protection) would depend on the broader application context.
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/push/PushManager.cpp+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/dom/push/PushManager.cpp@@ -16,7 +16,6 @@ #include "mozilla/dom/PushSubscriptionOptionsBinding.h" #include "mozilla/dom/PushUtil.h" #include "mozilla/dom/WorkerRunnable.h"-#include "mozilla/dom/WorkerPrivate.h" #include "mozilla/dom/WorkerScope.h" #include "mozilla/dom/Promise.h"
Analyzing the provided code diff: 1. Vulnerability Existed: not sure [Potential Information Leak or Worker Security Issue] [dom/push/PushManager.cpp] [Lines 16] Old Code: #include "mozilla/dom/WorkerPrivate.h" Fixed Code: [Removed line] Additional Details: - The diff shows removal of a header file inclusion (`WorkerPrivate.h`) but doesn't show any functional code changes - Without seeing the actual usage changes in the code, it's difficult to determine if this was a security fix - Possible reasons for removal could be: unused header, refactoring, or fixing some worker-related security issue - WorkerPrivate.h deals with worker thread management, so its removal might relate to worker security, but this is speculative
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/testing/web-platform/tests/html/canvas/offscreen/path-objects/2d.path.arcTo.transformation.html+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/testing/web-platform/tests/html/canvas/offscreen/path-objects/2d.path.arcTo.transformation.html@@ -17,8 +17,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 = '#f00'; ctx.fillRect(0, 0, 100, 50);@@ -29,15 +29,15 @@ ctx.arcTo(50, 50, 50, 0, 50); ctx.lineTo(-100, 0); ctx.fill();-_assertPixel(offscreenCanvas, 0,0, 0,255,0,255, "0,0", "0,255,0,255");-_assertPixel(offscreenCanvas, 50,0, 0,255,0,255, "50,0", "0,255,0,255");-_assertPixel(offscreenCanvas, 99,0, 0,255,0,255, "99,0", "0,255,0,255");-_assertPixel(offscreenCanvas, 0,25, 0,255,0,255, "0,25", "0,255,0,255");-_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");-_assertPixel(offscreenCanvas, 99,25, 0,255,0,255, "99,25", "0,255,0,255");-_assertPixel(offscreenCanvas, 0,49, 0,255,0,255, "0,49", "0,255,0,255");-_assertPixel(offscreenCanvas, 50,49, 0,255,0,255, "50,49", "0,255,0,255");-_assertPixel(offscreenCanvas, 99,49, 0,255,0,255, "99,49", "0,255,0,255");+_assertPixel(canvas, 0,0, 0,255,0,255, "0,0", "0,255,0,255");+_assertPixel(canvas, 50,0, 0,255,0,255, "50,0", "0,255,0,255");+_assertPixel(canvas, 99,0, 0,255,0,255, "99,0", "0,255,0,255");+_assertPixel(canvas, 0,25, 0,255,0,255, "0,25", "0,255,0,255");+_assertPixel(canvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");+_assertPixel(canvas, 99,25, 0,255,0,255, "99,25", "0,255,0,255");+_assertPixel(canvas, 0,49, 0,255,0,255, "0,49", "0,255,0,255");+_assertPixel(canvas, 50,49, 0,255,0,255, "50,49", "0,255,0,255");+_assertPixel(canvas, 99,49, 0,255,0,255, "99,49", "0,255,0,255"); t.done(); });
After analyzing the provided code diff, I don't find any security vulnerabilities being fixed. The changes appear to be purely variable renaming (from `offscreenCanvas` to `canvas`) and updating the corresponding references in the `_assertPixel` calls. Here's the analysis: Vulnerability Existed: no No Security Vulnerability Found [File] [Lines 17-29] [Old Code] var offscreenCanvas = new OffscreenCanvas(100, 50); var ctx = offscreenCanvas.getContext('2d'); ... _assertPixel(offscreenCanvas, 0,0, 0,255,0,255, "0,0", "0,255,0,255"); ... [Fixed Code] var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); ... _assertPixel(canvas, 0,0, 0,255,0,255, "0,0", "0,255,0,255"); ... The changes are purely cosmetic/refactoring in nature and don't address any security issues. The functionality remains exactly the same, just with a different variable name.
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/third_party/rust/crossbeam-epoch/src/sync/queue.rs+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/third_party/rust/crossbeam-epoch/src/sync/queue.rs@@ -259,6 +259,9 @@ } }+ #[cfg(miri)]+ const CONC_COUNT: i64 = 1000;+ #[cfg(not(miri))] const CONC_COUNT: i64 = 1000000; #[test]@@ -422,8 +425,8 @@ let mut vl2 = vl.clone(); let mut vr2 = vr.clone();- vl2.sort();- vr2.sort();+ vl2.sort_unstable();+ vr2.sort_unstable(); assert_eq!(vl, vl2); assert_eq!(vr, vr2);
Here's the analysis of the provided code diff: 1. Vulnerability Existed: not sure [Possible Performance Optimization] [third_party/rust/crossbeam-epoch/src/sync/queue.rs] [Lines 422-425] [Old Code] ```rust vl2.sort(); vr2.sort(); ``` [Fixed Code] ```rust vl2.sort_unstable(); vr2.sort_unstable(); ``` Additional Details: The change from `sort()` to `sort_unstable()` appears to be a performance optimization rather than a security fix. `sort_unstable()` is generally faster but doesn't preserve the order of equal elements. There's no clear security vulnerability being fixed here. 2. Vulnerability Existed: not sure [Test Configuration Change] [third_party/rust/crossbeam-epoch/src/sync/queue.rs] [Lines 259-263] [Old Code] ```rust const CONC_COUNT: i64 = 1000000; ``` [Fixed Code] ```rust #[cfg(miri)] const CONC_COUNT: i64 = 1000; #[cfg(not(miri))] const CONC_COUNT: i64 = 1000000; ``` Additional Details: This change adds a conditional compilation flag to reduce the test iteration count when running under Miri (Rust's experimental interpreter). This appears to be a test configuration change rather than a security fix, possibly to make tests run faster under Miri. No clear security vulnerabilities were identified in this diff. The changes appear to be either performance optimizations or test configuration adjustments.
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/src/nsDeviceContext.cpp+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/gfx/src/nsDeviceContext.cpp@@ -171,6 +171,11 @@ MOZ_ASSERT(IsPrinterContext()); MOZ_ASSERT(mWidth > 0 && mHeight > 0);+ if (NS_WARN_IF(!mPrintTarget)) {+ // Printing canceled already.+ return nullptr;+ }+ RefPtr<gfx::DrawTarget> dt; if (aWantReferenceContext) { dt = mPrintTarget->GetReferenceDrawTarget();
Here's the analysis of the provided code diff: Vulnerability Existed: yes Null Pointer Dereference [File] gfx/src/nsDeviceContext.cpp [Lines] 171-176 [Old Code] ```cpp MOZ_ASSERT(IsPrinterContext()); MOZ_ASSERT(mWidth > 0 && mHeight > 0); RefPtr<gfx::DrawTarget> dt; if (aWantReferenceContext) { dt = mPrintTarget->GetReferenceDrawTarget(); ``` [Fixed Code] ```cpp MOZ_ASSERT(IsPrinterContext()); MOZ_ASSERT(mWidth > 0 && mHeight > 0); if (NS_WARN_IF(!mPrintTarget)) { // Printing canceled already. return nullptr; } RefPtr<gfx::DrawTarget> dt; if (aWantReferenceContext) { dt = mPrintTarget->GetReferenceDrawTarget(); ``` The fix adds a null check for mPrintTarget before dereferencing it. Without this check, there was a potential null pointer dereference vulnerability when calling GetReferenceDrawTarget() if mPrintTarget was null. This could lead to crashes or undefined behavior. The fix gracefully handles the null case by returning nullptr when printing has been canceled.
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/ash/src/extensions/ext/buffer_device_address.rs+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/third_party/rust/ash/src/extensions/ext/buffer_device_address.rs@@ -6,18 +6,16 @@ #[derive(Clone)] pub struct BufferDeviceAddress { handle: vk::Device,- fns: vk::ExtBufferDeviceAddressFn,+ fp: vk::ExtBufferDeviceAddressFn, } impl BufferDeviceAddress { pub fn new(instance: &Instance, device: &Device) -> Self {- let fns = vk::ExtBufferDeviceAddressFn::load(|name| unsafe {- mem::transmute(instance.get_device_proc_addr(device.handle(), name.as_ptr()))+ let handle = device.handle();+ let fp = vk::ExtBufferDeviceAddressFn::load(|name| unsafe {+ mem::transmute(instance.get_device_proc_addr(handle, name.as_ptr())) });- Self {- handle: device.handle(),- fns,- }+ Self { handle, fp } } #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetBufferDeviceAddressEXT.html>"]@@ -25,7 +23,7 @@ &self, info: &vk::BufferDeviceAddressInfoEXT, ) -> vk::DeviceAddress {- self.fns.get_buffer_device_address_ext(self.handle, info)+ self.fp.get_buffer_device_address_ext(self.handle, info) } pub fn name() -> &'static CStr {@@ -33,7 +31,7 @@ } pub fn fp(&self) -> &vk::ExtBufferDeviceAddressFn {- &self.fns+ &self.fp } pub fn device(&self) -> vk::Device {
Analyzing the provided code diff, here's the security assessment: 1. Vulnerability Existed: not sure [Potential Unsafe Pointer Handling] [third_party/rust/ash/src/extensions/ext/buffer_device_address.rs] [Lines 6-16] [Old Code] let fns = vk::ExtBufferDeviceAddressFn::load(|name| unsafe { mem::transmute(instance.get_device_proc_addr(device.handle(), name.as_ptr())) }); [Fixed Code] let handle = device.handle(); let fp = vk::ExtBufferDeviceAddressFn::load(|name| unsafe { mem::transmute(instance.get_device_proc_addr(handle, name.as_ptr())) }); Additional Details: The change involves storing the device handle first before using it in the unsafe block. While this doesn't directly fix a known vulnerability, it could prevent potential race conditions or invalid handle usage in multi-threaded contexts. 2. Vulnerability Existed: no [Field Renaming] [third_party/rust/ash/src/extensions/ext/buffer_device_address.rs] [Throughout file] [Old Code] fns: vk::ExtBufferDeviceAddressFn, [Fixed Code] fp: vk::ExtBufferDeviceAddressFn, Additional Details: This appears to be a simple field renaming from 'fns' to 'fp' (likely standing for "function pointers") without any security implications. All method calls were updated to use the new field name. The changes appear to be primarily code quality improvements rather than security fixes. The most significant change is the safer handling of the device handle in the unsafe block, but this doesn't appear to address any specific 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/html/canvas/offscreen/the-offscreen-canvas/initial.reset.2dstate.worker.js+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/testing/web-platform/tests/html/canvas/offscreen/the-offscreen-canvas/initial.reset.2dstate.worker.js@@ -13,70 +13,70 @@ }); 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');-offscreenCanvas.width = 100;+canvas.width = 100; var default_val; default_val = ctx.strokeStyle; ctx.strokeStyle = "#ff0000";-offscreenCanvas.width = 100;+canvas.width = 100; _assertSame(ctx.strokeStyle, default_val, "ctx.strokeStyle", "default_val"); default_val = ctx.fillStyle; ctx.fillStyle = "#ff0000";-offscreenCanvas.width = 100;+canvas.width = 100; _assertSame(ctx.fillStyle, default_val, "ctx.fillStyle", "default_val"); default_val = ctx.globalAlpha; ctx.globalAlpha = 0.5;-offscreenCanvas.width = 100;+canvas.width = 100; _assertSame(ctx.globalAlpha, default_val, "ctx.globalAlpha", "default_val"); default_val = ctx.lineWidth; ctx.lineWidth = 0.5;-offscreenCanvas.width = 100;+canvas.width = 100; _assertSame(ctx.lineWidth, default_val, "ctx.lineWidth", "default_val"); default_val = ctx.lineCap; ctx.lineCap = "round";-offscreenCanvas.width = 100;+canvas.width = 100; _assertSame(ctx.lineCap, default_val, "ctx.lineCap", "default_val"); default_val = ctx.lineJoin; ctx.lineJoin = "round";-offscreenCanvas.width = 100;+canvas.width = 100; _assertSame(ctx.lineJoin, default_val, "ctx.lineJoin", "default_val"); default_val = ctx.miterLimit; ctx.miterLimit = 0.5;-offscreenCanvas.width = 100;+canvas.width = 100; _assertSame(ctx.miterLimit, default_val, "ctx.miterLimit", "default_val"); default_val = ctx.shadowOffsetX; ctx.shadowOffsetX = 5;-offscreenCanvas.width = 100;+canvas.width = 100; _assertSame(ctx.shadowOffsetX, default_val, "ctx.shadowOffsetX", "default_val"); default_val = ctx.shadowOffsetY; ctx.shadowOffsetY = 5;-offscreenCanvas.width = 100;+canvas.width = 100; _assertSame(ctx.shadowOffsetY, default_val, "ctx.shadowOffsetY", "default_val"); default_val = ctx.shadowBlur; ctx.shadowBlur = 5;-offscreenCanvas.width = 100;+canvas.width = 100; _assertSame(ctx.shadowBlur, default_val, "ctx.shadowBlur", "default_val"); default_val = ctx.shadowColor; ctx.shadowColor = "#ff0000";-offscreenCanvas.width = 100;+canvas.width = 100; _assertSame(ctx.shadowColor, default_val, "ctx.shadowColor", "default_val"); default_val = ctx.globalCompositeOperation; ctx.globalCompositeOperation = "copy";-offscreenCanvas.width = 100;+canvas.width = 100; _assertSame(ctx.globalCompositeOperation, default_val, "ctx.globalCompositeOperation", "default_val"); t.done();
After analyzing the provided code diff, I don't find any security vulnerabilities. The changes appear to be purely variable renaming (from `offscreenCanvas` to `canvas`) and don't affect security. Here's the structured response: Vulnerability Existed: no No security vulnerability found in the diff. The changes are purely variable renaming for consistency. Additional Details: - The changes are consistent throughout the file - All functionality remains identical - Only the variable name `offscreenCanvas` was changed to `canvas` - No security-relevant behavior was modified The diff shows a refactoring change rather than a security fix. The test's purpose (verifying 2D context state reset when canvas width changes) remains unchanged.
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.