From owner-svn-ports-all@freebsd.org Tue Mar 9 10:00:00 2021 Return-Path: Delivered-To: svn-ports-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id C514B572BCF; Tue, 9 Mar 2021 10:00:00 +0000 (UTC) (envelope-from cmt@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4DvrKr4Zvcz3hLw; Tue, 9 Mar 2021 10:00:00 +0000 (UTC) (envelope-from cmt@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 7046B1A041; Tue, 9 Mar 2021 10:00:00 +0000 (UTC) (envelope-from cmt@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 129A00GO061982; Tue, 9 Mar 2021 10:00:00 GMT (envelope-from cmt@FreeBSD.org) Received: (from cmt@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 1299xxN9061906; Tue, 9 Mar 2021 09:59:59 GMT (envelope-from cmt@FreeBSD.org) Message-Id: <202103090959.1299xxN9061906@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: cmt set sender to cmt@FreeBSD.org using -f From: Christoph Moench-Tegeder Date: Tue, 9 Mar 2021 09:59:59 +0000 (UTC) To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-branches@freebsd.org Subject: svn commit: r567917 - in branches/2021Q1/www/firefox: . files X-SVN-Group: ports-branches X-SVN-Commit-Author: cmt X-SVN-Commit-Paths: in branches/2021Q1/www/firefox: . files X-SVN-Commit-Revision: 567917 X-SVN-Commit-Repository: ports MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-ports-all@freebsd.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: SVN commit messages for the ports tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 09 Mar 2021 10:00:00 -0000 Author: cmt Date: Tue Mar 9 09:59:59 2021 New Revision: 567917 URL: https://svnweb.freebsd.org/changeset/ports/567917 Log: MFH: r567916 firefox: import upstream bugfixes 1 https://bugzilla.mozilla.org/show_bug.cgi?id=1694670 "Linux startup crash in [@ qcms_data_create_rgb_with_gamma]" crash on startup when loading certain ICC profiles 2 https://bugzilla.mozilla.org/show_bug.cgi?id=1694699 "Investigate tabs API regression in Firefox 86" regression causing loss of tabs from tab groups PR: 253886 ([2]) Reported by: Hans Petter Selasky [1], Graham Perrin [2] Added: branches/2021Q1/www/firefox/files/patch-bug1694670 - copied unchanged from r567916, head/www/firefox/files/patch-bug1694670 branches/2021Q1/www/firefox/files/patch-bug1694699 - copied unchanged from r567916, head/www/firefox/files/patch-bug1694699 Modified: branches/2021Q1/www/firefox/Makefile Directory Properties: branches/2021Q1/ (props changed) Modified: branches/2021Q1/www/firefox/Makefile ============================================================================== --- branches/2021Q1/www/firefox/Makefile Tue Mar 9 09:58:23 2021 (r567916) +++ branches/2021Q1/www/firefox/Makefile Tue Mar 9 09:59:59 2021 (r567917) @@ -3,7 +3,7 @@ PORTNAME= firefox DISTVERSION= 86.0 -PORTREVISION= 2 +PORTREVISION= 3 PORTEPOCH= 2 CATEGORIES= www MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/source \ Copied: branches/2021Q1/www/firefox/files/patch-bug1694670 (from r567916, head/www/firefox/files/patch-bug1694670) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ branches/2021Q1/www/firefox/files/patch-bug1694670 Tue Mar 9 09:59:59 2021 (r567917, copy of r567916, head/www/firefox/files/patch-bug1694670) @@ -0,0 +1,22 @@ +diff --git gfx/qcms/src/iccread.rs gfx/qcms/src/iccread.rs +--- gfx/qcms/src/iccread.rs ++++ gfx/qcms/src/iccread.rs +@@ -229,7 +229,7 @@ + read_u16(mem, offset) + } + pub fn write_u32(mem: &mut [u8], offset: usize, value: u32) { +- if offset <= mem.len() - std::mem::size_of_val(&value) { ++ if offset > mem.len() - std::mem::size_of_val(&value) { + panic!("OOB"); + } + let mem = mem.as_mut_ptr(); +@@ -238,7 +238,7 @@ + } + } + pub fn write_u16(mem: &mut [u8], offset: usize, value: u16) { +- if offset <= mem.len() - std::mem::size_of_val(&value) { ++ if offset > mem.len() - std::mem::size_of_val(&value) { + panic!("OOB"); + } + let mem = mem.as_mut_ptr(); + Copied: branches/2021Q1/www/firefox/files/patch-bug1694699 (from r567916, head/www/firefox/files/patch-bug1694699) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ branches/2021Q1/www/firefox/files/patch-bug1694699 Tue Mar 9 09:59:59 2021 (r567917, copy of r567916, head/www/firefox/files/patch-bug1694699) @@ -0,0 +1,115 @@ +diff --git browser/components/extensions/parent/ext-tabs.js browser/components/extensions/parent/ext-tabs.js +--- browser/components/extensions/parent/ext-tabs.js ++++ browser/components/extensions/parent/ext-tabs.js +@@ -217,9 +217,13 @@ + function sanitize(tab, changeInfo) { + let result = {}; + let nonempty = false; +- const hasTabs = tab.hasTabPermission; + for (let prop in changeInfo) { +- if (hasTabs || !restricted.has(prop)) { ++ // In practice, changeInfo contains at most one property from ++ // restricted. Therefore it is not necessary to cache the value ++ // of tab.hasTabPermission outside the loop. ++ // Unnecessarily accessing tab.hasTabPermission can cause bugs, see ++ // https://bugzilla.mozilla.org/show_bug.cgi?id=1694699#c21 ++ if (!restricted.has(prop) || tab.hasTabPermission) { + nonempty = true; + result[prop] = changeInfo[prop]; + } +diff --git browser/components/extensions/test/browser/browser_ext_tabs_hide.js browser/components/extensions/test/browser/browser_ext_tabs_hide.js +--- browser/components/extensions/test/browser/browser_ext_tabs_hide.js ++++ browser/components/extensions/test/browser/browser_ext_tabs_hide.js +@@ -349,6 +349,7 @@ + if ("hidden" in changeInfo) { + browser.test.assertEq(tabId, testTab.id, "correct tab was hidden"); + browser.test.assertTrue(changeInfo.hidden, "tab is hidden"); ++ browser.test.assertEq(tab.url, testTab.url, "tab has correct URL"); + browser.test.sendMessage("changeInfo"); + } + }); +diff --git browser/components/extensions/test/browser/browser_ext_tabs_move_discarded.js browser/components/extensions/test/browser/browser_ext_tabs_move_discarded.js +--- browser/components/extensions/test/browser/browser_ext_tabs_move_discarded.js ++++ browser/components/extensions/test/browser/browser_ext_tabs_move_discarded.js +@@ -2,7 +2,7 @@ + /* vim: set sts=2 sw=2 et tw=80: */ + "use strict"; + +-add_task(async function() { ++add_task(async function move_discarded_to_window() { + let extension = ExtensionTestUtils.loadExtension({ + manifest: { permissions: ["tabs"] }, + background: async function() { +@@ -29,3 +29,54 @@ + await extension.awaitFinish("tabs.move"); + await extension.unload(); + }); ++ ++add_task(async function move_hidden_discarded_to_window() { ++ let extensionWithoutTabsPermission = ExtensionTestUtils.loadExtension({ ++ manifest: { ++ permissions: ["http://example.com/"], ++ }, ++ background() { ++ browser.tabs.onUpdated.addListener((tabId, changeInfo, tab) => { ++ if (changeInfo.hidden) { ++ browser.test.assertEq( ++ tab.url, ++ "http://example.com/?hideme", ++ "tab.url is correctly observed without tabs permission" ++ ); ++ browser.test.sendMessage("onUpdated_checked"); ++ } ++ }); ++ }, ++ }); ++ await extensionWithoutTabsPermission.startup(); ++ ++ let extension = ExtensionTestUtils.loadExtension({ ++ manifest: { permissions: ["tabs", "tabHide"] }, ++ // ExtensionControlledPopup's populateDescription method requires an addon: ++ useAddonManager: "temporary", ++ async background() { ++ let url = "http://example.com/?hideme"; ++ let tab = await browser.tabs.create({ url, discarded: true }); ++ await browser.tabs.hide(tab.id); ++ ++ let { id: windowId } = await browser.windows.create(); ++ ++ // Move the tab into that window ++ [tab] = await browser.tabs.move(tab.id, { windowId, index: -1 }); ++ browser.test.assertTrue(tab.discarded, "Tab should still be discarded"); ++ browser.test.assertTrue(tab.hidden, "Tab should still be hidden"); ++ browser.test.assertEq(url, tab.url, "Tab URL should still be correct"); ++ ++ await browser.windows.remove(windowId); ++ browser.test.notifyPass("move_hidden_discarded_to_window"); ++ }, ++ }); ++ ++ await extension.startup(); ++ await extension.awaitFinish("move_hidden_discarded_to_window"); ++ await extension.unload(); ++ ++ await extensionWithoutTabsPermission.awaitMessage("onUpdated_checked"); ++ await extensionWithoutTabsPermission.awaitMessage("onUpdated_checked"); ++ await extensionWithoutTabsPermission.unload(); ++}); +diff --git mobile/android/components/extensions/ext-tabs.js mobile/android/components/extensions/ext-tabs.js +--- mobile/android/components/extensions/ext-tabs.js ++++ mobile/android/components/extensions/ext-tabs.js +@@ -233,9 +233,11 @@ + function sanitize(tab, changeInfo) { + const result = {}; + let nonempty = false; +- const hasTabs = tab.hasTabPermission; + for (const prop in changeInfo) { +- if (hasTabs || !restricted.includes(prop)) { ++ // In practice, changeInfo contains at most one property from ++ // restricted. Therefore it is not necessary to cache the value ++ // of tab.hasTabPermission outside the loop. ++ if (!restricted.includes(prop) || tab.hasTabPermission) { + nonempty = true; + result[prop] = changeInfo[prop]; + } +