2015-02-23 21:32:13 +01:00
|
|
|
# HG changeset patch
|
2019-07-09 23:21:11 +02:00
|
|
|
# User msirringhaus@suse.de
|
|
|
|
# Date 1559294891 -7200
|
|
|
|
# Fri May 31 11:28:11 2019 +0200
|
|
|
|
# Node ID c2aa7198fb925e7fde96abf65b6f68b9b755f112
|
2023-07-05 23:06:07 +02:00
|
|
|
# Parent 0086fcc0d5c86a31cbac0a261ed7b526dd2df2e8
|
2012-03-01 10:09:12 +01:00
|
|
|
Description: Add KDE integration to Firefox (toolkit parts)
|
|
|
|
Author: Wolfgang Rosenauer <wolfgang@rosenauer.org>
|
|
|
|
Author: Lubos Lunak <lunak@suse.com>
|
|
|
|
Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=140751
|
|
|
|
https://bugzilla.novell.com/show_bug.cgi?id=170055
|
|
|
|
|
2023-07-05 23:06:07 +02:00
|
|
|
Index: firefox-115.0/modules/libpref/Preferences.cpp
|
|
|
|
===================================================================
|
|
|
|
--- firefox-115.0.orig/modules/libpref/Preferences.cpp
|
|
|
|
+++ firefox-115.0/modules/libpref/Preferences.cpp
|
|
|
|
@@ -95,6 +95,7 @@
|
2021-03-25 22:32:32 +01:00
|
|
|
#ifdef MOZ_BACKGROUNDTASKS
|
|
|
|
# include "mozilla/BackgroundTasks.h"
|
|
|
|
#endif
|
2018-01-23 10:55:12 +01:00
|
|
|
+#include "nsKDEUtils.h"
|
2011-06-01 08:05:09 +02:00
|
|
|
|
2019-09-09 08:28:12 +02:00
|
|
|
#ifdef DEBUG
|
|
|
|
# include <map>
|
2023-07-05 23:06:07 +02:00
|
|
|
@@ -4911,6 +4912,16 @@ nsresult Preferences::InitInitialObjects
|
2011-06-01 08:05:09 +02:00
|
|
|
#endif
|
2011-11-09 13:04:11 +01:00
|
|
|
};
|
|
|
|
|
2023-07-05 23:06:07 +02:00
|
|
|
+ if (nsKDEUtils::kdeSession()) { // TODO what if some setup actually requires
|
|
|
|
+ // the helper?
|
|
|
|
+ for (int i = 0; i < MOZ_ARRAY_LENGTH(specialFiles); ++i) {
|
|
|
|
+ if (*specialFiles[i] == '\0') {
|
|
|
|
+ specialFiles[i] = "kde.js";
|
2011-11-09 13:04:11 +01:00
|
|
|
+ break;
|
2011-06-01 08:05:09 +02:00
|
|
|
+ }
|
|
|
|
+ }
|
2011-11-09 13:04:11 +01:00
|
|
|
+ }
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
2019-01-29 19:07:12 +01:00
|
|
|
rv = pref_LoadPrefsInDir(defaultPrefDir, specialFiles,
|
|
|
|
ArrayLength(specialFiles));
|
2018-01-23 10:55:12 +01:00
|
|
|
if (NS_FAILED(rv)) {
|
2023-07-05 23:06:07 +02:00
|
|
|
@@ -4985,7 +4996,7 @@ nsresult Preferences::InitInitialObjects
|
2018-03-13 20:46:06 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// Do we care if a file provided by this process fails to load?
|
|
|
|
- pref_LoadPrefsInDir(path, nullptr, 0);
|
|
|
|
+ pref_LoadPrefsInDir(path, specialFiles, ArrayLength(specialFiles));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-07-05 23:06:07 +02:00
|
|
|
Index: firefox-115.0/modules/libpref/moz.build
|
|
|
|
===================================================================
|
|
|
|
--- firefox-115.0.orig/modules/libpref/moz.build
|
|
|
|
+++ firefox-115.0/modules/libpref/moz.build
|
|
|
|
@@ -126,6 +126,10 @@ UNIFIED_SOURCES += [
|
2020-12-16 23:40:17 +01:00
|
|
|
"SharedPrefMap.cpp",
|
2016-03-07 17:25:29 +01:00
|
|
|
]
|
|
|
|
|
|
|
|
+LOCAL_INCLUDES += [
|
2019-05-22 22:38:29 +02:00
|
|
|
+ '/toolkit/xre'
|
2016-03-07 17:25:29 +01:00
|
|
|
+]
|
|
|
|
+
|
2019-10-25 11:13:30 +02:00
|
|
|
gen_all_tuple = tuple(gen_h + gen_cpp + gen_rs)
|
2019-05-22 22:38:29 +02:00
|
|
|
|
2020-12-16 23:40:17 +01:00
|
|
|
GeneratedFile(
|
2023-07-05 23:06:07 +02:00
|
|
|
Index: firefox-115.0/python/mozbuild/mozpack/chrome/flags.py
|
|
|
|
===================================================================
|
|
|
|
--- firefox-115.0.orig/python/mozbuild/mozpack/chrome/flags.py
|
|
|
|
+++ firefox-115.0/python/mozbuild/mozpack/chrome/flags.py
|
|
|
|
@@ -234,6 +234,7 @@ class Flags(OrderedDict):
|
2020-12-16 23:40:17 +01:00
|
|
|
"tablet": Flag,
|
|
|
|
"process": StringFlag,
|
2021-03-25 22:32:32 +01:00
|
|
|
"backgroundtask": StringFlag,
|
|
|
|
+ "desktop": StringFlag,
|
2013-05-14 16:33:59 +02:00
|
|
|
}
|
2020-12-16 23:40:17 +01:00
|
|
|
RE = re.compile(r"([!<>=]+)")
|
2013-05-14 16:33:59 +02:00
|
|
|
|
2023-07-05 23:06:07 +02:00
|
|
|
Index: firefox-115.0/python/mozbuild/mozpack/chrome/manifest.py
|
|
|
|
===================================================================
|
|
|
|
--- firefox-115.0.orig/python/mozbuild/mozpack/chrome/manifest.py
|
|
|
|
+++ firefox-115.0/python/mozbuild/mozpack/chrome/manifest.py
|
|
|
|
@@ -43,6 +43,7 @@ class ManifestEntry(object):
|
2020-12-16 23:40:17 +01:00
|
|
|
"process",
|
|
|
|
"contentaccessible",
|
2021-03-25 22:32:32 +01:00
|
|
|
"backgroundtask",
|
2020-12-16 23:40:17 +01:00
|
|
|
+ "desktop",
|
2013-05-14 16:33:59 +02:00
|
|
|
]
|
|
|
|
|
|
|
|
def __init__(self, base, *flags):
|
2023-07-05 23:06:07 +02:00
|
|
|
Index: firefox-115.0/toolkit/components/downloads/moz.build
|
|
|
|
===================================================================
|
|
|
|
--- firefox-115.0.orig/toolkit/components/downloads/moz.build
|
|
|
|
+++ firefox-115.0/toolkit/components/downloads/moz.build
|
|
|
|
@@ -51,5 +51,9 @@ if CONFIG["MOZ_PLACES"]:
|
2014-12-02 23:01:52 +01:00
|
|
|
|
2020-12-16 23:40:17 +01:00
|
|
|
FINAL_LIBRARY = "xul"
|
2014-12-02 23:01:52 +01:00
|
|
|
|
2018-01-23 10:55:12 +01:00
|
|
|
+LOCAL_INCLUDES += [
|
|
|
|
+ '/toolkit/xre'
|
|
|
|
+]
|
|
|
|
+
|
2020-12-16 23:40:17 +01:00
|
|
|
with Files("**"):
|
|
|
|
BUG_COMPONENT = ("Toolkit", "Downloads API")
|
2023-07-05 23:06:07 +02:00
|
|
|
Index: firefox-115.0/toolkit/mozapps/downloads/HelperAppDlg.sys.mjs
|
|
|
|
===================================================================
|
|
|
|
--- firefox-115.0.orig/toolkit/mozapps/downloads/HelperAppDlg.sys.mjs
|
|
|
|
+++ firefox-115.0/toolkit/mozapps/downloads/HelperAppDlg.sys.mjs
|
|
|
|
@@ -1246,26 +1246,56 @@ nsUnknownContentTypeDialog.prototype = {
|
2017-03-07 09:35:10 +01:00
|
|
|
this.chosenApp = params.handlerApp;
|
|
|
|
}
|
2018-05-08 15:14:23 +02:00
|
|
|
} else if ("@mozilla.org/applicationchooser;1" in Cc) {
|
|
|
|
- var nsIApplicationChooser = Ci.nsIApplicationChooser;
|
2019-09-04 10:35:37 +02:00
|
|
|
- var appChooser = Cc["@mozilla.org/applicationchooser;1"].createInstance(
|
|
|
|
- nsIApplicationChooser
|
|
|
|
- );
|
|
|
|
- appChooser.init(
|
|
|
|
- this.mDialog,
|
|
|
|
- this.dialogElement("strings").getString("chooseAppFilePickerTitle")
|
|
|
|
- );
|
2017-03-07 09:35:10 +01:00
|
|
|
- var contentTypeDialogObj = this;
|
|
|
|
- let appChooserCallback = function appChooserCallback_done(aResult) {
|
|
|
|
- if (aResult) {
|
2019-09-04 10:35:37 +02:00
|
|
|
- contentTypeDialogObj.chosenApp = aResult.QueryInterface(
|
|
|
|
- Ci.nsILocalHandlerApp
|
|
|
|
- );
|
2018-05-26 18:05:54 +02:00
|
|
|
- }
|
|
|
|
- contentTypeDialogObj.finishChooseApp();
|
|
|
|
- };
|
|
|
|
- appChooser.open(this.mLauncher.MIMEInfo.MIMEType, appChooserCallback);
|
|
|
|
- // The finishChooseApp is called from appChooserCallback
|
|
|
|
- return;
|
2017-03-07 09:35:10 +01:00
|
|
|
+ // handle the KDE case which is implemented in the filepicker
|
|
|
|
+ // therefore falling back to Gtk2 like behaviour if KDE is running
|
2017-09-28 10:44:46 +02:00
|
|
|
+ // FIXME this should be better handled in the nsIApplicationChooser
|
|
|
|
+ // interface
|
2017-03-07 09:35:10 +01:00
|
|
|
+ var env = Components.classes["@mozilla.org/process/environment;1"]
|
|
|
|
+ .getService(Components.interfaces.nsIEnvironment);
|
|
|
|
+ if (env.get('KDE_FULL_SESSION') == "true")
|
|
|
|
+ {
|
2018-05-26 18:05:54 +02:00
|
|
|
+ var nsIFilePicker = Ci.nsIFilePicker;
|
|
|
|
+ var fp = Cc["@mozilla.org/filepicker;1"]
|
|
|
|
+ .createInstance(nsIFilePicker);
|
2017-03-07 09:35:10 +01:00
|
|
|
+ fp.init(this.mDialog,
|
|
|
|
+ this.dialogElement("strings").getString("chooseAppFilePickerTitle"),
|
|
|
|
+ nsIFilePicker.modeOpen);
|
|
|
|
+
|
|
|
|
+ fp.appendFilters(nsIFilePicker.filterApps);
|
|
|
|
+
|
2018-05-26 18:05:54 +02:00
|
|
|
+ fp.open(aResult => {
|
|
|
|
+ if (aResult == nsIFilePicker.returnOK && fp.file) {
|
|
|
|
+ // Remember the file they chose to run.
|
|
|
|
+ var localHandlerApp =
|
|
|
|
+ Cc["@mozilla.org/uriloader/local-handler-app;1"].
|
|
|
|
+ createInstance(Ci.nsILocalHandlerApp);
|
|
|
|
+ localHandlerApp.executable = fp.file;
|
|
|
|
+ this.chosenApp = localHandlerApp;
|
|
|
|
+ }
|
|
|
|
+ this.finishChooseApp();
|
|
|
|
+ });
|
2017-03-07 09:35:10 +01:00
|
|
|
+ } else {
|
2018-05-08 15:14:23 +02:00
|
|
|
+ var nsIApplicationChooser = Ci.nsIApplicationChooser;
|
2019-09-04 10:35:37 +02:00
|
|
|
+ var appChooser = Cc["@mozilla.org/applicationchooser;1"].createInstance(
|
|
|
|
+ nsIApplicationChooser
|
|
|
|
+ );
|
|
|
|
+ appChooser.init(
|
|
|
|
+ this.mDialog,
|
|
|
|
+ this.dialogElement("strings").getString("chooseAppFilePickerTitle")
|
|
|
|
+ );
|
2017-03-07 09:35:10 +01:00
|
|
|
+ var contentTypeDialogObj = this;
|
|
|
|
+ let appChooserCallback = function appChooserCallback_done(aResult) {
|
|
|
|
+ if (aResult) {
|
2019-09-04 10:35:37 +02:00
|
|
|
+ contentTypeDialogObj.chosenApp = aResult.QueryInterface(
|
|
|
|
+ Ci.nsILocalHandlerApp
|
|
|
|
+ );
|
2017-03-07 09:35:10 +01:00
|
|
|
+ }
|
|
|
|
+ contentTypeDialogObj.finishChooseApp();
|
|
|
|
+ };
|
|
|
|
+ appChooser.open(this.mLauncher.MIMEInfo.MIMEType, appChooserCallback);
|
|
|
|
+ // The finishChooseApp is called from appChooserCallback
|
|
|
|
+ return;
|
|
|
|
+ }
|
2017-09-28 10:44:46 +02:00
|
|
|
} else {
|
2018-05-08 15:14:23 +02:00
|
|
|
var nsIFilePicker = Ci.nsIFilePicker;
|
2019-09-04 10:35:37 +02:00
|
|
|
var fp = Cc["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
|
2023-07-05 23:06:07 +02:00
|
|
|
Index: firefox-115.0/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp
|
|
|
|
===================================================================
|
|
|
|
--- firefox-115.0.orig/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp
|
|
|
|
+++ firefox-115.0/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp
|
|
|
|
@@ -16,6 +16,8 @@
|
2011-06-01 08:05:09 +02:00
|
|
|
#include "nsISupportsPrimitives.h"
|
2012-03-01 10:09:12 +01:00
|
|
|
#include "nsIGSettingsService.h"
|
- Mozilla Firefox 108.0
https://www.mozilla.org/en-US/firefox/108.0/releasenotes/
MFSA 2022-51 (bsc#1206242)
* CVE-2022-46871 (bmo#1795697)
libusrsctp library out of date
* CVE-2022-46872 (bmo#1799156)
Arbitrary file read from a compromised content process
* CVE-2022-46873 (bmo#1644790)
Firefox did not implement the CSP directive unsafe-hashes
* CVE-2022-46874 (bmo#1746139)
Drag and Dropped Filenames could have been truncated to
malicious extensions
* CVE-2022-46875 (bmo#1786188)
Download Protections were bypassed by .atloc and .ftploc
files on Mac OS
* CVE-2022-46877 (bmo#1795139)
Fullscreen notification bypass
* CVE-2022-46878 (bmo#1782219, bmo#1797370, bmo#1797685,
bmo#1801102, bmo#1801315, bmo#1802395)
Memory safety bugs fixed in Firefox 108 and Firefox ESR 102.6
* CVE-2022-46879 (bmo#1736224, bmo#1793407, bmo#1794249, bmo#1795845,
bmo#1797682, bmo#1797720, bmo#1798494, bmo#1799479)
Memory safety bugs fixed in Firefox 108
- requires
NSS >= 3.85
rustc/cargo 1.65
OBS-URL: https://build.opensuse.org/package/show/mozilla:Factory/MozillaFirefox?expand=0&rev=1024
2022-12-13 22:48:56 +01:00
|
|
|
#include "nsReadableUtils.h"
|
2022-07-27 14:29:45 +02:00
|
|
|
+#include "nsPrintfCString.h"
|
2011-06-01 08:05:09 +02:00
|
|
|
+#include "nsKDEUtils.h"
|
|
|
|
|
2019-05-22 22:38:29 +02:00
|
|
|
using namespace mozilla;
|
|
|
|
|
2023-07-05 23:06:07 +02:00
|
|
|
@@ -39,6 +41,8 @@ class nsUnixSystemProxySettings final :
|
2019-01-29 19:07:12 +01:00
|
|
|
nsACString& aResult);
|
|
|
|
nsresult SetProxyResultFromGSettings(const char* aKeyBase, const char* aType,
|
|
|
|
nsACString& aResult);
|
|
|
|
+ nsresult GetProxyFromKDE(const nsACString& aScheme, const nsACString& aHost,
|
|
|
|
+ PRInt32 aPort, nsACString& aResult);
|
2011-06-01 08:05:09 +02:00
|
|
|
};
|
|
|
|
|
2014-07-21 11:32:46 +02:00
|
|
|
NS_IMPL_ISUPPORTS(nsUnixSystemProxySettings, nsISystemProxySettings)
|
2023-07-05 23:06:07 +02:00
|
|
|
@@ -396,6 +400,9 @@ nsresult nsUnixSystemProxySettings::GetP
|
2019-01-29 19:07:12 +01:00
|
|
|
const nsACString& aHost,
|
|
|
|
const int32_t aPort,
|
|
|
|
nsACString& aResult) {
|
2013-01-07 21:49:28 +01:00
|
|
|
+ if (nsKDEUtils::kdeSupport())
|
|
|
|
+ return GetProxyFromKDE(aScheme, aHost, aPort, aResult);
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
2012-06-05 20:01:53 +02:00
|
|
|
if (mProxySettings) {
|
2013-01-07 21:49:28 +01:00
|
|
|
nsresult rv = GetProxyFromGSettings(aScheme, aHost, aPort, aResult);
|
2019-01-29 19:07:12 +01:00
|
|
|
if (NS_SUCCEEDED(rv)) return rv;
|
2023-07-05 23:06:07 +02:00
|
|
|
@@ -404,6 +411,28 @@ nsresult nsUnixSystemProxySettings::GetP
|
2019-01-29 19:07:12 +01:00
|
|
|
return GetProxyFromEnvironment(aScheme, aHost, aPort, aResult);
|
|
|
|
}
|
2011-07-01 11:12:30 +02:00
|
|
|
|
2023-07-05 23:06:07 +02:00
|
|
|
+nsresult nsUnixSystemProxySettings::GetProxyFromKDE(const nsACString& aScheme,
|
|
|
|
+ const nsACString& aHost,
|
|
|
|
+ PRInt32 aPort,
|
|
|
|
+ nsACString& aResult) {
|
2013-01-07 21:49:28 +01:00
|
|
|
+ nsAutoCString url;
|
2011-07-01 11:12:30 +02:00
|
|
|
+ url = aScheme;
|
|
|
|
+ url += "://";
|
|
|
|
+ url += aHost;
|
2023-07-05 23:06:07 +02:00
|
|
|
+ if (aPort >= 0) {
|
2011-07-01 11:12:30 +02:00
|
|
|
+ url += ":";
|
|
|
|
+ url += nsPrintfCString("%d", aPort);
|
|
|
|
+ }
|
2012-02-01 14:37:15 +01:00
|
|
|
+ nsTArray<nsCString> command;
|
2023-07-05 23:06:07 +02:00
|
|
|
+ command.AppendElement("GETPROXY"_ns);
|
|
|
|
+ command.AppendElement(url);
|
2012-02-01 14:37:15 +01:00
|
|
|
+ nsTArray<nsCString> result;
|
2023-07-05 23:06:07 +02:00
|
|
|
+ if (!nsKDEUtils::command(command, &result) || result.Length() != 1)
|
2011-07-01 11:12:30 +02:00
|
|
|
+ return NS_ERROR_FAILURE;
|
2012-03-01 10:09:12 +01:00
|
|
|
+ aResult = result[0];
|
2011-07-01 11:12:30 +02:00
|
|
|
+ return NS_OK;
|
|
|
|
+}
|
2019-05-22 22:38:29 +02:00
|
|
|
+
|
|
|
|
NS_IMPL_COMPONENT_FACTORY(nsUnixSystemProxySettings) {
|
|
|
|
auto result = MakeRefPtr<nsUnixSystemProxySettings>();
|
|
|
|
result->Init();
|
2023-07-05 23:06:07 +02:00
|
|
|
Index: firefox-115.0/toolkit/xre/moz.build
|
|
|
|
===================================================================
|
|
|
|
--- firefox-115.0.orig/toolkit/xre/moz.build
|
|
|
|
+++ firefox-115.0/toolkit/xre/moz.build
|
|
|
|
@@ -96,7 +96,9 @@ elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "ui
|
2020-12-16 23:40:17 +01:00
|
|
|
"UIKitDirProvider.mm",
|
2013-09-16 09:57:05 +02:00
|
|
|
]
|
2020-12-16 23:40:17 +01:00
|
|
|
elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
|
2013-09-16 09:57:05 +02:00
|
|
|
+ EXPORTS += ['nsKDEUtils.h']
|
2014-03-18 20:44:32 +01:00
|
|
|
UNIFIED_SOURCES += [
|
2020-12-16 23:40:17 +01:00
|
|
|
+ "nsKDEUtils.cpp",
|
|
|
|
"nsNativeAppSupportUnix.cpp",
|
2013-09-16 09:57:05 +02:00
|
|
|
]
|
2021-12-07 22:12:25 +01:00
|
|
|
CXXFLAGS += CONFIG["MOZ_X11_SM_CFLAGS"]
|
2023-07-05 23:06:07 +02:00
|
|
|
Index: firefox-115.0/toolkit/xre/nsKDEUtils.cpp
|
|
|
|
===================================================================
|
2011-06-01 08:05:09 +02:00
|
|
|
--- /dev/null
|
2023-07-05 23:06:07 +02:00
|
|
|
+++ firefox-115.0/toolkit/xre/nsKDEUtils.cpp
|
|
|
|
@@ -0,0 +1,286 @@
|
2011-06-01 08:05:09 +02:00
|
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
2012-11-20 21:34:15 +01:00
|
|
|
+/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
|
|
|
+#include "nsKDEUtils.h"
|
|
|
|
+#include "nsIWidget.h"
|
2012-03-01 10:09:12 +01:00
|
|
|
+#include "nsISupportsPrimitives.h"
|
|
|
|
+#include "nsIMutableArray.h"
|
|
|
|
+#include "nsComponentManagerUtils.h"
|
|
|
|
+#include "nsArrayUtils.h"
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
|
|
|
+#include <gtk/gtk.h>
|
|
|
|
+
|
|
|
|
+#include <limits.h>
|
|
|
|
+#include <stdio.h>
|
|
|
|
+#include <sys/wait.h>
|
2012-07-29 11:45:44 +02:00
|
|
|
+#include <sys/resource.h>
|
2011-06-01 08:05:09 +02:00
|
|
|
+#include <unistd.h>
|
|
|
|
+#include <X11/Xlib.h>
|
- update to Firefox 51.0
* requires NSPR >= 4.13.1, NSS >= 3.28.1
* Added support for FLAC (Free Lossless Audio Codec) playback
* Added support for WebGL 2
* Added Georgian (ka) and Kabyle (kab) locales
* Support saving passwords for forms without 'submit' events
* Improved video performance for users without GPU acceleration
* Zoom indicator is shown in the URL bar if the zoom level is not
at default level
* View passwords from the prompt before saving them
* Remove Belarusian (be) locale
* Use Skia for content rendering (Linux)
* MFSA 2017-01
CVE-2017-5375: Excessive JIT code allocation allows bypass of
ASLR and DEP (bmo#1325200, boo#1021814)
CVE-2017-5376: Use-after-free in XSL (bmo#1311687, boo#1021817)
CVE-2017-5377: Memory corruption with transforms to create
gradients in Skia (bmo#1306883, boo#1021826)
CVE-2017-5378: Pointer and frame data leakage of Javascript objects
(bmo#1312001, bmo#1330769, boo#1021818)
CVE-2017-5379: Use-after-free in Web Animations
(bmo#1309198,boo#1021827)
CVE-2017-5380: Potential use-after-free during DOM manipulations
(bmo#1322107, boo#1021819)
CVE-2017-5390: Insecure communication methods in Developer Tools
JSON viewer (bmo#1297361, boo#1021820)
CVE-2017-5389: WebExtensions can install additional add-ons via
modified host requests (bmo#1308688, boo#1021828)
CVE-2017-5396: Use-after-free with Media Decoder
(bmo#1329403, boo#1021821)
OBS-URL: https://build.opensuse.org/package/show/mozilla:Factory/MozillaFirefox?expand=0&rev=567
2017-01-25 11:27:08 +01:00
|
|
|
+// copied from X11/X.h as a hack since for an unknown
|
|
|
|
+// reason it's not picked up from X11/X.h
|
|
|
|
+#ifndef None
|
2023-07-05 23:06:07 +02:00
|
|
|
+# define None 0L /* universal null resource or null atom */
|
- update to Firefox 51.0
* requires NSPR >= 4.13.1, NSS >= 3.28.1
* Added support for FLAC (Free Lossless Audio Codec) playback
* Added support for WebGL 2
* Added Georgian (ka) and Kabyle (kab) locales
* Support saving passwords for forms without 'submit' events
* Improved video performance for users without GPU acceleration
* Zoom indicator is shown in the URL bar if the zoom level is not
at default level
* View passwords from the prompt before saving them
* Remove Belarusian (be) locale
* Use Skia for content rendering (Linux)
* MFSA 2017-01
CVE-2017-5375: Excessive JIT code allocation allows bypass of
ASLR and DEP (bmo#1325200, boo#1021814)
CVE-2017-5376: Use-after-free in XSL (bmo#1311687, boo#1021817)
CVE-2017-5377: Memory corruption with transforms to create
gradients in Skia (bmo#1306883, boo#1021826)
CVE-2017-5378: Pointer and frame data leakage of Javascript objects
(bmo#1312001, bmo#1330769, boo#1021818)
CVE-2017-5379: Use-after-free in Web Animations
(bmo#1309198,boo#1021827)
CVE-2017-5380: Potential use-after-free during DOM manipulations
(bmo#1322107, boo#1021819)
CVE-2017-5390: Insecure communication methods in Developer Tools
JSON viewer (bmo#1297361, boo#1021820)
CVE-2017-5389: WebExtensions can install additional add-ons via
modified host requests (bmo#1308688, boo#1021828)
CVE-2017-5396: Use-after-free with Media Decoder
(bmo#1329403, boo#1021821)
OBS-URL: https://build.opensuse.org/package/show/mozilla:Factory/MozillaFirefox?expand=0&rev=567
2017-01-25 11:27:08 +01:00
|
|
|
+#endif
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+// #define DEBUG_KDE
|
2011-06-01 08:05:09 +02:00
|
|
|
+#ifdef DEBUG_KDE
|
2023-07-05 23:06:07 +02:00
|
|
|
+# define KMOZILLAHELPER "kmozillahelper"
|
2011-06-01 08:05:09 +02:00
|
|
|
+#else
|
|
|
|
+// not need for lib64, it's a binary
|
2023-07-05 23:06:07 +02:00
|
|
|
+# define KMOZILLAHELPER "/usr/lib/mozilla/kmozillahelper"
|
2011-06-01 08:05:09 +02:00
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
+#define KMOZILLAHELPER_VERSION 6
|
2023-07-05 23:06:07 +02:00
|
|
|
+#define MAKE_STR2(n) #n
|
|
|
|
+#define MAKE_STR(n) MAKE_STR2(n)
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+static bool getKdeSession() {
|
|
|
|
+ if (PR_GetEnv("KDE_FULL_SESSION")) {
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+ return false;
|
2021-11-02 14:51:34 +01:00
|
|
|
+}
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+static bool getKdeSupport() {
|
|
|
|
+ nsTArray<nsCString> command;
|
|
|
|
+ command.AppendElement("CHECK"_ns);
|
|
|
|
+ command.AppendElement("KMOZILLAHELPER_VERSION"_ns);
|
|
|
|
+ bool kde = nsKDEUtils::command(command);
|
2011-06-01 08:05:09 +02:00
|
|
|
+#ifdef DEBUG_KDE
|
2023-07-05 23:06:07 +02:00
|
|
|
+ fprintf(stderr, "KDE RUNNING %d\n", kde);
|
2011-06-01 08:05:09 +02:00
|
|
|
+#endif
|
2023-07-05 23:06:07 +02:00
|
|
|
+ return kde;
|
|
|
|
+}
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+nsKDEUtils::nsKDEUtils() : commandFile(NULL), replyFile(NULL) {}
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+nsKDEUtils::~nsKDEUtils() {
|
|
|
|
+ // closeHelper(); not actually useful, exiting will close the fd too
|
|
|
|
+}
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+nsKDEUtils* nsKDEUtils::self() {
|
|
|
|
+ static nsKDEUtils s;
|
|
|
|
+ return &s;
|
|
|
|
+}
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
|
|
|
+static bool helperRunning = false;
|
|
|
|
+static bool helperFailed = false;
|
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+bool nsKDEUtils::kdeSession() {
|
|
|
|
+ static bool session = getKdeSession();
|
|
|
|
+ return session;
|
|
|
|
+}
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+bool nsKDEUtils::kdeSupport() {
|
|
|
|
+ static bool support = kdeSession() && getKdeSupport();
|
|
|
|
+ return support && helperRunning;
|
|
|
|
+}
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+struct nsKDECommandData {
|
|
|
|
+ FILE* file;
|
|
|
|
+ nsTArray<nsCString>* output;
|
|
|
|
+ GMainLoop* loop;
|
|
|
|
+ bool success;
|
|
|
|
+};
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+static gboolean kdeReadFunc(GIOChannel*, GIOCondition, gpointer data) {
|
|
|
|
+ nsKDECommandData* p = static_cast<nsKDECommandData*>(data);
|
|
|
|
+ char buf[8192]; // TODO big enough
|
|
|
|
+ bool command_done = false;
|
|
|
|
+ bool command_failed = false;
|
|
|
|
+ while (!command_done && !command_failed &&
|
|
|
|
+ fgets(buf, 8192, p->file) !=
|
|
|
|
+ NULL) { // TODO what if the kernel splits a line into two chunks?
|
|
|
|
+ // #ifdef DEBUG_KDE
|
|
|
|
+ // fprintf( stderr, "READ: %s %d\n", buf, feof( p->file ));
|
|
|
|
+ // #endif
|
|
|
|
+ if (char* eol = strchr(buf, '\n')) *eol = '\0';
|
|
|
|
+ command_done = (strcmp(buf, "\\1") == 0);
|
|
|
|
+ command_failed = (strcmp(buf, "\\0") == 0);
|
|
|
|
+ nsAutoCString line(buf);
|
|
|
|
+ line.ReplaceSubstring("\\n", "\n");
|
|
|
|
+ line.ReplaceSubstring(
|
|
|
|
+ "\\"
|
|
|
|
+ "\\",
|
|
|
|
+ "\\"); // \\ -> \ , i.e. unescape
|
|
|
|
+ if (p->output && !(command_done || command_failed))
|
|
|
|
+ p->output->AppendElement(nsCString(buf)); // TODO utf8?
|
|
|
|
+ }
|
|
|
|
+ bool quit = false;
|
|
|
|
+ if (feof(p->file) || command_failed) {
|
|
|
|
+ quit = true;
|
|
|
|
+ p->success = false;
|
|
|
|
+ }
|
|
|
|
+ if (command_done) { // reading one reply finished
|
|
|
|
+ quit = true;
|
|
|
|
+ p->success = true;
|
|
|
|
+ }
|
|
|
|
+ if (quit) {
|
|
|
|
+ if (p->loop) g_main_loop_quit(p->loop);
|
|
|
|
+ return FALSE;
|
|
|
|
+ }
|
|
|
|
+ return TRUE;
|
|
|
|
+}
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+bool nsKDEUtils::command(const nsTArray<nsCString>& command,
|
|
|
|
+ nsTArray<nsCString>* output) {
|
|
|
|
+ return self()->internalCommand(command, NULL, false, output);
|
|
|
|
+}
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+bool nsKDEUtils::command(nsIArray* command, nsIArray** output) {
|
|
|
|
+ nsTArray<nsCString> in;
|
|
|
|
+ PRUint32 length;
|
|
|
|
+ command->GetLength(&length);
|
|
|
|
+ for (PRUint32 i = 0; i < length; i++) {
|
|
|
|
+ nsCOMPtr<nsISupportsCString> str = do_QueryElementAt(command, i);
|
|
|
|
+ if (str) {
|
|
|
|
+ nsAutoCString s;
|
|
|
|
+ str->GetData(s);
|
|
|
|
+ in.AppendElement(s);
|
2012-03-01 10:09:12 +01:00
|
|
|
+ }
|
2023-07-05 23:06:07 +02:00
|
|
|
+ }
|
2012-03-01 10:09:12 +01:00
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+ nsTArray<nsCString> out;
|
|
|
|
+ bool ret = self()->internalCommand(in, NULL, false, &out);
|
2012-03-01 10:09:12 +01:00
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+ if (!output) return ret;
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+ nsCOMPtr<nsIMutableArray> result = do_CreateInstance(NS_ARRAY_CONTRACTID);
|
|
|
|
+ if (!result) return false;
|
|
|
|
+
|
|
|
|
+ for (PRUint32 i = 0; i < out.Length(); i++) {
|
|
|
|
+ nsCOMPtr<nsISupportsCString> rstr =
|
|
|
|
+ do_CreateInstance(NS_SUPPORTS_CSTRING_CONTRACTID);
|
|
|
|
+ if (!rstr) return false;
|
|
|
|
+
|
|
|
|
+ rstr->SetData(out[i]);
|
|
|
|
+ result->AppendElement(rstr);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ NS_ADDREF(*output = result);
|
|
|
|
+ return ret;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+bool nsKDEUtils::commandBlockUi(const nsTArray<nsCString>& command,
|
|
|
|
+ GtkWindow* parent,
|
|
|
|
+ nsTArray<nsCString>* output) {
|
|
|
|
+ return self()->internalCommand(command, parent, true, output);
|
|
|
|
+}
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+bool nsKDEUtils::internalCommand(const nsTArray<nsCString>& command,
|
|
|
|
+ GtkWindow* parent, bool blockUi,
|
|
|
|
+ nsTArray<nsCString>* output) {
|
|
|
|
+ if (!startHelper()) return false;
|
|
|
|
+ feedCommand(command);
|
|
|
|
+ // do not store the data in 'this' but in extra structure, just in case there
|
|
|
|
+ // is reentrancy (can there be? the event loop is re-entered)
|
|
|
|
+ nsKDECommandData data;
|
|
|
|
+ data.file = replyFile;
|
|
|
|
+ data.output = output;
|
|
|
|
+ data.success = false;
|
|
|
|
+ if (blockUi) {
|
|
|
|
+ data.loop = g_main_loop_new(NULL, FALSE);
|
|
|
|
+ GtkWidget* window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
|
|
|
+ if (parent && gtk_window_get_group(parent))
|
|
|
|
+ gtk_window_group_add_window(gtk_window_get_group(parent),
|
|
|
|
+ GTK_WINDOW(window));
|
|
|
|
+ gtk_widget_realize(window);
|
|
|
|
+ gtk_widget_set_sensitive(window, TRUE);
|
|
|
|
+ gtk_grab_add(window);
|
|
|
|
+ GIOChannel* channel = g_io_channel_unix_new(fileno(data.file));
|
|
|
|
+ g_io_add_watch(channel,
|
|
|
|
+ static_cast<GIOCondition>(G_IO_IN | G_IO_ERR | G_IO_HUP),
|
|
|
|
+ kdeReadFunc, &data);
|
|
|
|
+ g_io_channel_unref(channel);
|
|
|
|
+ g_main_loop_run(data.loop);
|
|
|
|
+ g_main_loop_unref(data.loop);
|
|
|
|
+ gtk_grab_remove(window);
|
|
|
|
+ gtk_widget_destroy(window);
|
|
|
|
+ } else {
|
|
|
|
+ data.loop = NULL;
|
|
|
|
+ while (kdeReadFunc(NULL, static_cast<GIOCondition>(0), &data))
|
|
|
|
+ ;
|
|
|
|
+ }
|
|
|
|
+ return data.success;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+bool nsKDEUtils::startHelper() {
|
|
|
|
+ if (helperRunning) return true;
|
|
|
|
+ if (helperFailed) return false;
|
|
|
|
+ helperFailed = true;
|
|
|
|
+ int fdcommand[2];
|
|
|
|
+ int fdreply[2];
|
|
|
|
+ if (pipe(fdcommand) < 0) return false;
|
|
|
|
+ if (pipe(fdreply) < 0) {
|
|
|
|
+ close(fdcommand[0]);
|
|
|
|
+ close(fdcommand[1]);
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+ char* args[2] = {const_cast<char*>(KMOZILLAHELPER), NULL};
|
|
|
|
+ switch (fork()) {
|
|
|
|
+ case -1: {
|
|
|
|
+ close(fdcommand[0]);
|
|
|
|
+ close(fdcommand[1]);
|
|
|
|
+ close(fdreply[0]);
|
|
|
|
+ close(fdreply[1]);
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+ case 0: // child
|
2011-06-01 08:05:09 +02:00
|
|
|
+ {
|
2023-07-05 23:06:07 +02:00
|
|
|
+ if (dup2(fdcommand[0], STDIN_FILENO) < 0) _exit(1);
|
|
|
|
+ if (dup2(fdreply[1], STDOUT_FILENO) < 0) _exit(1);
|
|
|
|
+ int maxfd = 1024; // close all other fds
|
|
|
|
+ struct rlimit rl;
|
|
|
|
+ if (getrlimit(RLIMIT_NOFILE, &rl) == 0) maxfd = rl.rlim_max;
|
|
|
|
+ for (int i = 3; i < maxfd; ++i) close(i);
|
2011-06-01 08:05:09 +02:00
|
|
|
+#ifdef DEBUG_KDE
|
2023-07-05 23:06:07 +02:00
|
|
|
+ execvp(KMOZILLAHELPER, args);
|
2011-06-01 08:05:09 +02:00
|
|
|
+#else
|
2023-07-05 23:06:07 +02:00
|
|
|
+ execv(KMOZILLAHELPER, args);
|
2011-06-01 08:05:09 +02:00
|
|
|
+#endif
|
2023-07-05 23:06:07 +02:00
|
|
|
+ _exit(1); // failed
|
2011-06-01 08:05:09 +02:00
|
|
|
+ }
|
2023-07-05 23:06:07 +02:00
|
|
|
+ default: // parent
|
2011-06-01 08:05:09 +02:00
|
|
|
+ {
|
2023-07-05 23:06:07 +02:00
|
|
|
+ commandFile = fdopen(fdcommand[1], "w");
|
|
|
|
+ replyFile = fdopen(fdreply[0], "r");
|
|
|
|
+ close(fdcommand[0]);
|
|
|
|
+ close(fdreply[1]);
|
|
|
|
+ if (commandFile == NULL || replyFile == NULL) {
|
|
|
|
+ closeHelper();
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+ // ok, helper ready, getKdeRunning() will check if it works
|
2011-06-01 08:05:09 +02:00
|
|
|
+ }
|
2023-07-05 23:06:07 +02:00
|
|
|
+ }
|
|
|
|
+ helperFailed = false;
|
|
|
|
+ helperRunning = true;
|
|
|
|
+ return true;
|
|
|
|
+}
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+void nsKDEUtils::closeHelper() {
|
|
|
|
+ if (commandFile != NULL)
|
|
|
|
+ fclose(commandFile); // this will also make the helper quit
|
|
|
|
+ if (replyFile != NULL) fclose(replyFile);
|
|
|
|
+ helperRunning = false;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void nsKDEUtils::feedCommand(const nsTArray<nsCString>& command) {
|
|
|
|
+ for (int i = 0; i < command.Length(); ++i) {
|
|
|
|
+ nsCString line = command[i];
|
|
|
|
+ line.ReplaceSubstring("\\",
|
|
|
|
+ "\\"
|
|
|
|
+ "\\"); // \ -> \\ , i.e. escape
|
|
|
|
+ line.ReplaceSubstring("\n", "\\n");
|
2011-06-01 08:05:09 +02:00
|
|
|
+#ifdef DEBUG_KDE
|
2023-07-05 23:06:07 +02:00
|
|
|
+ fprintf(stderr, "COMM: %s\n", line.get());
|
2011-06-01 08:05:09 +02:00
|
|
|
+#endif
|
2023-07-05 23:06:07 +02:00
|
|
|
+ fputs(line.get(), commandFile);
|
|
|
|
+ fputs("\n", commandFile);
|
|
|
|
+ }
|
|
|
|
+ fputs("\\E\n",
|
|
|
|
+ commandFile); // done as \E, so it cannot happen in normal data
|
|
|
|
+ fflush(commandFile);
|
|
|
|
+}
|
|
|
|
Index: firefox-115.0/toolkit/xre/nsKDEUtils.h
|
|
|
|
===================================================================
|
2011-06-01 08:05:09 +02:00
|
|
|
--- /dev/null
|
2023-07-05 23:06:07 +02:00
|
|
|
+++ firefox-115.0/toolkit/xre/nsKDEUtils.h
|
|
|
|
@@ -0,0 +1,53 @@
|
2012-11-20 21:34:15 +01:00
|
|
|
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
|
|
+/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
|
|
|
+#ifndef nsKDEUtils_h__
|
|
|
|
+#define nsKDEUtils_h__
|
|
|
|
+
|
2018-03-13 20:46:06 +01:00
|
|
|
+#include "nsString.h"
|
2012-02-01 14:37:15 +01:00
|
|
|
+#include "nsTArray.h"
|
2011-06-01 08:05:09 +02:00
|
|
|
+#include <stdio.h>
|
|
|
|
+
|
|
|
|
+typedef struct _GtkWindow GtkWindow;
|
|
|
|
+
|
2012-03-01 10:09:12 +01:00
|
|
|
+class nsIArray;
|
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+class NS_EXPORT nsKDEUtils {
|
|
|
|
+ public:
|
|
|
|
+ /* Returns true if running inside a KDE session (regardless of whether there
|
|
|
|
+ is KDE support available for Firefox). This should be used e.g. when
|
|
|
|
+ determining dialog button order but not for code that requires the KDE
|
|
|
|
+ support. */
|
|
|
|
+ static bool kdeSession();
|
|
|
|
+ /* Returns true if running inside a KDE session and KDE support is available
|
|
|
|
+ for Firefox. This should be used everywhere where the external helper is
|
|
|
|
+ needed. */
|
|
|
|
+ static bool kdeSupport();
|
|
|
|
+ /* Executes the given helper command, returns true if helper returned success.
|
|
|
|
+ */
|
|
|
|
+ static bool command(const nsTArray<nsCString>& command,
|
|
|
|
+ nsTArray<nsCString>* output = NULL);
|
|
|
|
+ static bool command(nsIArray* command, nsIArray** output = NULL);
|
|
|
|
+ /* Like command(), but additionally blocks the parent widget like if there was
|
|
|
|
+ a modal dialog shown and enters the event loop (i.e. there are still paint
|
|
|
|
+ updates, this is for commands that take long). */
|
|
|
|
+ static bool commandBlockUi(const nsTArray<nsCString>& command,
|
|
|
|
+ GtkWindow* parent,
|
|
|
|
+ nsTArray<nsCString>* output = NULL);
|
|
|
|
+
|
|
|
|
+ private:
|
|
|
|
+ nsKDEUtils();
|
|
|
|
+ ~nsKDEUtils();
|
|
|
|
+ static nsKDEUtils* self();
|
|
|
|
+ bool startHelper();
|
|
|
|
+ void closeHelper();
|
|
|
|
+ void feedCommand(const nsTArray<nsCString>& command);
|
|
|
|
+ bool internalCommand(const nsTArray<nsCString>& command, GtkWindow* parent,
|
|
|
|
+ bool isParent, nsTArray<nsCString>* output);
|
|
|
|
+ FILE* commandFile;
|
|
|
|
+ FILE* replyFile;
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+#endif // nsKDEUtils
|
|
|
|
Index: firefox-115.0/uriloader/exthandler/HandlerServiceParent.cpp
|
|
|
|
===================================================================
|
|
|
|
--- firefox-115.0.orig/uriloader/exthandler/HandlerServiceParent.cpp
|
|
|
|
+++ firefox-115.0/uriloader/exthandler/HandlerServiceParent.cpp
|
|
|
|
@@ -18,7 +18,7 @@
|
- Mozilla Firefox 113.0
* https://www.mozilla.org/en-US/firefox/113.0/releasenotes
MFSA 2023-16 (bsc#1211175)
* CVE-2023-32205 (bmo#1753339, bmo#1753341)
Browser prompts could have been obscured by popups
* CVE-2023-32206 (bmo#1824892)
Crash in RLBox Expat driver
* CVE-2023-32207 (bmo#1826116)
Potential permissions request bypass via clickjacking
* CVE-2023-32208 (bmo#1646034)
Leak of script base URL in service workers via import()
* CVE-2023-32209 (bmo#1767194)
Persistent DoS via favicon image
* CVE-2023-32210 (bmo#1776755)
Incorrect principal object ordering
* CVE-2023-32211 (bmo#1823379)
Content process crash due to invalid wasm code
* CVE-2023-32212 (bmo#1826622)
Potential spoof due to obscured address bar
* CVE-2023-32213 (bmo#1826666)
Potential memory corruption in FileReader::DoReadData()
* MFSA-TMP-2023-0002 (bmo#1814560, bmo#1814790, bmo#1819796)
Race condition in dav1d decoding
* CVE-2023-32214 (bmo#1828716)
Potential DoS via exposed protocol handlers
* CVE-2023-32215 (bmo#1540883, bmo#1751943, bmo#1814856, bmo#1820210,
bmo#1821480, bmo#1827019, bmo#1827024, bmo#1827144, bmo#1827359,
bmo#1830186)
Memory safety bugs fixed in Firefox 113 and Firefox ESR 102.11
* CVE-2023-32216 (bmo#1746479, bmo#1806852, bmo#1815987,
OBS-URL: https://build.opensuse.org/package/show/mozilla:Factory/MozillaFirefox?expand=0&rev=1059
2023-05-10 08:26:50 +02:00
|
|
|
#include "nsComponentManagerUtils.h"
|
|
|
|
#include "nsServiceManagerUtils.h"
|
2018-05-26 18:05:54 +02:00
|
|
|
#ifdef MOZ_WIDGET_GTK
|
2019-03-19 23:01:55 +01:00
|
|
|
-# include "unix/nsGNOMERegistry.h"
|
|
|
|
+# include "unix/nsCommonRegistry.h"
|
2018-05-26 18:05:54 +02:00
|
|
|
#endif
|
|
|
|
|
|
|
|
using mozilla::dom::ContentHandlerService;
|
2023-07-05 23:06:07 +02:00
|
|
|
@@ -310,8 +310,8 @@ mozilla::ipc::IPCResult HandlerServicePa
|
2019-07-09 23:21:11 +02:00
|
|
|
}
|
2018-05-26 18:05:54 +02:00
|
|
|
#ifdef MOZ_WIDGET_GTK
|
|
|
|
// Check the GNOME registry for a protocol handler
|
2023-07-05 23:06:07 +02:00
|
|
|
- *aHandlerExists =
|
2022-10-06 09:14:45 +02:00
|
|
|
- nsGNOMERegistry::HandlerExists(PromiseFlatCString(aProtocolScheme).get());
|
2023-07-05 23:06:07 +02:00
|
|
|
+ *aHandlerExists = nsCommonRegistry::HandlerExists(
|
|
|
|
+ PromiseFlatCString(aProtocolScheme).get());
|
2018-05-26 18:05:54 +02:00
|
|
|
#else
|
|
|
|
*aHandlerExists = false;
|
|
|
|
#endif
|
2023-07-05 23:06:07 +02:00
|
|
|
Index: firefox-115.0/uriloader/exthandler/moz.build
|
|
|
|
===================================================================
|
|
|
|
--- firefox-115.0.orig/uriloader/exthandler/moz.build
|
|
|
|
+++ firefox-115.0/uriloader/exthandler/moz.build
|
|
|
|
@@ -86,7 +86,9 @@ else:
|
2011-06-01 08:05:09 +02:00
|
|
|
|
2020-12-16 23:40:17 +01:00
|
|
|
if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
|
2014-03-18 20:44:32 +01:00
|
|
|
UNIFIED_SOURCES += [
|
2020-12-16 23:40:17 +01:00
|
|
|
+ "unix/nsCommonRegistry.cpp",
|
|
|
|
"unix/nsGNOMERegistry.cpp",
|
|
|
|
+ "unix/nsKDERegistry.cpp",
|
|
|
|
"unix/nsMIMEInfoUnix.cpp",
|
2013-09-16 09:57:05 +02:00
|
|
|
]
|
2020-12-16 23:40:17 +01:00
|
|
|
elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "android":
|
2023-07-05 23:06:07 +02:00
|
|
|
@@ -134,6 +136,7 @@ LOCAL_INCLUDES += [
|
2020-12-16 23:40:17 +01:00
|
|
|
"/dom/ipc",
|
|
|
|
"/netwerk/base",
|
|
|
|
"/netwerk/protocol/http",
|
|
|
|
+ "/toolkit/xre",
|
2014-12-02 23:01:52 +01:00
|
|
|
]
|
|
|
|
|
2020-12-16 23:40:17 +01:00
|
|
|
if CONFIG["MOZ_ENABLE_DBUS"]:
|
2023-07-05 23:06:07 +02:00
|
|
|
Index: firefox-115.0/uriloader/exthandler/unix/nsCommonRegistry.cpp
|
|
|
|
===================================================================
|
2011-06-01 08:05:09 +02:00
|
|
|
--- /dev/null
|
2023-07-05 23:06:07 +02:00
|
|
|
+++ firefox-115.0/uriloader/exthandler/unix/nsCommonRegistry.cpp
|
|
|
|
@@ -0,0 +1,42 @@
|
2011-06-01 08:05:09 +02:00
|
|
|
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
2012-11-20 21:34:15 +01:00
|
|
|
+/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
|
|
|
+#include "nsCommonRegistry.h"
|
|
|
|
+
|
|
|
|
+#include "nsGNOMERegistry.h"
|
|
|
|
+#include "nsKDERegistry.h"
|
|
|
|
+#include "nsString.h"
|
|
|
|
+#include "nsKDEUtils.h"
|
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+/* static */ bool nsCommonRegistry::HandlerExists(const char* aProtocolScheme) {
|
|
|
|
+ if (nsKDEUtils::kdeSupport())
|
|
|
|
+ return nsKDERegistry::HandlerExists(aProtocolScheme);
|
|
|
|
+ return nsGNOMERegistry::HandlerExists(aProtocolScheme);
|
2011-06-01 08:05:09 +02:00
|
|
|
+}
|
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+/* static */ nsresult nsCommonRegistry::LoadURL(nsIURI* aURL) {
|
|
|
|
+ if (nsKDEUtils::kdeSupport()) return nsKDERegistry::LoadURL(aURL);
|
|
|
|
+ return nsGNOMERegistry::LoadURL(aURL);
|
2011-06-01 08:05:09 +02:00
|
|
|
+}
|
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+/* static */ void nsCommonRegistry::GetAppDescForScheme(
|
|
|
|
+ const nsACString& aScheme, nsAString& aDesc) {
|
|
|
|
+ if (nsKDEUtils::kdeSupport())
|
|
|
|
+ return nsKDERegistry::GetAppDescForScheme(aScheme, aDesc);
|
|
|
|
+ return nsGNOMERegistry::GetAppDescForScheme(aScheme, aDesc);
|
2011-06-01 08:05:09 +02:00
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/* static */ already_AddRefed<nsMIMEInfoBase>
|
2023-07-05 23:06:07 +02:00
|
|
|
+nsCommonRegistry::GetFromExtension(const nsACString& aFileExt) {
|
|
|
|
+ if (nsKDEUtils::kdeSupport())
|
|
|
|
+ return nsKDERegistry::GetFromExtension(aFileExt);
|
|
|
|
+ return nsGNOMERegistry::GetFromExtension(aFileExt);
|
2011-06-01 08:05:09 +02:00
|
|
|
+}
|
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+/* static */ already_AddRefed<nsMIMEInfoBase> nsCommonRegistry::GetFromType(
|
|
|
|
+ const nsACString& aMIMEType) {
|
|
|
|
+ if (nsKDEUtils::kdeSupport()) return nsKDERegistry::GetFromType(aMIMEType);
|
|
|
|
+ return nsGNOMERegistry::GetFromType(aMIMEType);
|
2011-06-01 08:05:09 +02:00
|
|
|
+}
|
2023-07-05 23:06:07 +02:00
|
|
|
Index: firefox-115.0/uriloader/exthandler/unix/nsCommonRegistry.h
|
|
|
|
===================================================================
|
2011-06-01 08:05:09 +02:00
|
|
|
--- /dev/null
|
2023-07-05 23:06:07 +02:00
|
|
|
+++ firefox-115.0/uriloader/exthandler/unix/nsCommonRegistry.h
|
2014-09-22 18:35:40 +02:00
|
|
|
@@ -0,0 +1,28 @@
|
2012-11-20 21:34:15 +01:00
|
|
|
+/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
2014-09-22 18:35:40 +02:00
|
|
|
+#ifndef nsCommonRegistry_h__
|
|
|
|
+#define nsCommonRegistry_h__
|
|
|
|
+
|
2011-06-01 08:05:09 +02:00
|
|
|
+#include "nsIURI.h"
|
|
|
|
+#include "nsCOMPtr.h"
|
|
|
|
+
|
|
|
|
+class nsMIMEInfoBase;
|
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+class nsCommonRegistry {
|
2011-06-01 08:05:09 +02:00
|
|
|
+ public:
|
2023-07-05 23:06:07 +02:00
|
|
|
+ static bool HandlerExists(const char* aProtocolScheme);
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+ static nsresult LoadURL(nsIURI* aURL);
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+ static void GetAppDescForScheme(const nsACString& aScheme, nsAString& aDesc);
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+ static already_AddRefed<nsMIMEInfoBase> GetFromExtension(
|
|
|
|
+ const nsACString& aFileExt);
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+ static already_AddRefed<nsMIMEInfoBase> GetFromType(
|
|
|
|
+ const nsACString& aMIMEType);
|
2011-06-01 08:05:09 +02:00
|
|
|
+};
|
2014-09-22 18:35:40 +02:00
|
|
|
+
|
|
|
|
+#endif
|
2023-07-05 23:06:07 +02:00
|
|
|
Index: firefox-115.0/uriloader/exthandler/unix/nsKDERegistry.cpp
|
|
|
|
===================================================================
|
2011-06-01 08:05:09 +02:00
|
|
|
--- /dev/null
|
2023-07-05 23:06:07 +02:00
|
|
|
+++ firefox-115.0/uriloader/exthandler/unix/nsKDERegistry.cpp
|
|
|
|
@@ -0,0 +1,75 @@
|
2011-06-01 08:05:09 +02:00
|
|
|
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
2012-11-20 21:34:15 +01:00
|
|
|
+/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
2022-03-24 23:11:50 +01:00
|
|
|
+#include "mozilla/StaticPrefs_browser.h"
|
2011-06-01 08:05:09 +02:00
|
|
|
+#include "nsKDERegistry.h"
|
|
|
|
+#include "prlink.h"
|
|
|
|
+#include "prmem.h"
|
|
|
|
+#include "nsString.h"
|
|
|
|
+#include "nsMIMEInfoUnix.h"
|
|
|
|
+#include "nsKDEUtils.h"
|
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+/* static */ bool nsKDERegistry::HandlerExists(const char* aProtocolScheme) {
|
|
|
|
+ nsTArray<nsCString> command;
|
|
|
|
+ command.AppendElement("HANDLEREXISTS"_ns);
|
|
|
|
+ command.AppendElement(nsAutoCString(aProtocolScheme));
|
|
|
|
+ return nsKDEUtils::command(command);
|
2011-06-01 08:05:09 +02:00
|
|
|
+}
|
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+/* static */ nsresult nsKDERegistry::LoadURL(nsIURI* aURL) {
|
|
|
|
+ nsTArray<nsCString> command;
|
|
|
|
+ command.AppendElement("OPEN"_ns);
|
|
|
|
+ nsCString url;
|
|
|
|
+ aURL->GetSpec(url);
|
|
|
|
+ command.AppendElement(url);
|
|
|
|
+ bool rv = nsKDEUtils::command(command);
|
|
|
|
+ if (!rv) return NS_ERROR_FAILURE;
|
2013-01-07 21:49:28 +01:00
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+ return NS_OK;
|
2011-06-01 08:05:09 +02:00
|
|
|
+}
|
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+/* static */ void nsKDERegistry::GetAppDescForScheme(const nsACString& aScheme,
|
|
|
|
+ nsAString& aDesc) {
|
|
|
|
+ nsTArray<nsCString> command;
|
|
|
|
+ command.AppendElement("GETAPPDESCFORSCHEME"_ns);
|
|
|
|
+ command.AppendElement(aScheme);
|
|
|
|
+ nsTArray<nsCString> output;
|
|
|
|
+ if (nsKDEUtils::command(command, &output) && output.Length() == 1)
|
|
|
|
+ CopyUTF8toUTF16(output[0], aDesc);
|
2011-06-01 08:05:09 +02:00
|
|
|
+}
|
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+/* static */ already_AddRefed<nsMIMEInfoBase> nsKDERegistry::GetFromExtension(
|
|
|
|
+ const nsACString& aFileExt) {
|
|
|
|
+ NS_ASSERTION(aFileExt[0] != '.', "aFileExt shouldn't start with a dot");
|
|
|
|
+ nsTArray<nsCString> command;
|
|
|
|
+ command.AppendElement("GETFROMEXTENSION"_ns);
|
|
|
|
+ command.AppendElement(aFileExt);
|
|
|
|
+ return GetFromHelper(command);
|
2011-06-01 08:05:09 +02:00
|
|
|
+}
|
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+/* static */ already_AddRefed<nsMIMEInfoBase> nsKDERegistry::GetFromType(
|
|
|
|
+ const nsACString& aMIMEType) {
|
|
|
|
+ nsTArray<nsCString> command;
|
|
|
|
+ command.AppendElement("GETFROMTYPE"_ns);
|
|
|
|
+ command.AppendElement(aMIMEType);
|
|
|
|
+ return GetFromHelper(command);
|
2011-06-01 08:05:09 +02:00
|
|
|
+}
|
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+/* static */ already_AddRefed<nsMIMEInfoBase> nsKDERegistry::GetFromHelper(
|
|
|
|
+ const nsTArray<nsCString>& command) {
|
|
|
|
+ nsTArray<nsCString> output;
|
|
|
|
+ if (nsKDEUtils::command(command, &output) && output.Length() == 3) {
|
|
|
|
+ nsCString mimetype = output[0];
|
|
|
|
+ RefPtr<nsMIMEInfoUnix> mimeInfo = new nsMIMEInfoUnix(mimetype);
|
|
|
|
+ NS_ENSURE_TRUE(mimeInfo, nullptr);
|
|
|
|
+ nsCString description = output[1];
|
|
|
|
+ mimeInfo->SetDescription(NS_ConvertUTF8toUTF16(description));
|
|
|
|
+ nsCString handlerAppName = output[2];
|
|
|
|
+ mimeInfo->SetPreferredAction(nsIMIMEInfo::saveToDisk);
|
|
|
|
+ mimeInfo->SetDefaultDescription(NS_ConvertUTF8toUTF16(handlerAppName));
|
|
|
|
+ return mimeInfo.forget();
|
|
|
|
+ }
|
|
|
|
+ return nullptr;
|
2011-06-01 08:05:09 +02:00
|
|
|
+}
|
2023-07-05 23:06:07 +02:00
|
|
|
Index: firefox-115.0/uriloader/exthandler/unix/nsKDERegistry.h
|
|
|
|
===================================================================
|
2011-06-01 08:05:09 +02:00
|
|
|
--- /dev/null
|
2023-07-05 23:06:07 +02:00
|
|
|
+++ firefox-115.0/uriloader/exthandler/unix/nsKDERegistry.h
|
|
|
|
@@ -0,0 +1,35 @@
|
2012-11-20 21:34:15 +01:00
|
|
|
+/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
2014-09-22 18:35:40 +02:00
|
|
|
+#ifndef nsKDERegistry_h__
|
|
|
|
+#define nsKDERegistry_h__
|
|
|
|
+
|
2011-06-01 08:05:09 +02:00
|
|
|
+#include "nsIURI.h"
|
|
|
|
+#include "nsCOMPtr.h"
|
2012-02-01 14:37:15 +01:00
|
|
|
+#include "nsTArray.h"
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
|
|
|
+class nsMIMEInfoBase;
|
2023-07-05 23:06:07 +02:00
|
|
|
+// class nsAutoCString;
|
|
|
|
+// class nsCString;
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+class nsKDERegistry {
|
2011-06-01 08:05:09 +02:00
|
|
|
+ public:
|
2023-07-05 23:06:07 +02:00
|
|
|
+ static bool HandlerExists(const char* aProtocolScheme);
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+ static nsresult LoadURL(nsIURI* aURL);
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+ static void GetAppDescForScheme(const nsACString& aScheme, nsAString& aDesc);
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+ static already_AddRefed<nsMIMEInfoBase> GetFromExtension(
|
|
|
|
+ const nsACString& aFileExt);
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+ static already_AddRefed<nsMIMEInfoBase> GetFromType(
|
|
|
|
+ const nsACString& aMIMEType);
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+ private:
|
|
|
|
+ static already_AddRefed<nsMIMEInfoBase> GetFromHelper(
|
|
|
|
+ const nsTArray<nsCString>& command);
|
2011-06-01 08:05:09 +02:00
|
|
|
+};
|
2014-09-22 18:35:40 +02:00
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+#endif // nsKDERegistry_h__
|
|
|
|
Index: firefox-115.0/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp
|
|
|
|
===================================================================
|
|
|
|
--- firefox-115.0.orig/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp
|
|
|
|
+++ firefox-115.0/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp
|
|
|
|
@@ -5,16 +5,19 @@
|
2016-11-15 19:06:29 +01:00
|
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
2011-06-01 08:05:09 +02:00
|
|
|
|
|
|
|
#include "nsMIMEInfoUnix.h"
|
|
|
|
-#include "nsGNOMERegistry.h"
|
|
|
|
+#include "nsCommonRegistry.h"
|
|
|
|
#include "nsIGIOService.h"
|
|
|
|
#include "nsNetCID.h"
|
|
|
|
#include "nsIIOService.h"
|
|
|
|
#ifdef MOZ_ENABLE_DBUS
|
2019-03-19 23:01:55 +01:00
|
|
|
# include "nsDBusHandlerApp.h"
|
2011-06-01 08:05:09 +02:00
|
|
|
#endif
|
|
|
|
+#if defined(XP_UNIX) && !defined(XP_MACOSX)
|
2023-07-05 23:06:07 +02:00
|
|
|
+# include "nsKDEUtils.h"
|
2011-06-01 08:05:09 +02:00
|
|
|
+#endif
|
|
|
|
|
2019-07-09 23:21:11 +02:00
|
|
|
nsresult nsMIMEInfoUnix::LoadUriInternal(nsIURI* aURI) {
|
2016-11-15 19:06:29 +01:00
|
|
|
- return nsGNOMERegistry::LoadURL(aURI);
|
|
|
|
+ return nsCommonRegistry::LoadURL(aURI);
|
|
|
|
}
|
2015-02-23 21:32:13 +01:00
|
|
|
|
2016-11-15 19:06:29 +01:00
|
|
|
NS_IMETHODIMP
|
2023-07-05 23:06:07 +02:00
|
|
|
@@ -29,15 +32,15 @@ nsMIMEInfoUnix::GetHasDefaultHandler(boo
|
2012-02-01 14:37:15 +01:00
|
|
|
*_retval = false;
|
2014-07-21 11:32:46 +02:00
|
|
|
|
2015-05-10 22:12:38 +02:00
|
|
|
if (mClass == eProtocolInfo) {
|
2014-07-21 11:32:46 +02:00
|
|
|
- *_retval = nsGNOMERegistry::HandlerExists(mSchemeOrType.get());
|
|
|
|
+ *_retval = nsCommonRegistry::HandlerExists(mSchemeOrType.get());
|
|
|
|
} else {
|
2019-01-29 19:07:12 +01:00
|
|
|
RefPtr<nsMIMEInfoBase> mimeInfo =
|
|
|
|
- nsGNOMERegistry::GetFromType(mSchemeOrType);
|
|
|
|
+ nsCommonRegistry::GetFromType(mSchemeOrType);
|
2014-07-21 11:32:46 +02:00
|
|
|
if (!mimeInfo) {
|
|
|
|
nsAutoCString ext;
|
|
|
|
nsresult rv = GetPrimaryExtension(ext);
|
|
|
|
if (NS_SUCCEEDED(rv)) {
|
|
|
|
- mimeInfo = nsGNOMERegistry::GetFromExtension(ext);
|
|
|
|
+ mimeInfo = nsCommonRegistry::GetFromExtension(ext);
|
|
|
|
}
|
2011-06-01 08:05:09 +02:00
|
|
|
}
|
2019-01-29 19:07:12 +01:00
|
|
|
if (mimeInfo) *_retval = true;
|
2023-07-05 23:06:07 +02:00
|
|
|
@@ -59,6 +62,21 @@ nsresult nsMIMEInfoUnix::LaunchDefaultWi
|
2018-03-13 20:46:06 +01:00
|
|
|
nsAutoCString nativePath;
|
|
|
|
aFile->GetNativePath(nativePath);
|
2011-06-01 08:05:09 +02:00
|
|
|
|
2023-07-05 23:06:07 +02:00
|
|
|
+ if (nsKDEUtils::kdeSupport()) {
|
2012-02-01 14:37:15 +01:00
|
|
|
+ bool supports;
|
2023-07-05 23:06:07 +02:00
|
|
|
+ if (NS_SUCCEEDED(GetHasDefaultHandler(&supports)) && supports) {
|
2012-02-01 14:37:15 +01:00
|
|
|
+ nsTArray<nsCString> command;
|
2023-07-05 23:06:07 +02:00
|
|
|
+ command.AppendElement("OPEN"_ns);
|
|
|
|
+ command.AppendElement(nativePath);
|
|
|
|
+ command.AppendElement("MIMETYPE"_ns);
|
|
|
|
+ command.AppendElement(mSchemeOrType);
|
|
|
|
+ if (nsKDEUtils::command(command)) return NS_OK;
|
2011-06-01 08:05:09 +02:00
|
|
|
+ }
|
2023-07-05 23:06:07 +02:00
|
|
|
+ if (!GetDefaultApplication()) return NS_ERROR_FILE_NOT_FOUND;
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
2023-04-11 23:09:55 +02:00
|
|
|
+ return LaunchWithIProcess(GetDefaultApplication(), nativePath);
|
2011-06-01 08:05:09 +02:00
|
|
|
+ }
|
|
|
|
+
|
|
|
|
nsCOMPtr<nsIGIOService> giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID);
|
2015-05-10 22:12:38 +02:00
|
|
|
if (!giovfs) {
|
|
|
|
return NS_ERROR_FAILURE;
|
2023-07-05 23:06:07 +02:00
|
|
|
Index: firefox-115.0/uriloader/exthandler/unix/nsOSHelperAppService.cpp
|
|
|
|
===================================================================
|
|
|
|
--- firefox-115.0.orig/uriloader/exthandler/unix/nsOSHelperAppService.cpp
|
|
|
|
+++ firefox-115.0/uriloader/exthandler/unix/nsOSHelperAppService.cpp
|
|
|
|
@@ -10,7 +10,7 @@
|
2011-06-01 08:05:09 +02:00
|
|
|
#include "nsOSHelperAppService.h"
|
|
|
|
#include "nsMIMEInfoUnix.h"
|
2013-09-16 09:57:05 +02:00
|
|
|
#ifdef MOZ_WIDGET_GTK
|
2019-03-19 23:01:55 +01:00
|
|
|
-# include "nsGNOMERegistry.h"
|
|
|
|
+# include "nsCommonRegistry.h"
|
- Mozilla Firefox 90.0
MFSA 2021-28 (bsc#1188275)
* CVE-2021-29970 (bmo#1709976)
Use-after-free in accessibility features of a document
* CVE-2021-29971 (bmo#1713638)
Granted permissions only compared host; omitting scheme and
port on Android
* CVE-2021-30547 (bmo#1715766)
Out of bounds write in ANGLE
* CVE-2021-29972 (bmo#1696816)
Use of out-of-date library included use-after-free
vulnerability
* CVE-2021-29973 (bmo#1701932)
Password autofill on HTTP websites was enabled without user
interaction on Android
* CVE-2021-29974 (bmo#1704843)
HSTS errors could be overridden when network partitioning was
enabled
* CVE-2021-29975 (bmo#1713259)
Text message could be overlaid on top of another website
* CVE-2021-29976 (bmo#1700895, bmo#1703334, bmo#1706910,
bmo#1711576, bmo#1714391)
Memory safety bugs fixed in Firefox 90 and Firefox ESR 78.12
* CVE-2021-29977 (bmo#1665836, bmo#1686138, bmo#1704316,
bmo#1706314, bmo#1709931, bmo#1712084, bmo#1712357,
bmo#1714066)
Memory safety bugs fixed in Firefox 90
- requires
NSPR 4.31
NSS 3.66
OBS-URL: https://build.opensuse.org/package/show/mozilla:Factory/MozillaFirefox?expand=0&rev=922
2021-07-15 23:12:05 +02:00
|
|
|
# ifdef MOZ_BUILD_APP_IS_BROWSER
|
|
|
|
# include "nsIToolkitShellService.h"
|
|
|
|
# include "nsIGNOMEShellService.h"
|
2023-07-05 23:06:07 +02:00
|
|
|
@@ -1106,7 +1106,7 @@ nsresult nsOSHelperAppService::OSProtoco
|
2018-01-23 10:55:12 +01:00
|
|
|
if (!XRE_IsContentProcess()) {
|
2013-09-16 09:57:05 +02:00
|
|
|
#ifdef MOZ_WIDGET_GTK
|
2018-01-23 10:55:12 +01:00
|
|
|
// Check the GNOME registry for a protocol handler
|
|
|
|
- *aHandlerExists = nsGNOMERegistry::HandlerExists(aProtocolScheme);
|
|
|
|
+ *aHandlerExists = nsCommonRegistry::HandlerExists(aProtocolScheme);
|
|
|
|
#else
|
|
|
|
*aHandlerExists = false;
|
2011-06-01 08:05:09 +02:00
|
|
|
#endif
|
2023-07-05 23:06:07 +02:00
|
|
|
@@ -1126,7 +1126,7 @@ nsresult nsOSHelperAppService::OSProtoco
|
2019-01-29 19:07:12 +01:00
|
|
|
NS_IMETHODIMP nsOSHelperAppService::GetApplicationDescription(
|
|
|
|
const nsACString& aScheme, nsAString& _retval) {
|
2013-09-16 09:57:05 +02:00
|
|
|
#ifdef MOZ_WIDGET_GTK
|
2011-06-01 08:05:09 +02:00
|
|
|
- nsGNOMERegistry::GetAppDescForScheme(aScheme, _retval);
|
|
|
|
+ nsCommonRegistry::GetAppDescForScheme(aScheme, _retval);
|
|
|
|
return _retval.IsEmpty() ? NS_ERROR_NOT_AVAILABLE : NS_OK;
|
|
|
|
#else
|
|
|
|
return NS_ERROR_NOT_AVAILABLE;
|
2023-07-05 23:06:07 +02:00
|
|
|
@@ -1231,7 +1231,7 @@ already_AddRefed<nsMIMEInfoBase> nsOSHel
|
2013-09-16 09:57:05 +02:00
|
|
|
#ifdef MOZ_WIDGET_GTK
|
2022-08-26 08:35:29 +02:00
|
|
|
LOG("Looking in GNOME registry\n");
|
2016-01-26 23:39:03 +01:00
|
|
|
RefPtr<nsMIMEInfoBase> gnomeInfo =
|
2019-01-29 19:07:12 +01:00
|
|
|
- nsGNOMERegistry::GetFromExtension(aFileExt);
|
|
|
|
+ nsCommonRegistry::GetFromExtension(aFileExt);
|
2011-06-01 08:05:09 +02:00
|
|
|
if (gnomeInfo) {
|
2022-08-26 08:35:29 +02:00
|
|
|
LOG("Got MIMEInfo from GNOME registry\n");
|
2013-08-07 14:18:59 +02:00
|
|
|
return gnomeInfo.forget();
|
2023-07-05 23:06:07 +02:00
|
|
|
@@ -1344,7 +1344,7 @@ already_AddRefed<nsMIMEInfoBase> nsOSHel
|
2015-05-10 22:12:38 +02:00
|
|
|
|
2013-09-16 09:57:05 +02:00
|
|
|
#ifdef MOZ_WIDGET_GTK
|
2011-06-01 08:05:09 +02:00
|
|
|
if (handler.IsEmpty()) {
|
2016-01-26 23:39:03 +01:00
|
|
|
- RefPtr<nsMIMEInfoBase> gnomeInfo = nsGNOMERegistry::GetFromType(aMIMEType);
|
|
|
|
+ RefPtr<nsMIMEInfoBase> gnomeInfo = nsCommonRegistry::GetFromType(aMIMEType);
|
2015-05-10 22:12:38 +02:00
|
|
|
if (gnomeInfo) {
|
2022-08-26 08:35:29 +02:00
|
|
|
LOG("Got MIMEInfo from GNOME registry without extensions; setting them "
|
|
|
|
"to %s\n",
|
2023-07-05 23:06:07 +02:00
|
|
|
Index: firefox-115.0/widget/gtk/moz.build
|
|
|
|
===================================================================
|
|
|
|
--- firefox-115.0.orig/widget/gtk/moz.build
|
|
|
|
+++ firefox-115.0/widget/gtk/moz.build
|
|
|
|
@@ -149,6 +149,7 @@ LOCAL_INCLUDES += [
|
2020-12-16 23:40:17 +01:00
|
|
|
"/layout/xul",
|
|
|
|
"/other-licenses/atk-1.0",
|
|
|
|
"/third_party/cups/include",
|
|
|
|
+ "/toolkit/xre",
|
|
|
|
"/widget",
|
|
|
|
"/widget/headless",
|
2014-12-02 23:01:52 +01:00
|
|
|
]
|
2023-07-05 23:06:07 +02:00
|
|
|
Index: firefox-115.0/widget/gtk/nsFilePicker.cpp
|
|
|
|
===================================================================
|
|
|
|
--- firefox-115.0.orig/widget/gtk/nsFilePicker.cpp
|
|
|
|
+++ firefox-115.0/widget/gtk/nsFilePicker.cpp
|
|
|
|
@@ -5,6 +5,7 @@
|
2011-06-01 08:05:09 +02:00
|
|
|
|
- Mozilla Firefox 73.0
* Added support for setting a default zoom level applicable for all
web content
* High-contrast mode has been updated to allow background images
* Improved audio quality when playing back audio at a faster or
slower speed
* Added NextDNS as alternative option for DNS over HTTPS
MFSA 2020-05 (bsc#1163368)
* CVE-2020-6796 (bmo#1610426)
Missing bounds check on shared memory read in the parent process
* CVE-2020-6797 (bmo#1596668) (MacOS X only)
Extensions granted downloads.open permission could open arbitrary
applications on Mac OSX
* CVE-2020-6798 (bmo#1602944)
Incorrect parsing of template tag could result in JavaScript injection
* CVE-2020-6799 (bmo#1606596) (Windows only)
Arbitrary code execution when opening pdf links from other
applications, when Firefox is configured as default pdf reader
* CVE-2020-6800 (bmo#1595786,bmo#1596706,bmo#1598543,bmo#1604851,
bmo#1608580,bmo#1608785,bmo#1605777)
Memory safety bugs fixed in Firefox 73 and Firefox ESR 68.5
* CVE-2020-6801 (bmo#1601024,bmo#1601712,bmo#1604836,bmo#1606492)
Memory safety bugs fixed in Firefox 73
- updated requirements
* rust >= 1.39
* NSS >= 3.49.2
* rust-cbindgen >= 0.12.0
- rebased patches
- removed obsolete patch
* mozilla-bmo1601707.patch
OBS-URL: https://build.opensuse.org/package/show/mozilla:Factory/MozillaFirefox?expand=0&rev=802
2020-02-12 15:14:39 +01:00
|
|
|
#include <dlfcn.h>
|
|
|
|
#include <gtk/gtk.h>
|
|
|
|
+#include <gdk/gdkx.h>
|
2015-04-01 07:22:19 +02:00
|
|
|
#include <sys/types.h>
|
|
|
|
#include <sys/stat.h>
|
|
|
|
#include <unistd.h>
|
2023-07-05 23:06:07 +02:00
|
|
|
@@ -28,6 +29,8 @@
|
- Mozilla Firefox 90.0
MFSA 2021-28 (bsc#1188275)
* CVE-2021-29970 (bmo#1709976)
Use-after-free in accessibility features of a document
* CVE-2021-29971 (bmo#1713638)
Granted permissions only compared host; omitting scheme and
port on Android
* CVE-2021-30547 (bmo#1715766)
Out of bounds write in ANGLE
* CVE-2021-29972 (bmo#1696816)
Use of out-of-date library included use-after-free
vulnerability
* CVE-2021-29973 (bmo#1701932)
Password autofill on HTTP websites was enabled without user
interaction on Android
* CVE-2021-29974 (bmo#1704843)
HSTS errors could be overridden when network partitioning was
enabled
* CVE-2021-29975 (bmo#1713259)
Text message could be overlaid on top of another website
* CVE-2021-29976 (bmo#1700895, bmo#1703334, bmo#1706910,
bmo#1711576, bmo#1714391)
Memory safety bugs fixed in Firefox 90 and Firefox ESR 78.12
* CVE-2021-29977 (bmo#1665836, bmo#1686138, bmo#1704316,
bmo#1706314, bmo#1709931, bmo#1712084, bmo#1712357,
bmo#1714066)
Memory safety bugs fixed in Firefox 90
- requires
NSPR 4.31
NSS 3.66
OBS-URL: https://build.opensuse.org/package/show/mozilla:Factory/MozillaFirefox?expand=0&rev=922
2021-07-15 23:12:05 +02:00
|
|
|
#include "WidgetUtilsGtk.h"
|
2011-06-01 08:05:09 +02:00
|
|
|
|
|
|
|
#include "nsFilePicker.h"
|
|
|
|
+#include "nsKDEUtils.h"
|
- Mozilla Firefox 76.0
* Lockwise improvements
* Improvements in Picture-in-Picture feature
* Support Audio Worklets
MFSA-2020-16 (bsc#1171186)
* CVE-2020-12387 (bmo#1545345)
Use-after-free during worker shutdown
* CVE-2020-12388 (bmo#1618911)
Sandbox escape with improperly guarded Access Tokens
* CVE-2020-12389 (bmo#1554110)
Sandbox escape with improperly separated process types
* CVE-2020-6831 (bmo#1632241)
Buffer overflow in SCTP chunk input validation
* CVE-2020-12390 (bmo#1141959)
Incorrect serialization of nsIPrincipal.origin for IPv6 addresses
* CVE-2020-12391 (bmo#1457100)
Content-Security-Policy bypass using object elements
* CVE-2020-12392 (bmo#1614468)
Arbitrary local file access with 'Copy as cURL'
* CVE-2020-12393 (bmo#1615471)
Devtools' 'Copy as cURL' feature did not fully escape
website-controlled data, potentially leading to command injection
* CVE-2020-12394 (bmo#1628288)
URL spoofing in location bar when unfocussed
* CVE-2020-12395 (bmo#1595886, bmo#1611482, bmo#1614704, bmo#1624098,
bmo#1625749, bmo#1626382, bmo#1628076, bmo#1631508)
Memory safety bugs fixed in Firefox 76 and Firefox ESR 68.8
* CVE-2020-12396 (bmo#1339601, bmo#1611938, bmo#1620488,
bmo#1622291, bmo#1627644)
Memory safety bugs fixed in Firefox 76
OBS-URL: https://build.opensuse.org/package/show/mozilla:Factory/MozillaFirefox?expand=0&rev=825
2020-05-05 21:25:39 +02:00
|
|
|
+#include "nsURLHelper.h"
|
2011-06-01 08:05:09 +02:00
|
|
|
|
- Mozilla Firefox 90.0
MFSA 2021-28 (bsc#1188275)
* CVE-2021-29970 (bmo#1709976)
Use-after-free in accessibility features of a document
* CVE-2021-29971 (bmo#1713638)
Granted permissions only compared host; omitting scheme and
port on Android
* CVE-2021-30547 (bmo#1715766)
Out of bounds write in ANGLE
* CVE-2021-29972 (bmo#1696816)
Use of out-of-date library included use-after-free
vulnerability
* CVE-2021-29973 (bmo#1701932)
Password autofill on HTTP websites was enabled without user
interaction on Android
* CVE-2021-29974 (bmo#1704843)
HSTS errors could be overridden when network partitioning was
enabled
* CVE-2021-29975 (bmo#1713259)
Text message could be overlaid on top of another website
* CVE-2021-29976 (bmo#1700895, bmo#1703334, bmo#1706910,
bmo#1711576, bmo#1714391)
Memory safety bugs fixed in Firefox 90 and Firefox ESR 78.12
* CVE-2021-29977 (bmo#1665836, bmo#1686138, bmo#1704316,
bmo#1706314, bmo#1709931, bmo#1712084, bmo#1712357,
bmo#1714066)
Memory safety bugs fixed in Firefox 90
- requires
NSPR 4.31
NSS 3.66
OBS-URL: https://build.opensuse.org/package/show/mozilla:Factory/MozillaFirefox?expand=0&rev=922
2021-07-15 23:12:05 +02:00
|
|
|
#undef LOG
|
|
|
|
#ifdef MOZ_LOGGING
|
2023-07-05 23:06:07 +02:00
|
|
|
@@ -242,7 +245,8 @@ NS_IMETHODIMP
|
2019-07-09 23:21:11 +02:00
|
|
|
nsFilePicker::AppendFilter(const nsAString& aTitle, const nsAString& aFilter) {
|
2011-06-01 08:05:09 +02:00
|
|
|
if (aFilter.EqualsLiteral("..apps")) {
|
|
|
|
// No platform specific thing we can do here, really....
|
|
|
|
- return NS_OK;
|
|
|
|
+ // Unless it's KDE.
|
2023-07-05 23:06:07 +02:00
|
|
|
+ if (mMode != modeOpen || !nsKDEUtils::kdeSupport()) return NS_OK;
|
2011-06-01 08:05:09 +02:00
|
|
|
}
|
|
|
|
|
2013-01-07 21:49:28 +01:00
|
|
|
nsAutoCString filter, name;
|
2023-07-05 23:06:07 +02:00
|
|
|
@@ -352,6 +356,31 @@ nsFilePicker::Open(nsIFilePickerShownCal
|
2012-11-26 12:27:34 +01:00
|
|
|
// Can't show two dialogs concurrently with the same filepicker
|
2019-01-29 19:07:12 +01:00
|
|
|
if (mRunning) return NS_ERROR_NOT_AVAILABLE;
|
2011-06-01 08:05:09 +02:00
|
|
|
|
2012-11-26 12:27:34 +01:00
|
|
|
+ // KDE file picker is not handled via callback
|
2023-07-05 23:06:07 +02:00
|
|
|
+ if (nsKDEUtils::kdeSupport()) {
|
2012-11-26 12:27:34 +01:00
|
|
|
+ mCallback = aCallback;
|
|
|
|
+ mRunning = true;
|
2018-01-03 14:39:46 +01:00
|
|
|
+ NS_ADDREF_THIS();
|
2023-07-05 23:06:07 +02:00
|
|
|
+ g_idle_add(
|
|
|
|
+ [](gpointer data) -> gboolean {
|
|
|
|
+ nsFilePicker* queuedPicker = (nsFilePicker*)data;
|
|
|
|
+ nsIFilePicker::ResultCode result;
|
|
|
|
+ queuedPicker->kdeFileDialog(&result);
|
|
|
|
+ if (queuedPicker->mCallback) {
|
|
|
|
+ queuedPicker->mCallback->Done(result);
|
|
|
|
+ queuedPicker->mCallback = nullptr;
|
|
|
|
+ } else {
|
|
|
|
+ queuedPicker->mResult = result;
|
|
|
|
+ }
|
|
|
|
+ queuedPicker->mRunning = false;
|
|
|
|
+ NS_RELEASE(queuedPicker);
|
|
|
|
+ return G_SOURCE_REMOVE;
|
|
|
|
+ },
|
|
|
|
+ this);
|
2017-10-30 07:56:57 +01:00
|
|
|
+
|
2012-11-26 12:27:34 +01:00
|
|
|
+ return NS_OK;
|
|
|
|
+ }
|
2012-03-01 10:09:12 +01:00
|
|
|
+
|
2020-04-07 14:21:48 +02:00
|
|
|
NS_ConvertUTF16toUTF8 title(mTitle);
|
2011-06-01 08:05:09 +02:00
|
|
|
|
2019-07-09 23:21:11 +02:00
|
|
|
GtkWindow* parent_widget =
|
2023-07-05 23:06:07 +02:00
|
|
|
@@ -633,6 +662,205 @@ void nsFilePicker::Done(void* file_choos
|
2012-11-20 21:34:15 +01:00
|
|
|
NS_RELEASE_THIS();
|
2011-06-01 08:05:09 +02:00
|
|
|
}
|
2018-12-12 12:35:28 +01:00
|
|
|
|
2023-07-05 23:06:07 +02:00
|
|
|
+nsCString nsFilePicker::kdeMakeFilter(int index) {
|
|
|
|
+ nsCString buf = mFilters[index];
|
|
|
|
+ for (PRUint32 i = 0; i < buf.Length(); ++i)
|
|
|
|
+ if (buf[i] == ';') // KDE separates just using spaces
|
|
|
|
+ buf.SetCharAt(' ', i);
|
|
|
|
+ if (!mFilterNames[index].IsEmpty()) {
|
|
|
|
+ buf += "|";
|
|
|
|
+ buf += mFilterNames[index].get();
|
|
|
|
+ }
|
|
|
|
+ return buf;
|
|
|
|
+}
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+static PRInt32 windowToXid(nsIWidget* widget) {
|
|
|
|
+ GtkWindow* parent_widget =
|
|
|
|
+ GTK_WINDOW(widget->GetNativeData(NS_NATIVE_SHELLWIDGET));
|
|
|
|
+ GdkWindow* gdk_window =
|
|
|
|
+ gtk_widget_get_window(gtk_widget_get_toplevel(GTK_WIDGET(parent_widget)));
|
|
|
|
+ return GDK_WINDOW_XID(gdk_window);
|
|
|
|
+}
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+NS_IMETHODIMP nsFilePicker::kdeFileDialog(nsIFilePicker::ResultCode* aReturn) {
|
|
|
|
+ NS_ENSURE_ARG_POINTER(aReturn);
|
|
|
|
+
|
|
|
|
+ if (mMode == modeOpen && mFilters.Length() == 1 &&
|
|
|
|
+ mFilters[0].EqualsLiteral("..apps"))
|
|
|
|
+ return kdeAppsDialog(aReturn);
|
|
|
|
+
|
|
|
|
+ nsCString title;
|
|
|
|
+ title.Adopt(ToNewUTF8String(mTitle));
|
|
|
|
+
|
|
|
|
+ const char* arg = NULL;
|
|
|
|
+ if (mAllowURLs) {
|
|
|
|
+ switch (mMode) {
|
|
|
|
+ case nsIFilePicker::modeOpen:
|
|
|
|
+ case nsIFilePicker::modeOpenMultiple:
|
|
|
|
+ arg = "GETOPENURL";
|
|
|
|
+ break;
|
|
|
|
+ case nsIFilePicker::modeSave:
|
|
|
|
+ arg = "GETSAVEURL";
|
|
|
|
+ break;
|
|
|
|
+ case nsIFilePicker::modeGetFolder:
|
|
|
|
+ arg = "GETDIRECTORYURL";
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ switch (mMode) {
|
|
|
|
+ case nsIFilePicker::modeOpen:
|
|
|
|
+ case nsIFilePicker::modeOpenMultiple:
|
|
|
|
+ arg = "GETOPENFILENAME";
|
|
|
|
+ break;
|
|
|
|
+ case nsIFilePicker::modeSave:
|
|
|
|
+ arg = "GETSAVEFILENAME";
|
|
|
|
+ break;
|
|
|
|
+ case nsIFilePicker::modeGetFolder:
|
|
|
|
+ arg = "GETDIRECTORYFILENAME";
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
2013-01-07 21:49:28 +01:00
|
|
|
+ nsAutoCString directory;
|
2011-06-01 08:05:09 +02:00
|
|
|
+ if (mDisplayDirectory) {
|
|
|
|
+ mDisplayDirectory->GetNativePath(directory);
|
|
|
|
+ } else if (mPrevDisplayDirectory) {
|
|
|
|
+ mPrevDisplayDirectory->GetNativePath(directory);
|
|
|
|
+ }
|
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+ nsAutoCString startdir;
|
2011-06-01 08:05:09 +02:00
|
|
|
+ if (!directory.IsEmpty()) {
|
|
|
|
+ startdir = directory;
|
|
|
|
+ }
|
|
|
|
+ if (mMode == nsIFilePicker::modeSave) {
|
2023-07-05 23:06:07 +02:00
|
|
|
+ if (!startdir.IsEmpty()) {
|
2011-06-01 08:05:09 +02:00
|
|
|
+ startdir += "/";
|
|
|
|
+ startdir += ToNewUTF8String(mDefault);
|
2023-07-05 23:06:07 +02:00
|
|
|
+ } else
|
2011-06-01 08:05:09 +02:00
|
|
|
+ startdir = ToNewUTF8String(mDefault);
|
|
|
|
+ }
|
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+ nsAutoCString filters;
|
|
|
|
+ PRInt32 count = mFilters.Length();
|
|
|
|
+ if (count == 0) // just in case
|
|
|
|
+ filters = "*";
|
|
|
|
+ else {
|
|
|
|
+ filters = kdeMakeFilter(0);
|
|
|
|
+ for (PRInt32 i = 1; i < count; ++i) {
|
|
|
|
+ filters += "\n";
|
|
|
|
+ filters += kdeMakeFilter(i);
|
2011-06-01 08:05:09 +02:00
|
|
|
+ }
|
|
|
|
+ }
|
2023-07-05 23:06:07 +02:00
|
|
|
+
|
|
|
|
+ nsTArray<nsCString> command;
|
|
|
|
+ command.AppendElement(nsAutoCString(arg));
|
|
|
|
+ command.AppendElement(startdir);
|
|
|
|
+ if (mMode != nsIFilePicker::modeGetFolder) {
|
|
|
|
+ command.AppendElement(filters);
|
|
|
|
+ nsAutoCString selected;
|
|
|
|
+ selected.AppendInt(mSelectedType);
|
|
|
|
+ command.AppendElement(selected);
|
|
|
|
+ }
|
|
|
|
+ command.AppendElement(title);
|
|
|
|
+ if (mMode == nsIFilePicker::modeOpenMultiple)
|
|
|
|
+ command.AppendElement("MULTIPLE"_ns);
|
|
|
|
+ if (PRInt32 xid = windowToXid(mParentWidget)) {
|
|
|
|
+ command.AppendElement("PARENT"_ns);
|
|
|
|
+ nsAutoCString parent;
|
|
|
|
+ parent.AppendInt(xid);
|
|
|
|
+ command.AppendElement(parent);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ nsTArray<nsCString> output;
|
|
|
|
+ if (nsKDEUtils::commandBlockUi(
|
|
|
|
+ command,
|
|
|
|
+ GTK_WINDOW(mParentWidget->GetNativeData(NS_NATIVE_SHELLWIDGET)),
|
|
|
|
+ &output)) {
|
|
|
|
+ *aReturn = nsIFilePicker::returnOK;
|
|
|
|
+ mFiles.Clear();
|
|
|
|
+ if (mMode != nsIFilePicker::modeGetFolder) {
|
|
|
|
+ mSelectedType = atoi(output[0].get());
|
|
|
|
+ output.RemoveElementAt(0);
|
2011-06-01 08:05:09 +02:00
|
|
|
+ }
|
2023-07-05 23:06:07 +02:00
|
|
|
+ if (mMode == nsIFilePicker::modeOpenMultiple) {
|
|
|
|
+ mFileURL.Truncate();
|
|
|
|
+ PRUint32 count = output.Length();
|
|
|
|
+ for (PRUint32 i = 0; i < count; ++i) {
|
|
|
|
+ nsCOMPtr<nsIFile> localfile;
|
|
|
|
+ nsresult rv = NS_NewNativeLocalFile(output[i], PR_FALSE,
|
|
|
|
+ getter_AddRefs(localfile));
|
|
|
|
+ if (NS_SUCCEEDED(rv)) mFiles.AppendObject(localfile);
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ if (output.Length() == 0)
|
|
|
|
+ mFileURL = nsCString();
|
|
|
|
+ else if (mAllowURLs)
|
|
|
|
+ mFileURL = output[0];
|
|
|
|
+ else // GetFile() actually requires it to be url even for local files :-/
|
|
|
|
+ {
|
|
|
|
+ nsCOMPtr<nsIFile> localfile;
|
|
|
|
+ nsresult rv = NS_NewNativeLocalFile(output[0], PR_FALSE,
|
|
|
|
+ getter_AddRefs(localfile));
|
|
|
|
+ if (NS_SUCCEEDED(rv))
|
|
|
|
+ rv = net_GetURLSpecFromActualFile(localfile, mFileURL);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ // Remember last used directory.
|
|
|
|
+ nsCOMPtr<nsIFile> file;
|
|
|
|
+ GetFile(getter_AddRefs(file));
|
|
|
|
+ if (file) {
|
|
|
|
+ nsCOMPtr<nsIFile> dir;
|
|
|
|
+ file->GetParent(getter_AddRefs(dir));
|
|
|
|
+ nsCOMPtr<nsIFile> localDir(dir);
|
|
|
|
+ if (localDir) {
|
|
|
|
+ localDir.swap(mPrevDisplayDirectory);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (mMode == nsIFilePicker::modeSave) {
|
|
|
|
+ nsCOMPtr<nsIFile> file;
|
|
|
|
+ GetFile(getter_AddRefs(file));
|
|
|
|
+ if (file) {
|
|
|
|
+ bool exists = false;
|
|
|
|
+ file->Exists(&exists);
|
|
|
|
+ if (exists) // TODO do overwrite check in the helper app
|
|
|
|
+ *aReturn = nsIFilePicker::returnReplace;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ *aReturn = nsIFilePicker::returnCancel;
|
|
|
|
+ }
|
|
|
|
+ return NS_OK;
|
|
|
|
+}
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+NS_IMETHODIMP nsFilePicker::kdeAppsDialog(nsIFilePicker::ResultCode* aReturn) {
|
|
|
|
+ NS_ENSURE_ARG_POINTER(aReturn);
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+ nsCString title;
|
|
|
|
+ title.Adopt(ToNewUTF8String(mTitle));
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+ nsTArray<nsCString> command;
|
|
|
|
+ command.AppendElement("APPSDIALOG"_ns);
|
|
|
|
+ command.AppendElement(title);
|
|
|
|
+ if (PRInt32 xid = windowToXid(mParentWidget)) {
|
|
|
|
+ command.AppendElement("PARENT"_ns);
|
|
|
|
+ nsAutoCString parent;
|
|
|
|
+ parent.AppendInt(xid);
|
|
|
|
+ command.AppendElement(parent);
|
|
|
|
+ }
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+ nsTArray<nsCString> output;
|
|
|
|
+ if (nsKDEUtils::commandBlockUi(
|
|
|
|
+ command,
|
|
|
|
+ GTK_WINDOW(mParentWidget->GetNativeData(NS_NATIVE_SHELLWIDGET)),
|
|
|
|
+ &output)) {
|
|
|
|
+ *aReturn = nsIFilePicker::returnOK;
|
|
|
|
+ mFileURL = output.Length() > 0 ? output[0] : nsCString();
|
|
|
|
+ } else {
|
|
|
|
+ *aReturn = nsIFilePicker::returnCancel;
|
|
|
|
+ }
|
|
|
|
+ return NS_OK;
|
|
|
|
+}
|
2018-12-12 12:35:28 +01:00
|
|
|
+
|
|
|
|
// All below functions available as of GTK 3.20+
|
2019-07-09 23:21:11 +02:00
|
|
|
void* nsFilePicker::GtkFileChooserNew(const gchar* title, GtkWindow* parent,
|
2019-01-29 19:07:12 +01:00
|
|
|
GtkFileChooserAction action,
|
2023-07-05 23:06:07 +02:00
|
|
|
Index: firefox-115.0/widget/gtk/nsFilePicker.h
|
|
|
|
===================================================================
|
|
|
|
--- firefox-115.0.orig/widget/gtk/nsFilePicker.h
|
|
|
|
+++ firefox-115.0/widget/gtk/nsFilePicker.h
|
|
|
|
@@ -74,6 +74,12 @@ class nsFilePicker : public nsBaseFilePi
|
2019-01-29 19:07:12 +01:00
|
|
|
private:
|
2019-07-09 23:21:11 +02:00
|
|
|
static nsIFile* mPrevDisplayDirectory;
|
2015-09-22 08:10:40 +02:00
|
|
|
|
2011-06-01 08:05:09 +02:00
|
|
|
+ bool kdeRunning();
|
|
|
|
+ bool getKdeRunning();
|
2023-07-05 23:06:07 +02:00
|
|
|
+ NS_IMETHODIMP kdeFileDialog(nsIFilePicker::ResultCode* aReturn);
|
|
|
|
+ NS_IMETHODIMP kdeAppsDialog(nsIFilePicker::ResultCode* aReturn);
|
|
|
|
+ nsCString kdeMakeFilter(int index);
|
2015-09-22 08:10:40 +02:00
|
|
|
+
|
2019-07-09 23:21:11 +02:00
|
|
|
void* GtkFileChooserNew(const gchar* title, GtkWindow* parent,
|
2019-01-29 19:07:12 +01:00
|
|
|
GtkFileChooserAction action,
|
2019-07-09 23:21:11 +02:00
|
|
|
const gchar* accept_label);
|
2023-07-05 23:06:07 +02:00
|
|
|
Index: firefox-115.0/xpcom/components/ManifestParser.cpp
|
|
|
|
===================================================================
|
|
|
|
--- firefox-115.0.orig/xpcom/components/ManifestParser.cpp
|
|
|
|
+++ firefox-115.0/xpcom/components/ManifestParser.cpp
|
|
|
|
@@ -43,6 +43,7 @@
|
2012-06-05 20:01:53 +02:00
|
|
|
#include "nsIScriptError.h"
|
|
|
|
#include "nsIXULAppInfo.h"
|
|
|
|
#include "nsIXULRuntime.h"
|
|
|
|
+#include "nsKDEUtils.h"
|
|
|
|
|
- update to Firefox 51.0
* requires NSPR >= 4.13.1, NSS >= 3.28.1
* Added support for FLAC (Free Lossless Audio Codec) playback
* Added support for WebGL 2
* Added Georgian (ka) and Kabyle (kab) locales
* Support saving passwords for forms without 'submit' events
* Improved video performance for users without GPU acceleration
* Zoom indicator is shown in the URL bar if the zoom level is not
at default level
* View passwords from the prompt before saving them
* Remove Belarusian (be) locale
* Use Skia for content rendering (Linux)
* MFSA 2017-01
CVE-2017-5375: Excessive JIT code allocation allows bypass of
ASLR and DEP (bmo#1325200, boo#1021814)
CVE-2017-5376: Use-after-free in XSL (bmo#1311687, boo#1021817)
CVE-2017-5377: Memory corruption with transforms to create
gradients in Skia (bmo#1306883, boo#1021826)
CVE-2017-5378: Pointer and frame data leakage of Javascript objects
(bmo#1312001, bmo#1330769, boo#1021818)
CVE-2017-5379: Use-after-free in Web Animations
(bmo#1309198,boo#1021827)
CVE-2017-5380: Potential use-after-free during DOM manipulations
(bmo#1322107, boo#1021819)
CVE-2017-5390: Insecure communication methods in Developer Tools
JSON viewer (bmo#1297361, boo#1021820)
CVE-2017-5389: WebExtensions can install additional add-ons via
modified host requests (bmo#1308688, boo#1021828)
CVE-2017-5396: Use-after-free with Media Decoder
(bmo#1329403, boo#1021821)
OBS-URL: https://build.opensuse.org/package/show/mozilla:Factory/MozillaFirefox?expand=0&rev=567
2017-01-25 11:27:08 +01:00
|
|
|
using namespace mozilla;
|
|
|
|
|
2023-07-05 23:06:07 +02:00
|
|
|
@@ -394,6 +395,7 @@ void ParseManifest(NSLocationType aType,
|
2020-08-25 20:18:25 +02:00
|
|
|
constexpr auto kOs = u"os"_ns;
|
|
|
|
constexpr auto kOsVersion = u"osversion"_ns;
|
|
|
|
constexpr auto kABI = u"abi"_ns;
|
|
|
|
+ constexpr auto kDesktop = u"desktop"_ns;
|
|
|
|
constexpr auto kProcess = u"process"_ns;
|
2012-06-05 20:01:53 +02:00
|
|
|
#if defined(MOZ_WIDGET_ANDROID)
|
2020-08-25 20:18:25 +02:00
|
|
|
constexpr auto kTablet = u"tablet"_ns;
|
2023-07-05 23:06:07 +02:00
|
|
|
@@ -453,6 +455,7 @@ void ParseManifest(NSLocationType aType,
|
2012-06-05 20:01:53 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
nsAutoString osVersion;
|
|
|
|
+ nsAutoString desktop;
|
|
|
|
#if defined(XP_WIN)
|
2019-03-19 23:01:55 +01:00
|
|
|
# pragma warning(push)
|
|
|
|
# pragma warning(disable : 4996) // VC12+ deprecates GetVersionEx
|
2023-07-05 23:06:07 +02:00
|
|
|
@@ -461,14 +464,17 @@ void ParseManifest(NSLocationType aType,
|
2019-01-29 19:07:12 +01:00
|
|
|
nsTextFormatter::ssprintf(osVersion, u"%ld.%ld", info.dwMajorVersion,
|
2014-12-02 23:01:52 +01:00
|
|
|
info.dwMinorVersion);
|
2012-06-05 20:01:53 +02:00
|
|
|
}
|
2020-08-25 20:18:25 +02:00
|
|
|
+ desktop = u"win"_ns;
|
2019-03-19 23:01:55 +01:00
|
|
|
# pragma warning(pop)
|
2012-06-05 20:01:53 +02:00
|
|
|
#elif defined(MOZ_WIDGET_COCOA)
|
2020-06-30 13:39:58 +02:00
|
|
|
SInt32 majorVersion = nsCocoaFeatures::macOSVersionMajor();
|
|
|
|
SInt32 minorVersion = nsCocoaFeatures::macOSVersionMinor();
|
2019-01-29 19:07:12 +01:00
|
|
|
nsTextFormatter::ssprintf(osVersion, u"%ld.%ld", majorVersion, minorVersion);
|
2020-08-25 20:18:25 +02:00
|
|
|
+ desktop = u"macosx"_ns);
|
2013-09-16 09:57:05 +02:00
|
|
|
#elif defined(MOZ_WIDGET_GTK)
|
2019-01-29 19:07:12 +01:00
|
|
|
nsTextFormatter::ssprintf(osVersion, u"%ld.%ld", gtk_major_version,
|
2014-12-02 23:01:52 +01:00
|
|
|
gtk_minor_version);
|
2020-08-25 20:18:25 +02:00
|
|
|
+ desktop = nsKDEUtils::kdeSession() ? u"kde"_ns : u"gnome"_ns;
|
2012-06-05 20:01:53 +02:00
|
|
|
#elif defined(MOZ_WIDGET_ANDROID)
|
|
|
|
bool isTablet = false;
|
2023-02-15 22:11:31 +01:00
|
|
|
if (jni::IsAvailable()) {
|
2023-07-05 23:06:07 +02:00
|
|
|
@@ -476,6 +482,7 @@ void ParseManifest(NSLocationType aType,
|
2023-02-15 22:11:31 +01:00
|
|
|
osVersion.Assign(release->ToString());
|
2016-11-15 19:06:29 +01:00
|
|
|
isTablet = java::GeckoAppShell::IsTablet();
|
2012-06-05 20:01:53 +02:00
|
|
|
}
|
2020-08-25 20:18:25 +02:00
|
|
|
+ desktop = u"android"_ns;
|
2012-06-05 20:01:53 +02:00
|
|
|
#endif
|
|
|
|
|
2015-11-03 16:49:03 +01:00
|
|
|
if (XRE_IsContentProcess()) {
|
2023-07-05 23:06:07 +02:00
|
|
|
@@ -576,6 +583,7 @@ void ParseManifest(NSLocationType aType,
|
2021-03-25 22:32:32 +01:00
|
|
|
: eUnspecified;
|
2012-06-05 20:01:53 +02:00
|
|
|
#endif
|
2015-05-10 22:12:38 +02:00
|
|
|
int flags = 0;
|
2012-06-05 20:01:53 +02:00
|
|
|
+ TriState stDesktop = eUnspecified;
|
|
|
|
|
2014-12-02 23:01:52 +01:00
|
|
|
while ((token = nsCRT::strtok(whitespace, kWhitespace, &whitespace)) &&
|
|
|
|
ok) {
|
2023-07-05 23:06:07 +02:00
|
|
|
@@ -585,6 +593,7 @@ void ParseManifest(NSLocationType aType,
|
2012-06-05 20:01:53 +02:00
|
|
|
if (CheckStringFlag(kApplication, wtoken, appID, stApp) ||
|
2017-09-05 12:10:37 +02:00
|
|
|
CheckOsFlag(kOs, wtoken, osTarget, stOs) ||
|
2012-06-05 20:01:53 +02:00
|
|
|
CheckStringFlag(kABI, wtoken, abi, stABI) ||
|
|
|
|
+ CheckStringFlag(kDesktop, wtoken, desktop, stDesktop) ||
|
2015-01-14 19:32:16 +01:00
|
|
|
CheckStringFlag(kProcess, wtoken, process, stProcess) ||
|
2012-06-05 20:01:53 +02:00
|
|
|
CheckVersionFlag(kOsVersion, wtoken, osVersion, stOsVersion) ||
|
|
|
|
CheckVersionFlag(kAppVersion, wtoken, appVersion, stAppVersion) ||
|
2023-07-05 23:06:07 +02:00
|
|
|
@@ -644,6 +653,7 @@ void ParseManifest(NSLocationType aType,
|
2012-06-05 20:01:53 +02:00
|
|
|
|
2019-01-29 19:07:12 +01:00
|
|
|
if (!ok || stApp == eBad || stAppVersion == eBad ||
|
2023-07-05 23:06:07 +02:00
|
|
|
stGeckoVersion == eBad || stOs == eBad || stOsVersion == eBad ||
|
|
|
|
+ stDesktop == eBad ||
|
2012-06-05 20:01:53 +02:00
|
|
|
#ifdef MOZ_WIDGET_ANDROID
|
|
|
|
stTablet == eBad ||
|
2021-03-25 22:32:32 +01:00
|
|
|
#endif
|
2023-07-05 23:06:07 +02:00
|
|
|
Index: firefox-115.0/xpcom/components/moz.build
|
|
|
|
===================================================================
|
|
|
|
--- firefox-115.0.orig/xpcom/components/moz.build
|
|
|
|
+++ firefox-115.0/xpcom/components/moz.build
|
|
|
|
@@ -71,6 +71,7 @@ LOCAL_INCLUDES += [
|
2020-12-16 23:40:17 +01:00
|
|
|
"/js/xpconnect/loader",
|
|
|
|
"/layout/build",
|
|
|
|
"/modules/libjar",
|
|
|
|
+ "/toolkit/xre",
|
2014-12-02 23:01:52 +01:00
|
|
|
]
|
|
|
|
|
2020-12-16 23:40:17 +01:00
|
|
|
if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
|
2023-07-05 23:06:07 +02:00
|
|
|
Index: firefox-115.0/xpcom/io/nsLocalFileUnix.cpp
|
|
|
|
===================================================================
|
|
|
|
--- firefox-115.0.orig/xpcom/io/nsLocalFileUnix.cpp
|
|
|
|
+++ firefox-115.0/xpcom/io/nsLocalFileUnix.cpp
|
|
|
|
@@ -51,6 +51,7 @@
|
2011-06-01 08:05:09 +02:00
|
|
|
|
2012-10-09 13:14:08 +02:00
|
|
|
#ifdef MOZ_WIDGET_GTK
|
2019-03-19 23:01:55 +01:00
|
|
|
# include "nsIGIOService.h"
|
|
|
|
+# include "nsKDEUtils.h"
|
2011-06-01 08:05:09 +02:00
|
|
|
#endif
|
|
|
|
|
2012-02-01 14:37:15 +01:00
|
|
|
#ifdef MOZ_WIDGET_COCOA
|
2023-07-05 23:06:07 +02:00
|
|
|
@@ -2172,10 +2173,18 @@ nsLocalFile::Reveal() {
|
2018-09-05 09:16:27 +02:00
|
|
|
}
|
|
|
|
|
2012-10-09 13:14:08 +02:00
|
|
|
#ifdef MOZ_WIDGET_GTK
|
2014-09-22 18:35:40 +02:00
|
|
|
+ nsAutoCString url;
|
2022-05-31 23:18:50 +02:00
|
|
|
nsCOMPtr<nsIGIOService> giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID);
|
|
|
|
- if (!giovfs) {
|
2023-07-05 23:06:07 +02:00
|
|
|
- return NS_ERROR_FAILURE;
|
2022-05-31 23:18:50 +02:00
|
|
|
+ url = mPath;
|
2023-07-05 23:06:07 +02:00
|
|
|
+ if (nsKDEUtils::kdeSupport()) {
|
2014-09-22 18:35:40 +02:00
|
|
|
+ nsTArray<nsCString> command;
|
2023-07-05 23:06:07 +02:00
|
|
|
+ command.AppendElement("REVEAL"_ns);
|
|
|
|
+ command.AppendElement(mPath);
|
|
|
|
+ return nsKDEUtils::command(command) ? NS_OK : NS_ERROR_FAILURE;
|
|
|
|
}
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
2023-07-05 23:06:07 +02:00
|
|
|
+ if (!giovfs) return NS_ERROR_FAILURE;
|
2011-06-01 08:05:09 +02:00
|
|
|
+
|
2022-05-31 23:18:50 +02:00
|
|
|
return giovfs->RevealFile(this);
|
|
|
|
#elif defined(MOZ_WIDGET_COCOA)
|
|
|
|
CFURLRef url;
|
2023-07-05 23:06:07 +02:00
|
|
|
@@ -2197,6 +2206,13 @@ nsLocalFile::Launch() {
|
2018-09-05 09:16:27 +02:00
|
|
|
}
|
|
|
|
|
2013-12-11 09:31:54 +01:00
|
|
|
#ifdef MOZ_WIDGET_GTK
|
2023-07-05 23:06:07 +02:00
|
|
|
+ if (nsKDEUtils::kdeSupport()) {
|
2014-09-22 18:35:40 +02:00
|
|
|
+ nsTArray<nsCString> command;
|
2023-07-05 23:06:07 +02:00
|
|
|
+ command.AppendElement("OPEN"_ns);
|
|
|
|
+ command.AppendElement(mPath);
|
|
|
|
+ return nsKDEUtils::command(command) ? NS_OK : NS_ERROR_FAILURE;
|
2014-09-22 18:35:40 +02:00
|
|
|
+ }
|
2022-05-31 23:18:50 +02:00
|
|
|
+
|
2014-09-22 18:35:40 +02:00
|
|
|
nsCOMPtr<nsIGIOService> giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID);
|
2015-05-10 22:12:38 +02:00
|
|
|
if (!giovfs) {
|
|
|
|
return NS_ERROR_FAILURE;
|