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/pixel-manipulation/2d.imageData.put.null.worker.js+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/testing/web-platform/tests/html/canvas/offscreen/pixel-manipulation/2d.imageData.put.null.worker.js@@ -13,8 +13,8 @@ }); t.step(function() {-var offscreenCanvas = new OffscreenCanvas(100, 50);-var ctx = offscreenCanvas.getContext('2d');+var canvas = new OffscreenCanvas(100, 50);+var ctx = canvas.getContext('2d'); assert_throws_js(TypeError, function() { ctx.putImageData(null, 0, 0); }); t.done();
Based on the provided diff, here's the analysis: Vulnerability Existed: no [No specific vulnerability found] [testing/web-platform/tests/html/canvas/offscreen/pixel-manipulation/2d.imageData.put.null.worker.js] [Lines 13-14] [Old Code] var offscreenCanvas = new OffscreenCanvas(100, 50); var ctx = offscreenCanvas.getContext('2d'); [Fixed Code] var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); The changes appear to be purely cosmetic/refactoring, renaming a variable from `offscreenCanvas` to `canvas`. There's no indication of any security vulnerability being fixed in this change. The test's purpose (checking behavior when passing null to putImageData) 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.
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/mobile/android/geckoview/api.txt+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/mobile/android/geckoview/api.txt@@ -56,7 +56,9 @@ import java.lang.Throwable; import java.lang.Void; import java.lang.annotation.Documented;+import java.lang.annotation.ElementType; import java.lang.annotation.Retention;+import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.net.InetAddress; import java.nio.ByteBuffer;@@ -156,12 +158,15 @@ method @AnyThread @NonNull public Autocomplete.Address.Builder tel(@Nullable String); }- public static class Autocomplete.AddressSaveOption extends Autocomplete.SaveOption {+ public static class Autocomplete.AddressSaveOption extends Autocomplete.SaveOption<Autocomplete.Address> { ctor public AddressSaveOption(@NonNull Autocomplete.Address); }- public static class Autocomplete.AddressSelectOption extends Autocomplete.SelectOption {+ public static class Autocomplete.AddressSelectOption extends Autocomplete.SelectOption<Autocomplete.Address> { ctor public AddressSelectOption(@NonNull Autocomplete.Address);+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface Autocomplete.AddressSelectOption.AddressSelectHint { } public static class Autocomplete.AddressSelectOption.Hint {@@ -189,18 +194,24 @@ method @AnyThread @NonNull public Autocomplete.CreditCard.Builder number(@Nullable String); }- public static class Autocomplete.CreditCardSaveOption extends Autocomplete.SaveOption {+ public static class Autocomplete.CreditCardSaveOption extends Autocomplete.SaveOption<Autocomplete.CreditCard> { ctor public CreditCardSaveOption(@NonNull Autocomplete.CreditCard); }- public static class Autocomplete.CreditCardSelectOption extends Autocomplete.SelectOption {+ public static class Autocomplete.CreditCardSelectOption extends Autocomplete.SelectOption<Autocomplete.CreditCard> { ctor public CreditCardSelectOption(@NonNull Autocomplete.CreditCard);+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface Autocomplete.CreditCardSelectOption.CreditCardSelectHint { } public static class Autocomplete.CreditCardSelectOption.Hint { ctor public Hint(); field public static final int INSECURE_FORM = 2; field public static final int NONE = 0;+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface Autocomplete.LSUsedField { } public static class Autocomplete.LoginEntry {@@ -224,11 +235,11 @@ method @AnyThread @NonNull public Autocomplete.LoginEntry.Builder username(@NonNull String); }- public static class Autocomplete.LoginSaveOption extends Autocomplete.SaveOption {+ public static class Autocomplete.LoginSaveOption extends Autocomplete.SaveOption<Autocomplete.LoginEntry> { ctor public LoginSaveOption(@NonNull Autocomplete.LoginEntry); }- public static class Autocomplete.LoginSelectOption extends Autocomplete.SelectOption {+ public static class Autocomplete.LoginSelectOption extends Autocomplete.SelectOption<Autocomplete.LoginEntry> { ctor public LoginSelectOption(@NonNull Autocomplete.LoginEntry); }@@ -238,7 +249,7 @@ field @NonNull public final T value; }- public abstract static class Autocomplete.SaveOption<T> extends Autocomplete.Option {+ public abstract static class Autocomplete.SaveOption<T> extends Autocomplete.Option<T> { ctor public SaveOption(@NonNull T, int); }@@ -249,7 +260,10 @@ field public static final int NONE = 0; }- public abstract static class Autocomplete.SelectOption<T> extends Autocomplete.Option {+ @Retention(value=RetentionPolicy.SOURCE) public static interface Autocomplete.SaveOption.SaveOptionHint {+ }++ public abstract static class Autocomplete.SelectOption<T> extends Autocomplete.Option<T> { ctor public SelectOption(@NonNull T, int); }@@ -260,6 +274,9 @@ field public static final int INSECURE_FORM = 2; field public static final int MATCHING_ORIGIN = 8; field public static final int NONE = 0;+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface Autocomplete.SelectOption.SelectOptionHint { } public static interface Autocomplete.StorageDelegate {@@ -280,6 +297,15 @@ public class Autofill { ctor public Autofill();+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface Autofill.AutofillHint {+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface Autofill.AutofillInputType {+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface Autofill.AutofillNotify { } public static interface Autofill.Delegate {@@ -400,6 +426,21 @@ method @UiThread public int getSafeBrowsingCategory(); method @UiThread public boolean isBlocking(); field @NonNull public final String uri;+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface ContentBlocking.CBAntiTracking {+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface ContentBlocking.CBCookieBehavior {+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface ContentBlocking.CBCookieLifetime {+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface ContentBlocking.CBEtpLevel {+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface ContentBlocking.CBSafeBrowsing { } public static class ContentBlocking.CookieBehavior {@@ -500,7 +541,7 @@ field public static final Parcelable.Creator<ContentBlocking.Settings> CREATOR; }- @AnyThread public static class ContentBlocking.Settings.Builder extends RuntimeSettings.Builder {+ @AnyThread public static class ContentBlocking.Settings.Builder extends RuntimeSettings.Builder<ContentBlocking.Settings> { ctor public Builder(); method @NonNull public ContentBlocking.Settings.Builder antiTracking(int); method @NonNull public ContentBlocking.Settings.Builder cookieBehavior(int);@@ -559,6 +600,9 @@ field public final int count; }+ @Retention(value=RetentionPolicy.SOURCE) public static interface ContentBlockingController.LogEntry.BlockingData.LogEvent {+ }+ public class CrashReporter { ctor public CrashReporter(); method @AnyThread @NonNull public static GeckoResult<String> sendCrashReport(@NonNull Context, @NonNull Intent, @NonNull String);@@ -567,7 +611,7 @@ method @AnyThread @NonNull public static GeckoResult<String> sendCrashReport(@NonNull String, @NonNull File, @NonNull JSONObject); }- @Documented @Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME) @Target(value={java.lang.annotation.ElementType.CONSTRUCTOR, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.LOCAL_VARIABLE, java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PACKAGE, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.TYPE}) public interface DeprecationSchedule {+ @Documented @Retention(value=RetentionPolicy.RUNTIME) @Target(value={ElementType.CONSTRUCTOR, ElementType.FIELD, ElementType.LOCAL_VARIABLE, ElementType.METHOD, ElementType.PACKAGE, ElementType.PARAMETER, ElementType.TYPE}) public interface DeprecationSchedule { element public String id(); element public int version(); }@@ -602,7 +646,7 @@ ctor public GeckoResult(GeckoResult<T>); method @NonNull public GeckoResult<Void> accept(@Nullable GeckoResult.Consumer<T>); method @NonNull public GeckoResult<Void> accept(@Nullable GeckoResult.Consumer<T>, @Nullable GeckoResult.Consumer<Throwable>);- method @NonNull @SafeVarargs public static <V> GeckoResult<List<V>> allOf(@NonNull GeckoResult<V>);+ method @NonNull @SafeVarargs public static <V> GeckoResult<List<V>> allOf(@NonNull GeckoResult<V>...); method @NonNull public static <V> GeckoResult<List<V>> allOf(@Nullable List<GeckoResult<V>>); method @AnyThread @NonNull public static GeckoResult<AllowOrDeny> allow(); method @NonNull public synchronized GeckoResult<Boolean> cancel();@@ -696,6 +740,9 @@ method @Nullable @UiThread public GeckoResult<Intent> onStartActivityForResult(@NonNull PendingIntent); }+ @Retention(value=RetentionPolicy.SOURCE) public static interface GeckoRuntime.CrashedProcessType {+ }+ public static interface GeckoRuntime.Delegate { method @UiThread public void onShutdown(); }@@ -712,7 +759,7 @@ method @Nullable public String getConfigFilePath(); method public boolean getConsoleOutputEnabled(); method @NonNull public ContentBlocking.Settings getContentBlocking();- method @Nullable public Class<?> getCrashHandler();+ method @Nullable public Class<? extends android.app.Service> getCrashHandler(); method @Nullable public Float getDisplayDensityOverride(); method @Nullable public Integer getDisplayDpiOverride(); method public boolean getDoubleTapZoomingEnabled();@@ -764,7 +811,7 @@ field public static final int HTTPS_ONLY_PRIVATE = 1; }- @AnyThread public static final class GeckoRuntimeSettings.Builder extends RuntimeSettings.Builder {+ @AnyThread public static final class GeckoRuntimeSettings.Builder extends RuntimeSettings.Builder<GeckoRuntimeSettings> { ctor public Builder(); method @NonNull public GeckoRuntimeSettings.Builder aboutConfigEnabled(boolean); method @NonNull public GeckoRuntimeSettings.Builder allowInsecureConnections(int);@@ -773,7 +820,7 @@ method @NonNull public GeckoRuntimeSettings.Builder configFilePath(@Nullable String); method @NonNull public GeckoRuntimeSettings.Builder consoleOutput(boolean); method @NonNull public GeckoRuntimeSettings.Builder contentBlocking(@NonNull ContentBlocking.Settings);- method @NonNull public GeckoRuntimeSettings.Builder crashHandler(@Nullable Class<?>);+ method @NonNull public GeckoRuntimeSettings.Builder crashHandler(@Nullable Class<? extends android.app.Service>); method @NonNull public GeckoRuntimeSettings.Builder debugLogging(boolean); method @NonNull public GeckoRuntimeSettings.Builder displayDensityOverride(float); method @NonNull public GeckoRuntimeSettings.Builder displayDpiOverride(int);@@ -798,6 +845,12 @@ method @NonNull public GeckoRuntimeSettings.Builder webFontsEnabled(boolean); method @NonNull public GeckoRuntimeSettings.Builder webManifest(boolean); method @NonNull protected GeckoRuntimeSettings newSettings(@Nullable GeckoRuntimeSettings);+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface GeckoRuntimeSettings.ColorScheme {+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface GeckoRuntimeSettings.HttpsOnlyMode { } public class GeckoSession {@@ -920,6 +973,15 @@ field public final int type; }+ @Retention(value=RetentionPolicy.SOURCE) public static interface GeckoSession.ContentDelegate.ContextElement.Type {+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface GeckoSession.FinderDisplayFlags {+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface GeckoSession.FinderFindFlags {+ }+ @AnyThread public static class GeckoSession.FinderResult { ctor protected FinderResult(); field @Nullable public final RectF clientRect;@@ -932,6 +994,9 @@ field public final boolean wrapped; }+ @Retention(value=RetentionPolicy.SOURCE) public static interface GeckoSession.HeaderFilter {+ }+ public static interface GeckoSession.HistoryDelegate { method @Nullable @UiThread default public GeckoResult<boolean[]> getVisited(@NonNull GeckoSession, @NonNull String[]); method @UiThread default public void onHistoryStateChange(@NonNull GeckoSession, @NonNull GeckoSession.HistoryDelegate.HistoryList);@@ -949,8 +1014,11 @@ method @AnyThread @NonNull default public String getUri(); }- public static interface GeckoSession.HistoryDelegate.HistoryList implements List {+ public static interface GeckoSession.HistoryDelegate.HistoryList implements List<GeckoSession.HistoryDelegate.HistoryItem> { method @AnyThread default public int getCurrentIndex();+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface GeckoSession.LoadFlags { } @AnyThread public static class GeckoSession.Loader {@@ -975,6 +1043,12 @@ ctor protected RecordingDevice(); field public final long status; field public final long type;+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface GeckoSession.MediaDelegate.RecordingDevice.DeviceType {+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface GeckoSession.MediaDelegate.RecordingDevice.RecordingStatus { } public static class GeckoSession.MediaDelegate.RecordingDevice.Status {@@ -1014,6 +1088,9 @@ field @NonNull public final String uri; }+ @Retention(value=RetentionPolicy.SOURCE) public static interface GeckoSession.Permission {+ }+ public static interface GeckoSession.PermissionDelegate { method @UiThread default public void onAndroidPermissionsRequest(@NonNull GeckoSession, @Nullable String[], @NonNull GeckoSession.PermissionDelegate.Callback); method @Nullable @UiThread default public GeckoResult<Integer> onContentPermissionRequest(@NonNull GeckoSession, @NonNull GeckoSession.PermissionDelegate.ContentPermission);@@ -1047,6 +1124,9 @@ field @Nullable public final String thirdPartyOrigin; field @NonNull public final String uri; field public final int value;+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface GeckoSession.PermissionDelegate.ContentPermission.Value { } public static interface GeckoSession.PermissionDelegate.MediaCallback {@@ -1069,6 +1149,12 @@ field @Deprecated @DeprecationSchedule(id="media-source-rawId",version=100) @NonNull public final String rawId; field public final int source; field public final int type;+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface GeckoSession.PermissionDelegate.MediaSource.Source {+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface GeckoSession.PermissionDelegate.MediaSource.Type { } public static interface GeckoSession.ProgressDelegate {@@ -1095,6 +1181,12 @@ field public final int mixedModePassive; field @Nullable public final String origin; field public final int securityMode;+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface GeckoSession.ProgressDelegate.SecurityInformation.ContentType {+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface GeckoSession.ProgressDelegate.SecurityInformation.SecurityMode { } public static interface GeckoSession.PromptDelegate {@@ -1140,6 +1232,12 @@ field @Nullable public final String username; }+ @Retention(value=RetentionPolicy.SOURCE) public static interface GeckoSession.PromptDelegate.AuthPrompt.AuthOptions.AuthFlag {+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface GeckoSession.PromptDelegate.AuthPrompt.AuthOptions.AuthLevel {+ }+ public static class GeckoSession.PromptDelegate.AuthPrompt.AuthOptions.Flags { ctor protected Flags(); field public static final int CROSS_ORIGIN_SUB_RESOURCE = 32;@@ -1171,6 +1269,10 @@ field @Nullable public final String title; }+ protected static interface GeckoSession.PromptDelegate.BasePrompt.Observer {+ method @AnyThread default public void onPromptCompleted(@NonNull GeckoSession.PromptDelegate.BasePrompt);+ }+ public static class GeckoSession.PromptDelegate.BeforeUnloadPrompt extends GeckoSession.PromptDelegate.BasePrompt { ctor protected BeforeUnloadPrompt(@NonNull String, @NonNull GeckoSession.PromptDelegate.BasePrompt.Observer); method @NonNull @UiThread public GeckoSession.PromptDelegate.PromptResponse confirm(@Nullable AllowOrDeny);@@ -1180,6 +1282,9 @@ ctor protected ButtonPrompt(@NonNull String, @Nullable String, @Nullable String, @NonNull GeckoSession.PromptDelegate.BasePrompt.Observer); method @NonNull @UiThread public GeckoSession.PromptDelegate.PromptResponse confirm(int); field @Nullable public final String message;+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface GeckoSession.PromptDelegate.ButtonPrompt.ButtonType { } public static class GeckoSession.PromptDelegate.ButtonPrompt.Type {@@ -1210,6 +1315,9 @@ field public final boolean separator; }+ @Retention(value=RetentionPolicy.SOURCE) public static interface GeckoSession.PromptDelegate.ChoicePrompt.ChoiceType {+ }+ public static class GeckoSession.PromptDelegate.ChoicePrompt.Type { ctor protected Type(); field public static final int MENU = 1;@@ -1232,6 +1340,9 @@ field public final int type; }+ @Retention(value=RetentionPolicy.SOURCE) public static interface GeckoSession.PromptDelegate.DateTimePrompt.DatetimeType {+ }+ public static class GeckoSession.PromptDelegate.DateTimePrompt.Type { ctor protected Type(); field public static final int DATE = 1;@@ -1258,6 +1369,12 @@ field public static final int USER = 2; }+ @Retention(value=RetentionPolicy.SOURCE) public static interface GeckoSession.PromptDelegate.FilePrompt.CaptureType {+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface GeckoSession.PromptDelegate.FilePrompt.FileType {+ }+ public static class GeckoSession.PromptDelegate.FilePrompt.Type { ctor protected Type(); field public static final int MULTIPLE = 2;@@ -1296,11 +1413,17 @@ field public static final int SUCCESS = 0; }+ @Retention(value=RetentionPolicy.SOURCE) public static interface GeckoSession.PromptDelegate.SharePrompt.ShareResult {+ }+ public static class GeckoSession.PromptDelegate.TextPrompt extends GeckoSession.PromptDelegate.BasePrompt { ctor protected TextPrompt(@NonNull String, @Nullable String, @Nullable String, @Nullable String, @NonNull GeckoSession.PromptDelegate.BasePrompt.Observer); method @NonNull @UiThread public GeckoSession.PromptDelegate.PromptResponse confirm(@NonNull String); field @Nullable public final String defaultValue; field @Nullable public final String message;+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface GeckoSession.RestartReason { } public static interface GeckoSession.ScrollDelegate {@@ -1349,11 +1472,23 @@ field @NonNull public final String text; }- @AnyThread public static class GeckoSession.SessionState extends AbstractSequentialList implements GeckoSession.HistoryDelegate.HistoryList Parcelable {+ @Retention(value=RetentionPolicy.SOURCE) public static interface GeckoSession.SelectionActionDelegateAction {+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface GeckoSession.SelectionActionDelegateFlag {+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface GeckoSession.SelectionActionDelegateHideReason {+ }++ @AnyThread public static class GeckoSession.SessionState extends AbstractSequentialList<GeckoSession.HistoryDelegate.HistoryItem> implements Parcelable GeckoSession.HistoryDelegate.HistoryList { ctor public SessionState(@NonNull GeckoSession.SessionState); method @Nullable public static GeckoSession.SessionState fromString(@Nullable String); method public void readFromParcel(@NonNull Parcel); field public static final Parcelable.Creator<GeckoSession.SessionState> CREATOR;+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface GeckoSession.TargetWindow { } public static interface GeckoSession.TextInputDelegate {@@ -1366,6 +1501,9 @@ field public static final int RESTART_REASON_BLUR = 1; field public static final int RESTART_REASON_CONTENT_CHANGE = 2; field public static final int RESTART_REASON_FOCUS = 0;+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface GeckoSession.VisitFlags { } @AnyThread public static class GeckoSession.WebResponseInfo {@@ -1442,9 +1580,12 @@ ctor public GeckoView(Context, AttributeSet); method @NonNull @UiThread public GeckoResult<Bitmap> capturePixels(); method public void coverUntilFirstPaint(int);+ method public void dispatchDraw(@Nullable Canvas); method public boolean getAutofillEnabled(); method @NonNull public PanZoomController getPanZoomController(); method @AnyThread @Nullable public GeckoSession getSession();+ method public void onAttachedToWindow();+ method public void onDetachedFromWindow(); method @NonNull public GeckoResult<PanZoomController.InputResultDetail> onTouchEventForDetailResult(@NonNull MotionEvent); method @Nullable @UiThread public GeckoSession releaseSession(); method public void setAutofillEnabled(boolean);@@ -1459,6 +1600,9 @@ field @Nullable protected GeckoSession mSession; }+ @Retention(value=RetentionPolicy.SOURCE) public static interface GeckoView.ViewBackend {+ }+ @AnyThread public class GeckoWebExecutor { ctor public GeckoWebExecutor(@NonNull GeckoRuntime); method @NonNull public GeckoResult<WebResponse> fetch(@NonNull WebRequest);@@ -1470,6 +1614,9 @@ field public static final int FETCH_FLAGS_NO_REDIRECTS = 2; field public static final int FETCH_FLAGS_PRIVATE = 8; field public static final int FETCH_FLAGS_STREAM_FAILURE_TEST = 1024;+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface GeckoWebExecutor.FetchFlags { } @AnyThread public class Image {@@ -1530,6 +1677,9 @@ field public static final long SEEK_TO = 8L; field public static final long SKIP_AD = 64L; field public static final long STOP = 4L;+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface MediaSession.MSFeature { } public static class MediaSession.Metadata {@@ -1595,11 +1745,23 @@ field public static final int SCROLL_BEHAVIOR_SMOOTH = 0; }+ @Retention(value=RetentionPolicy.SOURCE) public static interface PanZoomController.InputResult {+ }+ public static class PanZoomController.InputResultDetail { ctor protected InputResultDetail(int, int, int); method @AnyThread public int handledResult(); method @AnyThread public int overscrollDirections(); method @AnyThread public int scrollableDirections();+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface PanZoomController.OverscrollDirections {+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface PanZoomController.ScrollBehaviorType {+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface PanZoomController.ScrollableDirections { } @UiThread public class ProfilerController {@@ -1638,7 +1800,7 @@ method @AnyThread default public void onStringScalar(@NonNull RuntimeTelemetry.Metric<String>); }- public static class RuntimeTelemetry.Histogram extends RuntimeTelemetry.Metric {+ public static class RuntimeTelemetry.Histogram extends RuntimeTelemetry.Metric<long[]> { ctor protected Histogram(); field public final boolean isCategorical; }@@ -1665,6 +1827,9 @@ field public static final int VISUAL_VIEWPORT_WIDTH = 1; }+ @Retention(value=RetentionPolicy.SOURCE) public static interface ScreenLength.ScreenLengthType {+ }+ @UiThread public class SessionAccessibility { method @Nullable public View getView(); method public boolean onMotionEvent(@NonNull MotionEvent);@@ -1726,6 +1891,9 @@ field public static final long PERMISSIONS = 64L; field public static final long SITE_DATA = 471L; field public static final long SITE_SETTINGS = 192L;+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface StorageController.StorageControllerClearFlags { } public class WebExtension {@@ -1756,11 +1924,17 @@ field @Nullable public final String title; }+ @Retention(value=RetentionPolicy.SOURCE) public static interface WebExtension.Action.ActionType {+ }+ public static interface WebExtension.ActionDelegate { method @UiThread default public void onBrowserAction(@NonNull WebExtension, @Nullable GeckoSession, @NonNull WebExtension.Action); method @Nullable @UiThread default public GeckoResult<GeckoSession> onOpenPopup(@NonNull WebExtension, @NonNull WebExtension.Action); method @UiThread default public void onPageAction(@NonNull WebExtension, @Nullable GeckoSession, @NonNull WebExtension.Action); method @Nullable @UiThread default public GeckoResult<GeckoSession> onTogglePopup(@NonNull WebExtension, @NonNull WebExtension.Action);+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface WebExtension.BlocklistState { } public static class WebExtension.BlocklistStateFlags {@@ -1797,6 +1971,12 @@ field public static final long HISTORY = 16L; field public static final long LOCAL_STORAGE = 32L; field public static final long PASSWORDS = 64L;+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface WebExtension.BrowsingDataTypes {+ }++ public static interface WebExtension.ContextFlags { } public static class WebExtension.CreateTabDetails {@@ -1897,6 +2077,12 @@ field public final boolean saveAs; }+ public static interface WebExtension.DownloadRequest.ConflictActionFlags {+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface WebExtension.EnabledFlags {+ }+ public static class WebExtension.Flags { ctor protected Flags(); field public static final long ALLOW_CONTENT_MESSAGING = 1L;@@ -1906,6 +2092,9 @@ public static class WebExtension.InstallException extends Exception { ctor protected InstallException(); field public final int code;+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface WebExtension.InstallException.Codes { } public static class WebExtension.InstallException.ErrorCodes {@@ -1936,6 +2125,9 @@ field @Nullable public final GeckoSession session; field @NonNull public final String url; field @NonNull public final WebExtension webExtension;+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface WebExtension.MessageSender.EnvType { } public class WebExtension.MetaData {@@ -1989,6 +2181,9 @@ method @NonNull @UiThread default public GeckoResult<AllowOrDeny> onUpdateTab(@NonNull WebExtension, @NonNull GeckoSession, @NonNull WebExtension.UpdateTabDetails); }+ @Retention(value=RetentionPolicy.SOURCE) public static interface WebExtension.SignedState {+ }+ public static class WebExtension.SignedStateFlags { ctor public SignedStateFlags(); field public static final int MISSING = 0;@@ -2012,6 +2207,9 @@ field @Nullable public final Boolean muted; field @Nullable public final Boolean pinned; field @Nullable public final String url;+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface WebExtension.WebExtensionFlags { } public class WebExtensionController {@@ -2041,6 +2239,9 @@ field public static final int USER = 1; }+ @Retention(value=RetentionPolicy.SOURCE) public static interface WebExtensionController.EnableSources {+ }+ @UiThread public static interface WebExtensionController.PromptDelegate { method @Nullable default public GeckoResult<AllowOrDeny> onInstallPrompt(@NonNull WebExtension); method @Nullable default public GeckoResult<AllowOrDeny> onUpdatePrompt(@NonNull WebExtension, @NonNull WebExtension, @NonNull String[], @NonNull String[]);@@ -2110,6 +2311,7 @@ field public static final int CACHE_MODE_NO_STORE = 2; field public static final int CACHE_MODE_ONLY_IF_CACHED = 6; field public static final int CACHE_MODE_RELOAD = 3;+ field public final boolean beConservative; field @Nullable public final ByteBuffer body; field public final int cacheMode; field @NonNull public final String method;@@ -2118,12 +2320,16 @@ @AnyThread public static class WebRequest.Builder extends WebMessage.Builder { ctor public Builder(@NonNull String);+ method @NonNull public WebRequest.Builder beConservative(boolean); method @NonNull public WebRequest.Builder body(@Nullable ByteBuffer); method @NonNull public WebRequest.Builder body(@Nullable String); method @NonNull public WebRequest build(); method @NonNull public WebRequest.Builder cacheMode(int); method @NonNull public WebRequest.Builder method(@NonNull String); method @NonNull public WebRequest.Builder referrer(@Nullable String);+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface WebRequest.CacheMode { } @AnyThread public class WebRequestError extends Exception {@@ -2169,6 +2375,12 @@ field public final int code; }+ @Retention(value=RetentionPolicy.SOURCE) public static interface WebRequestError.Error {+ }++ @Retention(value=RetentionPolicy.SOURCE) public static interface WebRequestError.ErrorCategory {+ }+ @AnyThread public class WebResponse extends WebMessage { ctor protected WebResponse(@NonNull WebResponse.Builder); method public void setReadTimeoutMillis(long);@@ -2190,9 +2402,5 @@ method @NonNull public WebResponse.Builder statusCode(int); }- protected static interface GeckoSession.PromptDelegate.BasePrompt.Observer {- method @AnyThread default public void onPromptCompleted(@NonNull GeckoSession.PromptDelegate.BasePrompt);- }- }
After analyzing the provided code diff, I don't find any clear security vulnerabilities that were fixed. The changes appear to be primarily: 1. Adding generic type parameters to various classes 2. Adding new annotation interfaces with RetentionPolicy.SOURCE 3. Some minor API refinements and additions Here's the structured analysis: Vulnerability Existed: no No security vulnerabilities found in the diff. The changes are primarily API refinements and additions. The changes include: 1. Adding generic type parameters to Autocomplete.SaveOption, Autocomplete.SelectOption and related classes 2. Adding new @Retention(SOURCE) annotation interfaces for various enums and flags 3. Some method signature changes (like GeckoResult.allOf now using varargs) 4. Adding new methods and fields (like beConservative in WebRequest) None of these changes appear to address security vulnerabilities - they seem to be API improvements and additions. If I had to identify the most significant change from a security perspective, it would be the addition of more specific type parameters which could help prevent type-related bugs, but this isn't fixing an existing 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/mozilla/tests/webdriver/new_session/invalid.py+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/testing/web-platform/mozilla/tests/webdriver/new_session/invalid.py@@ -6,7 +6,10 @@ @pytest.mark.parametrize( "headers", [- {"origin": "http://example.org"},+ {"origin": "http://localhost"},+ {"origin": "http://localhost:8000"},+ {"origin": "http://127.0.0.1"},+ {"origin": "http://127.0.0.1:8000"}, {"origin": "null"}, {"ORIGIN": "https://example.org"}, {"host": "example.org:4444"},
Based on the provided diff, I'll analyze it for security fixes: 1. Vulnerability Existed: not sure CORS Origin Validation [File] [Lines 6-9] [Old Code] {"origin": "http://example.org"} [Fixed Code] {"origin": "http://localhost"}, {"origin": "http://localhost:8000"}, {"origin": "http://127.0.0.1"}, {"origin": "http://127.0.0.1:8000"} Additional Details: - The change appears to be modifying test cases for origin headers, replacing a public domain (example.org) with localhost and loopback addresses - This might be related to tightening CORS origin validation, but without more context about the test's purpose, it's unclear if this represents an actual security fix or just test case updates - The change could be related to preventing DNS rebinding attacks by restricting origins to localhost/loopback, but this is speculative Note: Since this is test code, it might not represent an actual vulnerability fix but rather updated test cases to verify security behavior. The change suggests the system might have become more restrictive in what origins it accepts, but we'd need more context about the application's security model to be certain.
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.transparent.source-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.transparent.source-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, 0, 0.5)';@@ -22,7 +22,7 @@ ctx.globalCompositeOperation = 'source-atop'; ctx.fillStyle = 'rgba(0, 0, 255, 0.75)'; ctx.fillRect(0, 0, 100, 50);-_assertPixelApprox(offscreenCanvas, 50,25, 0,64,191,128, "50,25", "0,64,191,128", 5);+_assertPixelApprox(canvas, 50,25, 0,64,191,128, "50,25", "0,64,191,128", 5); t.done(); });
Based on the provided diff, I'll analyze it for security vulnerabilities: 1. Vulnerability Existed: no No specific vulnerability found [File] testing/web-platform/tests/html/canvas/offscreen/compositing/2d.composite.transparent.source-atop.worker.js [Lines] 13-22 [Old Code] var offscreenCanvas = new OffscreenCanvas(100, 50); var ctx = offscreenCanvas.getContext('2d'); [Fixed Code] var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); 2. Vulnerability Existed: no No specific vulnerability found [File] testing/web-platform/tests/html/canvas/offscreen/compositing/2d.composite.transparent.source-atop.worker.js [Lines] 22 [Old Code] _assertPixelApprox(offscreenCanvas, 50,25, 0,64,191,128, "50,25", "0,64,191,128", 5); [Fixed Code] _assertPixelApprox(canvas, 50,25, 0,64,191,128, "50,25", "0,64,191,128", 5); The changes appear to be purely variable renaming (from 'offscreenCanvas' to 'canvas') with no security implications. The functionality remains identical, and there are no security-related patterns or vulnerabilities being addressed in this diff.
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/devtools/client/debugger/src/actions/preview.js+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/devtools/client/debugger/src/actions/preview.js@@ -6,7 +6,6 @@ import { findBestMatchExpression } from "../utils/ast"; import { getGrip, getFront } from "../utils/evaluation-result"; import { getExpressionFromCoords } from "../utils/editor/get-expression";-import { isOriginal } from "../utils/source"; import { isNodeTest } from "../utils/environment"; import {@@ -89,7 +88,7 @@ const thread = getCurrentThread(getState()); const selectedFrame = getSelectedFrame(getState(), thread);- if (location && isOriginal(source)) {+ if (location && source.isOriginal) { const mapResult = await dispatch(getMappedExpression(expression)); if (mapResult) { expression = mapResult.expression;
Here's the analysis following the specified format: 1. Vulnerability Existed: not sure [Potential Information Exposure] [devtools/client/debugger/src/actions/preview.js] [Lines 89] [Old Code] `if (location && isOriginal(source)) {` [Fixed Code] `if (location && source.isOriginal) {` Additional Details: - The change involves replacing an imported utility function `isOriginal()` with a direct property check `source.isOriginal`. - While this doesn't immediately appear to be a security fix, it could potentially relate to more reliable source validation. - The original implementation might have had subtle differences in behavior that could lead to information exposure if the check wasn't properly implemented. - Without seeing the implementation of `isOriginal()`, we can't be certain if this was fixing a security issue. Note: If this were a security fix, it would most likely relate to ensuring proper source validation to prevent potential information exposure or incorrect debugging behavior. However, this appears more like a code cleanup/refactoring 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/jpeg-xl/lib/jxl/modular/encoding/context_predict.h+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/third_party/jpeg-xl/lib/jxl/modular/encoding/context_predict.h@@ -314,7 +314,8 @@ } bool p0 = properties[node.property0] <= node.splitval0; uint32_t off0 = properties[node.properties[0]] <= node.splitvals[0];- uint32_t off1 = 2 | (properties[node.properties[1]] <= node.splitvals[1]);+ uint32_t off1 =+ 2 | (properties[node.properties[1]] <= node.splitvals[1] ? 1 : 0); pos = node.childID + (p0 ? off1 : off0); } }
Here's the analysis following the requested format: Vulnerability Existed: not sure Potential Integer Overflow/Logical Error [third_party/jpeg-xl/lib/jxl/modular/encoding/context_predict.h] [Lines 314-317] [Old Code] uint32_t off1 = 2 | (properties[node.properties[1]] <= node.splitvals[1]); [Fixed Code] uint32_t off1 = 2 | (properties[node.properties[1]] <= node.splitvals[1] ? 1 : 0); Additional Details: The change introduces an explicit ternary operator to ensure the boolean comparison result is properly converted to 1 or 0 before being OR'ed with 2. While this could potentially fix a logical error or prevent unintended behavior, it's not clear if this was an actual security vulnerability or just a code quality improvement. The original code might have worked correctly due to implicit boolean-to-integer conversion, but the change makes the intention more explicit and potentially safer.
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.arc.shape.5.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.arc.shape.5.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,11 +23,11 @@ ctx.beginPath(); ctx.arc(300, 0, 100, 0, 5*Math.PI, false); ctx.stroke();-_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");-_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");-_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");-_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");-_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");+_assertPixel(canvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");+_assertPixel(canvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");+_assertPixel(canvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");+_assertPixel(canvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");+_assertPixel(canvas, 98,48, 0,255,0,255, "98,48", "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 variable renaming (from `offscreenCanvas` to `canvas`) and corresponding updates to function calls. Here's the analysis: Vulnerability Existed: no [No security vulnerability found] [testing/web-platform/tests/html/canvas/offscreen/path-objects/2d.path.arc.shape.5.worker.js] [Lines 13-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 cosmetic/refactoring in nature and don't address any security issues. The functionality remains exactly the same, only the variable name has been changed for consistency or clarity.
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-canvas-state/2d.state.saverestore.stackdepth.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-canvas-state/2d.state.saverestore.stackdepth.worker.js@@ -13,8 +13,8 @@ }); t.step(function() {-var offscreenCanvas = new OffscreenCanvas(100, 50);-var ctx = offscreenCanvas.getContext('2d');+var canvas = new OffscreenCanvas(100, 50);+var ctx = canvas.getContext('2d'); var limit = 512; for (var i = 1; i < limit; ++i)
Analysis of the provided code diff: 1. Vulnerability Existed: no No specific vulnerability found [File] [Lines 13-16] [Old Code] var offscreenCanvas = new OffscreenCanvas(100, 50); var ctx = offscreenCanvas.getContext('2d'); [Fixed Code] var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); The changes appear to be purely variable naming improvements (from 'offscreenCanvas' to 'canvas') rather than security fixes. No security vulnerabilities are evident in this diff. The modification doesn't affect the functionality or security of the code, it just makes the variable name more concise.
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/drawing-rectangles-to-the-canvas/2d.fillRect.zero.html+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/testing/web-platform/tests/html/canvas/offscreen/drawing-rectangles-to-the-canvas/2d.fillRect.zero.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 = '#0f0'; ctx.fillRect(0, 0, 100, 50);@@ -26,7 +26,7 @@ ctx.fillRect(0, 0, 100, 0); ctx.fillRect(0, 0, 0, 50); ctx.fillRect(0, 0, 0, 0);-_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 vulnerabilities being fixed. The changes appear to be purely cosmetic/refactoring changes where a variable name was changed from `offscreenCanvas` to `canvas` for consistency or readability purposes. Here's the structured response: Vulnerability Existed: no No security vulnerability found [testing/web-platform/tests/html/canvas/offscreen/drawing-rectangles-to-the-canvas/2d.fillRect.zero.html] [Lines 17-26] [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 don't affect any security-related functionality, input validation, or output handling. The test logic remains exactly the same, only the variable name was changed.
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/examples/fallible_read.rs+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/third_party/rust/darling/examples/fallible_read.rs@@ -3,24 +3,22 @@ //! //! 1. Using `darling::Result` as a carrier to preserve the error for later display //! 1. Using `Result<T, syn::Meta>` to attempt a recovery in imperative code-//! 1. Using the `map` darling meta-item to post-process the receiver before returning.-#[macro_use]-extern crate darling;--extern crate syn;+//! 1. Using the `map` darling meta-item to post-process a field before returning+//! 1. Using the `and_then` darling meta-item to post-process the receiver before returning use darling::{FromDeriveInput, FromMeta}; use syn::parse_str; #[derive(Debug, FromDeriveInput)]-#[darling(attributes(my_trait), map = "MyInputReceiver::autocorrect")]+#[darling(attributes(my_trait), and_then = "MyInputReceiver::autocorrect")] pub struct MyInputReceiver { /// This field must be present and a string or else parsing will panic.+ #[darling(map = "MyInputReceiver::make_string_shouty")] name: String, /// If this field fails to parse, the struct can still be built; the field /// will contain the error. The consuming struct can then decide if this- /// blocks code generation. If so, panic. Otherwise, recover and proceed.+ /// blocks code generation. If so, panic or fail in `and_then`. frequency: darling::Result<i64>, /// If this field fails to parse, the struct can still be built; the field@@ -31,10 +29,18 @@ impl MyInputReceiver { /// This function will be called by `darling` _after_ it's finished parsing the+ /// `name` field but before initializing `name` with the resulting value. It's+ /// a good place for transforms that are easiest to express on already-built+ /// types.+ fn make_string_shouty(s: String) -> String {+ s.to_uppercase()+ }++ /// This function will be called by `darling` _after_ it's finished parsing the /// input but before returning to the caller. This is a good place to initialize /// skipped fields or to perform corrections that don't lend themselves to being /// done elsewhere.- fn autocorrect(self) -> Self {+ fn autocorrect(self) -> darling::Result<Self> { let Self { name, frequency,@@ -45,28 +51,20 @@ // we'll go ahead and make it positive. let amplitude = match amplitude { Ok(amp) => amp,- Err(mi) => {- let val: i64 = if let Ok(v) = FromMeta::from_meta(&mi) {- v- } else {- panic!(format!("amplitude should have been an integer"))- };-- val.abs() as u64- }+ Err(mi) => (i64::from_meta(&mi)?).abs() as u64, };- Self {+ Ok(Self { name, frequency, amplitude: Ok(amplitude),- }+ }) } } fn main() { let input = r#"#[derive(MyTrait)]-#[my_trait(name="Jon", amplitude = "-1", frequency = "1")]+#[my_trait(name="Jon", amplitude = "-1", frequency = 1)] pub struct Foo;"#; let parsed = parse_str(input).unwrap();
After analyzing the code diff, I don't identify any clear security vulnerabilities. The changes appear to be primarily about improving error handling and code organization rather than fixing security issues. Here's my analysis: 1. Vulnerability Existed: no The changes involve refactoring the error handling and post-processing logic: - Changed `map` to `and_then` for the receiver autocorrect functionality - Added a new `map` function for the name field transformation - Improved error handling in the `autocorrect` method to use `?` operator - Changed example input frequency from string to integer 2. Vulnerability Existed: no The changes in error handling patterns: - Old code used panic for error handling in some cases - New code uses Result-based error handling more consistently - Added proper error propagation with `?` operator 3. Vulnerability Existed: no The changes in attribute processing: - Added `make_string_shouty` as a transformation function - Modified the `autocorrect` function to return a Result - Updated documentation comments These changes appear to be quality improvements rather than security fixes. The modifications make the code more robust and maintainable, but don't address any specific security vulnerabilities. The error handling improvements could potentially prevent some runtime errors, but these wouldn't typically be classified as security vulnerabilities.
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/testing/web-platform/tests/css/css-contain/contain-size-monolithic-001.html+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/testing/web-platform/tests/css/css-contain/contain-size-monolithic-001.html@@ -10,7 +10,6 @@ <link rel="match" href="reference/contain-size-monolithic-001-ref.html"> <meta content="This test checks that an element with size containment becomes monolithic. In this test, the only way to break the content of such monolithic element is to break (or slice) the content at each pair of characters. Since column rules are only drawn between two columns that both have content and since the test expects only 1 column filled with content, therefore the column rule should not be painted, thus the 'no red' test success condition." name="assert">- <meta name="flags" content=""> <style> div#multi-column
Analysis of the code diff: 1. Vulnerability Existed: no [Removal of empty meta tag] [File: testing/web-platform/tests/css/css-contain/contain-size-monolithic-001.html] [Lines: 10] [Old Code: `<meta name="flags" content="">`] [Fixed Code: (removed line)] Additional Details: This appears to be a cleanup of an empty meta tag rather than a security fix. No vulnerability is being addressed here.
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/vm/HelperThreads.cpp+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/js/src/vm/HelperThreads.cpp@@ -8,14 +8,16 @@ #include "mozilla/DebugOnly.h" #include "mozilla/Maybe.h"+#include "mozilla/ReverseIterator.h" // mozilla::Reversed(...) #include "mozilla/ScopeExit.h"+#include "mozilla/Span.h" // mozilla::Span<TaggedScriptThingIndex> #include "mozilla/Utf8.h" // mozilla::Utf8Unit #include <algorithm>-#include "frontend/BytecodeCompilation.h" // frontend::CompileGlobalScriptToStencil-#include "frontend/BytecodeCompiler.h" // frontend::ParseModuleToStencil-#include "frontend/CompilationStencil.h" // frontend::{CompilationStencil, CompilationInput, CompilationGCOutput}+#include "frontend/BytecodeCompilation.h" // frontend::{CompileGlobalScriptToExtensibleStencil, FireOnNewScript}+#include "frontend/BytecodeCompiler.h" // frontend::ParseModuleToExtensibleStencil+#include "frontend/CompilationStencil.h" // frontend::{CompilationStencil, ExtensibleCompilationStencil, CompilationInput, BorrowingCompilationStencil, ScriptStencilRef} #include "jit/IonCompileTask.h" #include "jit/JitRuntime.h" #include "js/CompileOptions.h" // JS::CompileOptions, JS::DecodeOptions, JS::ReadOnlyCompileOptions@@ -598,6 +600,11 @@ void ParseTask::runHelperThreadTask(AutoLockHelperThreadState& locked) { runTask(locked);+ // Schedule DelazifyTask if needed. NOTE: This should be done before adding+ // this task to the finished list, as we temporarily release the lock to make+ // a few large allocations.+ scheduleDelazifyTask(locked);+ // The callback is invoked while we are still off thread. callback(this, callbackData);@@ -621,6 +628,66 @@ MOZ_ASSERT(cx->tempLifoAlloc().isEmpty()); cx->tempLifoAlloc().freeAll(); cx->frontendCollectionPool().purge();+}++void ParseTask::scheduleDelazifyTask(AutoLockHelperThreadState& lock) {+ if (!stencil_) {+ return;+ }++ // Skip delazify tasks if we parese everything on-demand or ahead.+ auto strategy = options.eagerDelazificationStrategy();+ if (strategy == JS::DelazificationOption::OnDemandOnly ||+ strategy == JS::DelazificationOption::ParseEverythingEagerly) {+ return;+ }++ UniquePtr<DelazifyTask> task;+ {+ AutoSetHelperThreadContext usesContext(lock);+ AutoUnlockHelperThreadState unlock(lock);+ JSContext* cx = TlsContext.get();+ AutoSetContextRuntime ascr(runtime);++ // DelazifyTask are capturing errors. This is created here to capture errors+ // as-if they were part of the to-be constructed DelazifyTask. This is also+ // the reason why we move this structure to the DelazifyTask once created.+ //+ // In case of early failure, no errors are reported, as a DelazifyTask is an+ // optimization and the VM should remain working even without this+ // optimization in place.+ OffThreadFrontendErrors errors;+ AutoSetContextOffThreadFrontendErrors recordErrors(&errors);++ task.reset(js_new<DelazifyTask>(runtime));+ if (!task) {+ return;+ }++ RefPtr<ScriptSource> source(stencil_->source);+ StencilCache& cache = runtime->caches().delazificationCache;+ if (!cache.startCaching(std::move(source))) {+ return;+ }++ // Clone the extensible stencil to be used for eager delazification.+ auto initial = cx->make_unique<frontend::ExtensibleCompilationStencil>(+ cx, options, stencil_->source);+ if (!initial->cloneFrom(cx, *stencil_)) {+ // In case of errors, skip this and delazify on-demand.+ return;+ }++ if (!task->init(cx, options, std::move(initial))) {+ // In case of errors, skip this and delazify on-demand.+ return;+ }++ task->errors_ = std::move(errors);+ }++ // Schedule delazification task.+ HelperThreadState().submitTask(task.release(), lock); } template <typename Unit>@@ -791,6 +858,199 @@ break; } }+}++bool DepthFirstDelazification::add(JSContext* cx,+ const frontend::CompilationStencil& stencil,+ ScriptIndex index) {+ using namespace js::frontend;+ ScriptStencilRef scriptRef{stencil, index};++ // Only functions with bytecode are allowed to be added.+ MOZ_ASSERT(!scriptRef.scriptData().isGhost());+ MOZ_ASSERT(scriptRef.scriptData().hasSharedData());++ // Lookup the gc-things range which are referenced by this script.+ size_t offset = scriptRef.scriptData().gcThingsOffset.index;+ size_t length = scriptRef.scriptData().gcThingsLength;+ auto gcThingData = stencil.gcThingData.Subspan(offset, length);++ // Iterate over gc-things of the script and queue inner functions.+ for (TaggedScriptThingIndex index : mozilla::Reversed(gcThingData)) {+ if (!index.isFunction()) {+ continue;+ }++ ScriptIndex innerScriptIndex = index.toFunction();+ ScriptStencilRef innerScriptRef{stencil, innerScriptIndex};+ if (innerScriptRef.scriptData().isGhost()) {+ continue;+ }+ if (innerScriptRef.scriptData().hasSharedData()) {+ // The top-level parse decided to eagerly parse this function, thus we+ // should visit its inner function the same way.+ if (!add(cx, stencil, innerScriptIndex)) {+ return false;+ }+ continue;+ }++ if (!stack.append(innerScriptIndex)) {+ ReportOutOfMemory(cx);+ return false;+ }+ }++ return true;+}++DelazifyTask::DelazifyTask(JSRuntime* runtime)+ : runtime(runtime), merger(), errors_() {+ AutoLockScriptData alsd(runtime);+ runtime->addParseTaskRef();+}++bool DelazifyTask::init(+ JSContext* cx, const JS::ReadOnlyCompileOptions& options,+ UniquePtr<frontend::ExtensibleCompilationStencil>&& initial) {+ using namespace js::frontend;+ if (!merger.setInitial(cx, std::move(initial))) {+ return false;+ }++ switch (options.eagerDelazificationStrategy()) {+ case JS::DelazificationOption::OnDemandOnly:+ // OnDemandOnly will parse function as they are require to continue the+ // execution on the main thread.+ MOZ_CRASH("OnDemandOnly should not create a DelazifyTask.");+ break;+ case JS::DelazificationOption::ConcurrentDepthFirst:+ // ConcurrentDepthFirst visit all functions to be delazified, visiting the+ // inner functions before the siblings functions.+ strategy = cx->make_unique<DepthFirstDelazification>();+ break;+ case JS::DelazificationOption::ConcurrentBreathFirst:+ // ConcurrentDepthFirst visit all functions to be delazified, visiting the+ // siblings functions before the inner functions.+ MOZ_CRASH("Strategy is not yet implemented");+ break;+ case JS::DelazificationOption::ConcurrentMostFrequentNameFirst:+ // ConcurrentMostFrequentNameFirst uses the frequency of names to+ // determine the order in which functions should be delazified. Unamed+ // functions are delazified first.+ MOZ_CRASH("Strategy is not yet implemented");+ break;+ case JS::DelazificationOption::ParseEverythingEagerly:+ // ParseEverythingEagerly parse all functions eagerly, thus leaving no+ // functions to be parsed on demand.+ MOZ_CRASH("ParseEverythingEagerly should not create a DelazifyTask");+ break;+ }++ // Queue functions from the top-level to be delazify.+ BorrowingCompilationStencil borrow(merger.getResult());+ ScriptIndex topLevel{0};+ return strategy->add(cx, borrow, topLevel);+}++size_t DelazifyTask::sizeOfExcludingThis(+ mozilla::MallocSizeOf mallocSizeOf) const {+ size_t mergerSize = merger.getResult().sizeOfIncludingThis(mallocSizeOf);+ return mergerSize;+}++void DelazifyTask::runHelperThreadTask(AutoLockHelperThreadState& lock) {+ {+ AutoSetHelperThreadContext usesContext(lock);+ AutoUnlockHelperThreadState unlock(lock);+ JSContext* cx = TlsContext.get();+ if (!runTask(cx)) {+ // NOTE: We do not report errors beyond this scope, as there is no where+ // to report these errors to. In the mean time, prevent the eager+ // delazification from running after any kind of errors.+ strategy->clear();+ }+ MOZ_ASSERT(cx->tempLifoAlloc().isEmpty());+ cx->tempLifoAlloc().freeAll();+ cx->frontendCollectionPool().purge();+ }++ // If we should continue to delazify even more functions, then re-add this+ // task to the vector of delazification tasks.+ if (!strategy->done()) {+ HelperThreadState().submitTask(this, lock);+ } else {+ UniquePtr<FreeDelazifyTask> freeTask(js_new<FreeDelazifyTask>(this));+ if (freeTask) {+ HelperThreadState().submitTask(std::move(freeTask), lock);+ }+ }+}++bool DelazifyTask::runTask(JSContext* cx) {+ AutoSetContextRuntime ascr(runtime);+ AutoSetContextOffThreadFrontendErrors recordErrors(&this->errors_);+ gc::AutoSuppressNurseryCellAlloc noNurseryAlloc(cx);++ using namespace js::frontend;+ RefPtr<CompilationStencil> innerStencil;+ ScriptIndex scriptIndex = strategy->next();+ {+ BorrowingCompilationStencil borrow(merger.getResult());++ // Take the next inner function to be delazified.+ ScriptStencilRef scriptRef{borrow, scriptIndex};+ MOZ_ASSERT(!scriptRef.scriptData().isGhost());+ MOZ_ASSERT(!scriptRef.scriptData().hasSharedData());++ // Parse and generate bytecode for the inner function.+ innerStencil = DelazifyCanonicalScriptedFunction(cx, borrow, scriptIndex);+ if (!innerStencil) {+ return false;+ }++ // Add the generated stencil to the cache, to be consumed by the main+ // thread.+ StencilCache& cache = runtime->caches().delazificationCache;+ StencilContext key(borrow.source, scriptRef.scriptExtra().extent);+ if (auto guard = cache.isSourceCached(borrow.source)) {+ if (!cache.putNew(guard, key, innerStencil.get())) {+ ReportOutOfMemory(cx);+ return false;+ }+ } else {+ // Stencils for this source are not longer accepted in the cache, thus+ // there is no reason to keep our eager delazification going.+ strategy->clear();+ return true;+ }+ }++ // We are merging the delazification now, while this could be post-poned until+ // we have to look at inner functions, this is simpler to do it now than+ // querying the cache for every enclosing script.+ if (!merger.addDelazification(cx, *innerStencil)) {+ return false;+ }++ {+ BorrowingCompilationStencil borrow(merger.getResult());+ if (!strategy->add(cx, borrow, scriptIndex)) {+ return false;+ }+ }++ return true;+}++void FreeDelazifyTask::runHelperThreadTask(AutoLockHelperThreadState& locked) {+ {+ AutoUnlockHelperThreadState unlock(locked);+ js_delete(task);+ task = nullptr;+ }++ js_delete(this); } static void WaitForOffThreadParses(JSRuntime* rt,@@ -872,6 +1132,103 @@ #endif }+static void CancelPendingDelazifyTask(JSRuntime* rt,+ AutoLockHelperThreadState& lock) {+ auto& delazifyList = HelperThreadState().delazifyWorklist(lock);++ auto end = delazifyList.end();+ for (auto iter = delazifyList.begin(); iter != end;) {+ DelazifyTask* task = *iter;+ ++iter;+ if (task->runtimeMatches(rt)) {+ task->removeFrom(delazifyList);+ js_delete(task);+ }+ }+}++static void WaitUntilCancelledDelazifyTasks(JSRuntime* rt,+ AutoLockHelperThreadState& lock) {+ if (!HelperThreadState().isInitialized(lock)) {+ return;+ }++ while (true) {+ CancelPendingDelazifyTask(rt, lock);++ // If running tasks are delazifying any functions, then we have to wait+ // until they complete to remove them from the pending list. DelazifyTask+ // are inserting themself back to be processed once more after delazifying a+ // function.+ bool inProgress = false;+ for (auto* helper : HelperThreadState().helperTasks(lock)) {+ if (helper->is<DelazifyTask>() &&+ helper->as<DelazifyTask>()->runtimeMatches(rt)) {+ inProgress = true;+ break;+ }+ }+ if (!inProgress) {+ break;+ }++ HelperThreadState().wait(lock);+ }++#ifdef DEBUG+ for (DelazifyTask* task : HelperThreadState().delazifyWorklist(lock)) {+ MOZ_ASSERT(!task->runtimeMatches(rt));+ }+ for (auto* helper : HelperThreadState().helperTasks(lock)) {+ MOZ_ASSERT_IF(helper->is<DelazifyTask>(),+ !helper->as<DelazifyTask>()->runtimeMatches(rt));+ }+#endif+}++static void WaitUntilEmptyFreeDelazifyTaskVector(+ AutoLockHelperThreadState& lock) {+ if (!HelperThreadState().isInitialized(lock)) {+ return;+ }++ while (true) {+ bool inProgress = false;+ auto& freeList = HelperThreadState().freeDelazifyTaskVector(lock);+ if (!freeList.empty()) {+ inProgress = true;+ }++ // If running tasks are delazifying any functions, then we have to wait+ // until they complete to remove them from the pending list. DelazifyTask+ // are inserting themself back to be processed once more after delazifying a+ // function.+ for (auto* helper : HelperThreadState().helperTasks(lock)) {+ if (helper->is<FreeDelazifyTask>()) {+ inProgress = true;+ break;+ }+ }+ if (!inProgress) {+ break;+ }++ HelperThreadState().wait(lock);+ }+}++void js::CancelOffThreadDelazify(JSRuntime* runtime) {+ AutoLockHelperThreadState lock;++ // Cancel all Delazify tasks from the given runtime, and wait if tasks are+ // from the given runtime are being executed.+ WaitUntilCancelledDelazifyTasks(runtime, lock);++ // Empty the free list of delazify task, in case one of the delazify task+ // ended and therefore did not returned to the pending list of delazify tasks.+ WaitUntilEmptyFreeDelazifyTaskVector(lock);+}+ static bool QueueOffThreadParseTask(JSContext* cx, UniquePtr<ParseTask> task) { AutoLockHelperThreadState lock;@@ -893,6 +1250,21 @@ parseWorklist(locked).back()->activate(rt);+ dispatch(locked);+ return true;+}++void GlobalHelperThreadState::submitTask(+ DelazifyTask* task, const AutoLockHelperThreadState& locked) {+ delazifyWorklist(locked).insertBack(task);+ dispatch(locked);+}++bool GlobalHelperThreadState::submitTask(+ UniquePtr<FreeDelazifyTask> task, const AutoLockHelperThreadState& locked) {+ if (!freeDelazifyTaskVector(locked).append(std::move(task))) {+ return false;+ } dispatch(locked); return true; }@@ -1010,12 +1382,11 @@ return StartOffThreadParseTask(cx, std::move(task), compileOptions); }-#ifdef DEBUG bool js::CurrentThreadIsParseThread() { JSContext* cx = TlsContext.get();+ // Check whether this is a ParseTask or a DelazifyTask. return cx->isHelperThreadContext() && cx->offThreadFrontendErrors(); }-#endif bool GlobalHelperThreadState::ensureInitialized() { MOZ_ASSERT(CanUseExtraThreads());@@ -1650,6 +2021,44 @@ /*isMaster=*/true, lock); }+HelperThreadTask* GlobalHelperThreadState::maybeGetFreeDelazifyTask(+ const AutoLockHelperThreadState& lock) {+ auto& freeList = freeDelazifyTaskVector(lock);+ if (!freeList.empty()) {+ UniquePtr<FreeDelazifyTask> task = std::move(freeList.back());+ freeList.popBack();+ return task.release();+ }+ return nullptr;+}++bool GlobalHelperThreadState::canStartFreeDelazifyTask(+ const AutoLockHelperThreadState& lock) {+ return !freeDelazifyTaskVector(lock).empty() &&+ checkTaskThreadLimit(THREAD_TYPE_DELAZIFY_FREE, maxParseThreads(),+ /*isMaster=*/true, lock);+}++HelperThreadTask* GlobalHelperThreadState::maybeGetDelazifyTask(+ const AutoLockHelperThreadState& lock) {+ // NOTE: We want to span all cores availables with delazification tasks, in+ // order to parse a maximum number of functions ahead of their executions.+ // Thus, as opposed to parse task which have a higher priority, we are not+ // exclusively executing these task on parse threads.+ auto& worklist = delazifyWorklist(lock);+ if (worklist.isEmpty()) {+ return nullptr;+ }+ return worklist.popFirst();+}++bool GlobalHelperThreadState::canStartDelazifyTask(+ const AutoLockHelperThreadState& lock) {+ return !delazifyWorklist(lock).isEmpty() &&+ checkTaskThreadLimit(THREAD_TYPE_DELAZIFY, maxParseThreads(),+ /*isMaster=*/true, lock);+}+ HelperThreadTask* GlobalHelperThreadState::maybeGetCompressionTask( const AutoLockHelperThreadState& lock) { if (!canStartCompressionTask(lock)) {@@ -2176,6 +2585,8 @@ &GlobalHelperThreadState::maybeGetWasmTier1CompileTask, &GlobalHelperThreadState::maybeGetPromiseHelperTask, &GlobalHelperThreadState::maybeGetParseTask,+ &GlobalHelperThreadState::maybeGetFreeDelazifyTask,+ &GlobalHelperThreadState::maybeGetDelazifyTask, &GlobalHelperThreadState::maybeGetCompressionTask, &GlobalHelperThreadState::maybeGetLowPrioIonCompileTask, &GlobalHelperThreadState::maybeGetIonFreeTask,@@ -2187,6 +2598,7 @@ return canStartGCParallelTask(lock) || canStartIonCompileTask(lock) || canStartWasmTier1CompileTask(lock) || canStartPromiseHelperTask(lock) || canStartParseTask(lock) ||+ canStartFreeDelazifyTask(lock) || canStartDelazifyTask(lock) || canStartCompressionTask(lock) || canStartIonFreeTask(lock) || canStartWasmTier2CompileTask(lock) || canStartWasmTier2GeneratorTask(lock);
After analyzing the code diff, I don't identify any clear security vulnerabilities being fixed. The changes appear to primarily add new functionality for delazification tasks and related infrastructure rather than fixing security issues. Here's the analysis following your requested format: Vulnerability Existed: no No security vulnerabilities identified [js/src/vm/HelperThreads.cpp] [All lines] [Old Code] [No relevant old code showing vulnerabilities] [Fixed Code] [No relevant fixes for vulnerabilities] The main changes in this diff are: 1. Adding new DelazifyTask functionality for concurrent parsing 2. Implementing depth-first delazification strategy 3. Adding infrastructure for managing delazification tasks 4. Adding new helper thread task types for delazification These changes appear to be feature additions and architectural improvements rather than security fixes. The code includes proper error handling and memory management patterns. If there were any security concerns being addressed, they would likely be more subtle architectural improvements rather than direct vulnerability fixes, but I don't see any clear vulnerabilities in the changes shown.
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.isPointInPath.transform.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/path-objects/2d.path.isPointInPath.transform.2.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.rect(50, 0, 20, 20); ctx.translate(50, 0);
Analyzing the provided code diff, here's the security assessment: Vulnerability Existed: no [Variable Renaming] [testing/web-platform/tests/html/canvas/offscreen/path-objects/2d.path.isPointInPath.transform.2.worker.js] [Lines 13-14] [Old Code] var offscreenCanvas = new OffscreenCanvas(100, 50); var ctx = offscreenCanvas.getContext('2d'); [Fixed Code] var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); Additional Details: - The change appears to be purely a variable renaming from `offscreenCanvas` to `canvas` - No security vulnerability is being addressed here - This is likely a code style/consistency improvement rather than a security fix - The functionality remains exactly the same, just with a different variable name No other vulnerabilities or potential security issues 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/taskcluster/ci/toolchain/geckodriver.yml+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/taskcluster/ci/toolchain/geckodriver.yml@@ -61,7 +61,7 @@ fetches: toolchain: - linux64-cctools-port- - linux64-clang+ - linux64-clang-toolchain - linux64-rust-macos - macosx64-sdk-11.0@@ -76,7 +76,7 @@ fetches: toolchain: - linux64-cctools-port- - linux64-clang+ - linux64-clang-toolchain - linux64-rust-macos - macosx64-sdk-11.0@@ -97,7 +97,7 @@ build_platform: win32-geckodriver fetches: toolchain:- - linux64-clang+ - linux64-clang-toolchain - linux64-liblowercase - linux64-rust-windows@@ -118,6 +118,6 @@ build_platform: win64-geckodriver fetches: toolchain:- - linux64-clang+ - linux64-clang-toolchain - linux64-liblowercase - linux64-rust-windows
Based on the provided diff, I don't see any clear security vulnerabilities being fixed. The changes appear to be toolchain dependency updates rather than security fixes. Here's the analysis: Vulnerability Existed: no [No Vulnerability Found] [taskcluster/ci/toolchain/geckodriver.yml] [Lines 61,76,97,118] [Old Code] - linux64-clang [Fixed Code] + linux64-clang-toolchain The changes simply replace references to "linux64-clang" with "linux64-clang-toolchain" in multiple locations, which appears to be a naming update or dependency change rather than a security fix. There are no obvious security implications from this change.
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/dom/media/platforms/ffmpeg/FFmpegLibWrapper.cpp+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/dom/media/platforms/ffmpeg/FFmpegLibWrapper.cpp@@ -142,11 +142,14 @@ AV_FUNC(av_parser_init, AV_FUNC_AVCODEC_ALL) AV_FUNC(av_parser_close, AV_FUNC_AVCODEC_ALL) AV_FUNC(av_parser_parse2, AV_FUNC_AVCODEC_ALL)+ AV_FUNC(avcodec_align_dimensions, AV_FUNC_AVCODEC_ALL) AV_FUNC(avcodec_alloc_frame, (AV_FUNC_53 | AV_FUNC_54)) AV_FUNC(avcodec_get_frame_defaults, (AV_FUNC_53 | AV_FUNC_54)) AV_FUNC(avcodec_free_frame, AV_FUNC_54) AV_FUNC(avcodec_send_packet, AV_FUNC_58) AV_FUNC(avcodec_receive_frame, AV_FUNC_58)+ AV_FUNC(avcodec_default_get_buffer2,+ (AV_FUNC_55 | AV_FUNC_56 | AV_FUNC_57 | AV_FUNC_58)) AV_FUNC_OPTION(av_rdft_init, AV_FUNC_AVCODEC_ALL) AV_FUNC_OPTION(av_rdft_calc, AV_FUNC_AVCODEC_ALL) AV_FUNC_OPTION(av_rdft_end, AV_FUNC_AVCODEC_ALL)@@ -159,12 +162,24 @@ AV_FUNC_AVUTIL_57 | AV_FUNC_AVUTIL_58)) AV_FUNC(av_frame_unref, (AV_FUNC_AVUTIL_55 | AV_FUNC_AVUTIL_56 | AV_FUNC_AVUTIL_57 | AV_FUNC_AVUTIL_58))+ AV_FUNC(av_image_check_size, AV_FUNC_AVUTIL_ALL)+ AV_FUNC(av_image_get_buffer_size, AV_FUNC_AVUTIL_ALL)+ AV_FUNC_OPTION(av_buffer_get_opaque,+ (AV_FUNC_AVUTIL_56 | AV_FUNC_AVUTIL_57 | AV_FUNC_AVUTIL_58))+ AV_FUNC(av_buffer_create, (AV_FUNC_AVUTIL_55 | AV_FUNC_AVUTIL_56 |+ AV_FUNC_AVUTIL_57 | AV_FUNC_AVUTIL_58)) AV_FUNC_OPTION(av_frame_get_colorspace, AV_FUNC_AVUTIL_ALL) AV_FUNC_OPTION(av_frame_get_color_range, AV_FUNC_AVUTIL_ALL)+ #ifdef MOZ_WAYLAND AV_FUNC_OPTION_SILENT(avcodec_get_hw_config, AV_FUNC_58)+ AV_FUNC_OPTION_SILENT(av_codec_iterate, AV_FUNC_58)+ AV_FUNC_OPTION_SILENT(av_codec_is_decoder, AV_FUNC_58) AV_FUNC_OPTION_SILENT(av_hwdevice_ctx_init, AV_FUNC_58) AV_FUNC_OPTION_SILENT(av_hwdevice_ctx_alloc, AV_FUNC_58)+ AV_FUNC_OPTION_SILENT(av_hwdevice_hwconfig_alloc, AV_FUNC_58)+ AV_FUNC_OPTION_SILENT(av_hwdevice_get_hwframe_constraints, AV_FUNC_58)+ AV_FUNC_OPTION_SILENT(av_hwframe_constraints_free, AV_FUNC_58) AV_FUNC_OPTION_SILENT(av_buffer_ref, AV_FUNC_AVUTIL_58) AV_FUNC_OPTION_SILENT(av_buffer_unref, AV_FUNC_AVUTIL_58) AV_FUNC_OPTION_SILENT(av_hwframe_transfer_get_formats, AV_FUNC_58)@@ -172,6 +187,8 @@ AV_FUNC_OPTION_SILENT(av_hwframe_ctx_alloc, AV_FUNC_58) AV_FUNC_OPTION_SILENT(av_dict_set, AV_FUNC_58) AV_FUNC_OPTION_SILENT(av_dict_free, AV_FUNC_58)+ AV_FUNC_OPTION_SILENT(avcodec_get_name, AV_FUNC_58)+ AV_FUNC_OPTION_SILENT(av_get_pix_fmt_string, AV_FUNC_AVUTIL_58) #endif #undef AV_FUNC #undef AV_FUNC_OPTION@@ -190,17 +207,6 @@ VA_FUNC_OPTION_SILENT(vaTerminate) } # undef VA_FUNC_OPTION_SILENT--# define VAW_FUNC_OPTION_SILENT(func) \- if (!(func = (decltype(func))PR_FindSymbol(mVALibWayland, #func))) { \- FFMPEG_LOG("Couldn't load function " #func); \- }-- // mVALibWayland is optional and may not be present.- if (mVALibWayland) {- VAW_FUNC_OPTION_SILENT(vaGetDisplayWl)- }-# undef VAW_FUNC_OPTION_SILENT # define VAD_FUNC_OPTION_SILENT(func) \ if (!(func = (decltype(func))PR_FindSymbol(mVALibDrm, #func))) { \@@ -247,9 +253,6 @@ if (mVALib) { PR_UnloadLibrary(mVALib); }- if (mVALibWayland) {- PR_UnloadLibrary(mVALibWayland);- } if (mVALibDrm) { PR_UnloadLibrary(mVALibDrm); }@@ -259,40 +262,31 @@ #ifdef MOZ_WAYLAND void FFmpegLibWrapper::LinkVAAPILibs() {- if (widget::GetDMABufDevice()->IsDMABufVAAPIEnabled()) {- PRLibSpec lspec;- lspec.type = PR_LibSpec_Pathname;- const char* libDrm = "libva-drm.so.2";- lspec.value.pathname = libDrm;- mVALibDrm = PR_LoadLibraryWithFlags(lspec, PR_LD_NOW | PR_LD_LOCAL);- if (!mVALibDrm) {- FFMPEG_LOG("VA-API support: Missing or old %s library.\n", libDrm);- }-- if (!StaticPrefs::media_ffmpeg_vaapi_drm_display_enabled()) {- const char* libWayland = "libva-wayland.so.2";- lspec.value.pathname = libWayland;- mVALibWayland = PR_LoadLibraryWithFlags(lspec, PR_LD_NOW | PR_LD_LOCAL);- if (!mVALibWayland) {- FFMPEG_LOG("VA-API support: Missing or old %s library.\n", libWayland);- }- }-- if (mVALibWayland || mVALibDrm) {- const char* lib = "libva.so.2";- lspec.value.pathname = lib;- mVALib = PR_LoadLibraryWithFlags(lspec, PR_LD_NOW | PR_LD_LOCAL);- // Don't use libva when it's missing vaExportSurfaceHandle.- if (mVALib && !PR_FindSymbol(mVALib, "vaExportSurfaceHandle")) {- PR_UnloadLibrary(mVALib);- mVALib = nullptr;- }- if (!mVALib) {- FFMPEG_LOG("VA-API support: Missing or old %s library.\n", lib);- }- }- } else {+ if (!widget::GetDMABufDevice()->IsDMABufVAAPIEnabled()) { FFMPEG_LOG("VA-API FFmpeg is disabled by platform");+ return;+ }++ PRLibSpec lspec;+ lspec.type = PR_LibSpec_Pathname;+ const char* libDrm = "libva-drm.so.2";+ lspec.value.pathname = libDrm;+ mVALibDrm = PR_LoadLibraryWithFlags(lspec, PR_LD_NOW | PR_LD_LOCAL);+ if (!mVALibDrm) {+ FFMPEG_LOG("VA-API support: Missing or old %s library.\n", libDrm);+ return;+ }++ const char* lib = "libva.so.2";+ lspec.value.pathname = lib;+ mVALib = PR_LoadLibraryWithFlags(lspec, PR_LD_NOW | PR_LD_LOCAL);+ // Don't use libva when it's missing vaExportSurfaceHandle.+ if (mVALib && !PR_FindSymbol(mVALib, "vaExportSurfaceHandle")) {+ PR_UnloadLibrary(mVALib);+ mVALib = nullptr;+ }+ if (!mVALib) {+ FFMPEG_LOG("VA-API support: Missing or old %s library.\n", lib); } } #endif@@ -303,15 +297,18 @@ return VA_FUNC_LOADED(avcodec_get_hw_config) && VA_FUNC_LOADED(av_hwdevice_ctx_alloc) && VA_FUNC_LOADED(av_hwdevice_ctx_init) &&+ VA_FUNC_LOADED(av_hwdevice_hwconfig_alloc) &&+ VA_FUNC_LOADED(av_hwdevice_get_hwframe_constraints) &&+ VA_FUNC_LOADED(av_hwframe_constraints_free) && VA_FUNC_LOADED(av_buffer_ref) && VA_FUNC_LOADED(av_buffer_unref) && VA_FUNC_LOADED(av_hwframe_transfer_get_formats) && VA_FUNC_LOADED(av_hwdevice_ctx_create_derived) && VA_FUNC_LOADED(av_hwframe_ctx_alloc) && VA_FUNC_LOADED(av_dict_set) &&- VA_FUNC_LOADED(av_dict_free) &&+ VA_FUNC_LOADED(av_dict_free) && VA_FUNC_LOADED(avcodec_get_name) &&+ VA_FUNC_LOADED(av_get_pix_fmt_string) && VA_FUNC_LOADED(vaExportSurfaceHandle) && VA_FUNC_LOADED(vaSyncSurface) && VA_FUNC_LOADED(vaInitialize) &&- VA_FUNC_LOADED(vaTerminate) &&- (VA_FUNC_LOADED(vaGetDisplayWl) || VA_FUNC_LOADED(vaGetDisplayDRM));+ VA_FUNC_LOADED(vaTerminate) && VA_FUNC_LOADED(vaGetDisplayDRM); } #endif
Here's the analysis of the provided code diff for security fixes: 1. Vulnerability Existed: not sure [Potential Missing Input Validation] [dom/media/platforms/ffmpeg/FFmpegLibWrapper.cpp] [Lines 142-187] [Old Code] - Missing several FFmpeg function imports [Fixed Code] - Added imports for functions like avcodec_align_dimensions, av_image_check_size, etc. 2. Vulnerability Existed: not sure [Potential Memory Management Issue] [dom/media/platforms/ffmpeg/FFmpegLibWrapper.cpp] [Lines 247-253] [Old Code] - Had additional library cleanup for mVALibWayland [Fixed Code] - Removed mVALibWayland cleanup as this library handling was removed 3. Vulnerability Existed: not sure [Potential Library Loading Issue] [dom/media/platforms/ffmpeg/FFmpegLibWrapper.cpp] [Lines 262-291] [Old Code] - More complex VA-API library loading logic including wayland support [Fixed Code] - Simplified VA-API library loading, removed wayland-specific code 4. Vulnerability Existed: not sure [Potential Function Availability Check] [dom/media/platforms/ffmpeg/FFmpegLibWrapper.cpp] [Lines 297-310] [Old Code] - Fewer function availability checks [Fixed Code] - Added checks for more functions like av_hwdevice_hwconfig_alloc, avcodec_get_name, etc. Note: While these changes appear to be related to functionality improvements and cleanup, I cannot definitively determine if they were specifically security fixes without more context about the vulnerabilities they might address. The additions of more function imports and checks could potentially address security issues related to missing input validation or improper library handling, 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/fill-and-stroke-styles/2d.gradient.interpolate.colouralpha.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.gradient.interpolate.colouralpha.worker.js@@ -13,17 +13,17 @@ }); t.step(function() {-var offscreenCanvas = new OffscreenCanvas(100, 50);-var ctx = offscreenCanvas.getContext('2d');+var canvas = new OffscreenCanvas(100, 50);+var ctx = canvas.getContext('2d'); var g = ctx.createLinearGradient(0, 0, 100, 0); g.addColorStop(0, 'rgba(255,255,0, 0)'); g.addColorStop(1, 'rgba(0,0,255, 1)'); ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50);-_assertPixelApprox(offscreenCanvas, 25,25, 190,190,65,65, "25,25", "190,190,65,65", 3);-_assertPixelApprox(offscreenCanvas, 50,25, 126,126,128,128, "50,25", "126,126,128,128", 3);-_assertPixelApprox(offscreenCanvas, 75,25, 62,62,192,192, "75,25", "62,62,192,192", 3);+_assertPixelApprox(canvas, 25,25, 190,190,65,65, "25,25", "190,190,65,65", 3);+_assertPixelApprox(canvas, 50,25, 126,126,128,128, "50,25", "126,126,128,128", 3);+_assertPixelApprox(canvas, 75,25, 62,62,192,192, "75,25", "62,62,192,192", 3); t.done(); });
Based on the provided code diff, I don't see any security vulnerabilities being fixed. The changes appear to be purely variable renaming (from `offscreenCanvas` to `canvas`) and don't involve any security-related modifications. Here's the analysis following your requested format: Vulnerability Existed: no No security vulnerability found File: testing/web-platform/tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.colouralpha.worker.js Lines: 13-17, 21-23 Old Code: var offscreenCanvas = new OffscreenCanvas(100, 50); Fixed Code: var canvas = new OffscreenCanvas(100, 50); The changes are purely cosmetic/refactoring in nature, with no security implications. The test functionality remains exactly the same, just using a different variable name.
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/testing/web-platform/tests/proximity/META.yml+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/testing/web-platform/tests/proximity/META.yml@@ -1,5 +1,4 @@ spec: https://w3c.github.io/proximity/ suggested_reviewers:- - zqzhang - Honry - rakuco
Analysis of the provided code diff: 1. Vulnerability Existed: no No specific vulnerability found [File] testing/web-platform/tests/proximity/META.yml [Lines] 1-5 [Old Code] spec: https://w3c.github.io/proximity/ suggested_reviewers: - zqzhang - Honry - rakuco [Fixed Code] spec: https://w3c.github.io/proximity/ suggested_reviewers: - Honry - rakuco Additional Details: - The change appears to be a simple removal of a reviewer (zqzhang) from the suggested_reviewers list in a test metadata file - This doesn't appear to be security-related but rather a maintenance/administrative change - No actual code changes were made, only configuration/metadata - No vulnerabilities or security fixes are evident 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/dom/media/utils/TelemetryProbesReporter.cpp+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/dom/media/utils/TelemetryProbesReporter.cpp@@ -575,6 +575,10 @@ LOG("DROPPED_FRAMES_IN_VIDEO_PLAYBACK = %u", percentage); Telemetry::Accumulate(Telemetry::VIDEO_DROPPED_FRAMES_PROPORTION, percentage);+ const uint32_t proportion = 10000 * droppedFrames / parsedFrames;+ Telemetry::Accumulate(Telemetry::VIDEO_DROPPED_FRAMES_PROPORTION_EXPONENTIAL,+ proportion);+ } }
Analyzing the provided code diff, here's the security assessment: 1. Vulnerability Existed: not sure [Potential Integer Overflow] [dom/media/utils/TelemetryProbesReporter.cpp] [Lines 575-578] [Old Code] LOG("DROPPED_FRAMES_IN_VIDEO_PLAYBACK = %u", percentage); Telemetry::Accumulate(Telemetry::VIDEO_DROPPED_FRAMES_PROPORTION, percentage); [Fixed Code] LOG("DROPPED_FRAMES_IN_VIDEO_PLAYBACK = %u", percentage); Telemetry::Accumulate(Telemetry::VIDEO_DROPPED_FRAMES_PROPORTION, percentage); const uint32_t proportion = 10000 * droppedFrames / parsedFrames; Telemetry::Accumulate(Telemetry::VIDEO_DROPPED_FRAMES_PROPORTION_EXPONENTIAL, proportion); Additional Details: - The change adds new telemetry collection for dropped frames proportion with exponential scaling - The potential vulnerability could be an integer overflow in the calculation of `proportion` if `droppedFrames` is large enough when multiplied by 10000 - However, without seeing the full context of how `droppedFrames` and `parsedFrames` are validated, we can't be certain if this is actually vulnerable - The change appears to be more of a feature addition than a security fix, but the new calculation could introduce risks if input validation is insufficient
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.gradient.radial.outside3.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.gradient.radial.outside3.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);@@ -24,15 +24,15 @@ g.addColorStop(1, '#f00'); ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50);-_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");-_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");-_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");-_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");-_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");-_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");-_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");-_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");-_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");+_assertPixel(canvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");+_assertPixel(canvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");+_assertPixel(canvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");+_assertPixel(canvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");+_assertPixel(canvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");+_assertPixel(canvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");+_assertPixel(canvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");+_assertPixel(canvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");+_assertPixel(canvas, 98,48, 0,255,0,255, "98,48", "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, renaming a variable from `offscreenCanvas` to `canvas` and updating all references to it. Here's the analysis: 1. Vulnerability Existed: no Variable Renaming Refactor [testing/web-platform/tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside3.worker.js] [Lines 13-14, 24-32] Old Code: ```javascript var offscreenCanvas = new OffscreenCanvas(100, 50); var ctx = offscreenCanvas.getContext('2d'); _assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255"); ``` Fixed Code: ```javascript var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); _assertPixel(canvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255"); ``` Additional Details: This is a simple variable name change with no security implications. The changes don't address any security vulnerabilities but rather improve code consistency/readability by using a shorter variable name. All functional aspects of the code remain identical.
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.isPointInPath.bezier.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.isPointInPath.bezier.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.moveTo(25, 25); ctx.bezierCurveTo(50, -50, 50, 100, 75, 25);
Analysis of the provided code diff: 1. Vulnerability Existed: no No apparent security vulnerability [File] [Lines 17-18] [Old Code] var offscreenCanvas = new OffscreenCanvas(100, 50); var ctx = offscreenCanvas.getContext('2d'); [Fixed Code] var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); Additional Details: - The change appears to be purely a variable name change from `offscreenCanvas` to `canvas` - No security implications are evident in this change - The modification doesn't affect any security-sensitive operations or introduce/remove any security controls - This is likely 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.