Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package MozillaFirefox.16716 for 
openSUSE:Leap:15.2:Update checked in at 2021-07-20 01:03:36
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Leap:15.2:Update/MozillaFirefox.16716 (Old)
 and      /work/SRC/openSUSE:Leap:15.2:Update/.MozillaFirefox.16716.new.2632 
(New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "MozillaFirefox.16716"

Tue Jul 20 01:03:36 2021 rev:1 rq:907153 version:78.12.0

Changes:
--------
New Changes file:

--- /dev/null   2021-07-16 00:38:45.556344817 +0200
+++ 
/work/SRC/openSUSE:Leap:15.2:Update/.MozillaFirefox.16716.new.2632/MozillaFirefox.changes
   2021-07-20 01:03:36.575126974 +0200
@@ -0,0 +1,7088 @@
+-------------------------------------------------------------------
+Tue Jul 13 13:47:45 UTC 2021 - Martin Sirringhaus <martin.sirringh...@suse.com>
+
+- Firefox Extended Support Release 78.12.0 ESR
+  * Fixed: Various stability, functionality, and security fixes
+  MFSA 2021-29 (bsc#1188275)
+  * CVE-2021-29970 (bmo#1709976)
+    Use-after-free in accessibility features of a document
+  * CVE-2021-30547 (bmo#1715766)
+    Out of bounds write in ANGLE
+  * 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
+
+-------------------------------------------------------------------
+Tue Jun  1 12:56:04 UTC 2021 - Martin Sirringhaus <martin.sirringh...@suse.com>
+
+- Firefox Extended Support Release 78.11.0 ESR
+  * Fixed: Various stability, functionality, and security fixes
+- Mozilla Firefox ESR 78.11
+  MFSA 2021-24 (bsc#1186696)
+  * CVE-2021-29964 (bmo#1706501)
+    Out of bounds-read when parsing a `WM_COPYDATA` message
+  * CVE-2021-29967 (bmo#1602862, bmo#1703191, bmo#1703760,
+    bmo#1704722, bmo#1706041)
+    Memory safety bugs fixed in Firefox 89 and Firefox ESR 78.11
+- Added the new Mozilla's GPG key, expiring on 2023-05-17 to the 
+  mozilla.keyring file
+
+-------------------------------------------------------------------
+Wed May  5 07:27:47 UTC 2021 - Martin Sirringhaus <martin.sirringh...@suse.com>
+
+- Firefox Extended Support Release 78.10.1 ESR
+  * Fixed: Resolved an issue caused by a recent Widevine plugin
+    update which prevented some purchased video content from
+    playing correctly (bmo#1705138)
+  * Fixed: Security fix
+  MFSA 2021-18 (bsc#1185633)
+  * CVE-2021-29951 (bmo#1690062)
+    Mozilla Maintenance Service could have been started or
+    stopped by domain users
+
+-------------------------------------------------------------------
+Mon Apr 19 13:16:14 UTC 2021 - Martin Sirringhaus <martin.sirringh...@suse.com>
+
+- Firefox Extended Support Release 78.10.0 ESR
+  * Fixed: Various stability, functionality, and security fixes
+- Mozilla Firefox ESR 78.10
+  MFSA 2021-15 (bsc#1184960)
+  * CVE-2021-23994 (bmo#1699077)
+    Out of bound write due to lazy initialization
+  * CVE-2021-23995 (bmo#1699835)
+    Use-after-free in Responsive Design Mode
+  * CVE-2021-23998 (bmo#1667456)
+    Secure Lock icon could have been spoofed
+  * CVE-2021-23961 (bmo#1677940)
+    More internal network hosts could have been probed by a
+    malicious webpage
+  * CVE-2021-23999 (bmo#1691153)
+    Blob URLs may have been granted additional privileges
+  * CVE-2021-24002 (bmo#1702374)
+    Arbitrary FTP command execution on FTP servers using an
+    encoded URL
+  * CVE-2021-29945 (bmo#1700690)
+    Incorrect size computation in WebAssembly JIT could lead to
+    null-reads
+  * CVE-2021-29946 (bmo#1698503)
+    Port blocking could be bypassed
+
+-------------------------------------------------------------------
+Wed Mar 24 07:07:10 UTC 2021 - Martin Sirringhaus <martin.sirringh...@suse.com>
+
+- Firefox Extended Support Release 78.9.0 ESR
+  * Fixed: Various stability, functionality, and security fixes
+  MFSA 2021-11 (bsc#1183942)
+  * CVE-2021-23981 (bmo#1692832)
+    Texture upload into an unbound backing buffer resulted in an
+    out-of-bound read
+  * CVE-2021-23982 (bmo#1677046)
+    Internal network hosts could have been probed by a malicious
+    webpage
+  * CVE-2021-23984 (bmo#1693664)
+    Malicious extensions could have spoofed popup information
+  * CVE-2021-23987 (bmo#1513519, bmo#1683439, bmo#1690169,
+    bmo#1690718)
+    Memory safety bugs fixed in Firefox 87 and Firefox ESR 78.9
+
+-------------------------------------------------------------------
+Tue Feb 23 13:34:35 UTC 2021 - Martin Sirringhaus <martin.sirringh...@suse.com>
+
+- Firefox Extended Support Release 78.8.0 ESR
+  * Fixed: Various stability, functionality, and security fixes
+  MFSA 2021-08 (bsc#1182614)
+  * CVE-2021-23969 (bmo#1542194)
+    Content Security Policy violation report could have contained
+    the destination of a redirect
+  * CVE-2021-23968 (bmo#1687342)
+    Content Security Policy violation report could have contained
+    the destination of a redirect
+  * CVE-2021-23973 (bmo#1690976)
+    MediaError message property could have leaked information
+    about cross-origin resources
+  * CVE-2021-23978 (bmo#1682928, bmo#1687391, bmo#1687597,
+    bmo#786797)
+    Memory safety bugs fixed in Firefox 86 and Firefox ESR 78.8
+- Update create-tar.sh to use https instead of http (bsc#1182357) 
+
+-------------------------------------------------------------------
+Mon Feb  8 08:01:54 UTC 2021 - Martin Sirringhaus <martin.sirringh...@suse.com>
+
+- Firefox Extended Support Release 78.7.1 ESR
+  * Fixed: Prevent access to NTFS special paths that could lead
+    to filesystem corruption. (bmo#1689598)
+  * Fixed: Security fix
+  MFSA 2021-06 (bsc#1181848)
+  * MOZ-2021-0001 (bmo#1676636)
+    Buffer overflow in depth pitch calculations for compressed
+    textures
+
+-------------------------------------------------------------------
+Tue Jan 26 14:43:01 UTC 2021 - Martin Sirringhaus <martin.sirringh...@suse.com>
+
+- Firefox Extended Support Release 78.7.0 ESR
+  * Fixed: Various stability, functionality, and security fixes
+  MFSA 2021-04 (bsc#1181414)
+  * CVE-2021-23953 (bmo#1683940)
+    Cross-origin information leakage via redirected PDF requests
+  * CVE-2021-23954 (bmo#1684020)
+    Type confusion when using logical assignment operators in
+    JavaScript switch statements
+  * CVE-2020-26976 (bmo#1674343)
+    HTTPS pages could have been intercepted by a registered
+    service worker when they should not have been
+  * CVE-2021-23960 (bmo#1675755)
+    Use-after-poison for incorrectly redeclared JavaScript
+    variables during GC
+  * CVE-2021-23964 (bmo#1662507, bmo#1666285, bmo#1673526,
+    bmo#1674278, bmo#1674835, bmo#1675097, bmo#1675844,
+    bmo#1675868, bmo#1677590, bmo#1677888, bmo#1680410,
+    bmo#1681268, bmo#1682068, bmo#1682938, bmo#1683736,
+    bmo#1685260, bmo#1685925)
+    Memory safety bugs fixed in Firefox 85 and Firefox ESR 78.7
+
+-------------------------------------------------------------------
+Thu Jan  7 06:45:39 UTC 2021 - Martin Sirringhaus <martin.sirringh...@suse.com>
+
+- Firefox Extended Support Release 78.6.1 ESR
+  * Fixed: Security fix
+  * Fixed: Fixed a crash during video playback on Apple Silicon
+    devices (bmo#1683579)
+  MFSA 2021-01 (bsc#1180623)
+  * CVE-2020-16044 (bmo#1683964)
+    Use-after-free write when handling a malicious COOKIE-ECHO
+    SCTP chunk
+
+-------------------------------------------------------------------
+Tue Dec 15 13:41:58 UTC 2020 - Martin Sirringhaus <martin.sirringh...@suse.com>
+
+- Firefox Extended Support Release 78.6.0 ESR
+  * Fixed: Various stability, functionality, and security fixes
+  MFSA 2020-55 (bsc#1180039)
+  * CVE-2020-16042 (bmo#1679003)
+    Operations on a BigInt could have caused uninitialized memory
+    to be exposed
+  * CVE-2020-26971 (bmo#1663466)
+    Heap buffer overflow in WebGL
+  * CVE-2020-26973 (bmo#1680084)
+    CSS Sanitizer performed incorrect sanitization
+  * CVE-2020-26974 (bmo#1681022)
+    Incorrect cast of StyleGenericFlexBasis resulted in a heap
+    use-after-free
+  * CVE-2020-26978 (bmo#1677047)
+    Internal network hosts could have been probed by a malicious
+    webpage
+  * CVE-2020-35111 (bmo#1657916)
+    The proxy.onRequest API did not catch view-source URLs
+  * CVE-2020-35112 (bmo#1661365)
+    Opening an extension-less download may have inadvertently
+    launched an executable instead
+  * CVE-2020-35113 (bmo#1664831, bmo#1673589)
+    Memory safety bugs fixed in Firefox 84 and Firefox ESR 78.6
+
+-------------------------------------------------------------------
+Tue Nov 17 14:10:17 UTC 2020 - Martin Sirringhaus <martin.sirringh...@suse.com>
+
+- Firefox Extended Support Release 78.5.0 ESR
+  * Fixed: Various stability, functionality, and security fixes
+  MFSA 2020-51 (bsc#1178824)
+  * CVE-2020-26951 (bmo#1667113)
+    Parsing mismatches could confuse and bypass security
+    sanitizer for chrome privileged code
+  * CVE-2020-16012 (bmo#1642028)
+    Variable time processing of cross-origin images during
+    drawImage calls
+  * CVE-2020-26953 (bmo#1656741)
+    Fullscreen could be enabled without displaying the security
+    UI
++++ 6891 more lines (skipped)
++++ between /dev/null
++++ and 
/work/SRC/openSUSE:Leap:15.2:Update/.MozillaFirefox.16716.new.2632/MozillaFirefox.changes

New:
----
  MozillaFirefox-rpmlintrc
  MozillaFirefox.changes
  MozillaFirefox.desktop
  MozillaFirefox.spec
  _constraints
  create-tar.sh
  firefox-78.12.0esr.source.tar.xz
  firefox-78.12.0esr.source.tar.xz.asc
  firefox-appdata.xml
  firefox-branded-icons.patch
  firefox-dev-random-sandbox.patch
  firefox-kde.patch
  firefox-mimeinfo.xml
  firefox.1
  firefox.js
  google-api-key
  l10n-78.12.0esr.tar.xz
  mozilla-aarch64-startup-crash.patch
  mozilla-api-key
  mozilla-bmo1005535.patch
  mozilla-bmo1463035.patch
  mozilla-bmo1504834-part1.patch
  mozilla-bmo1504834-part2.patch
  mozilla-bmo1504834-part3.patch
  mozilla-bmo1504834-part4.patch
  mozilla-bmo1512162.patch
  mozilla-bmo1554971.patch
  mozilla-bmo1568145.patch
  mozilla-bmo1602730.patch
  mozilla-bmo1626236.patch
  mozilla-bmo849632.patch
  mozilla-bmo998749.patch
  mozilla-disable-wasm-emulate-arm-unaligned-fp-access.patch
  mozilla-fix-aarch64-libopus.patch
  mozilla-fix-top-level-asm.patch
  mozilla-get-app-id
  mozilla-kde.patch
  mozilla-nongnome-proxies.patch
  mozilla-ntlm-full-path.patch
  mozilla-pipewire-0-3.patch
  mozilla-ppc-altivec_static_inline.patch
  mozilla-reduce-rust-debuginfo.patch
  mozilla-s390-context.patch
  mozilla-s390x-skia-gradient.patch
  mozilla-sandbox-fips.patch
  mozilla.keyring
  mozilla.sh.in
  spellcheck.js
  tar_stamps

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ MozillaFirefox.spec ++++++
++++ 819 lines (skipped)

++++++ MozillaFirefox-rpmlintrc ++++++
addFilter("no-jar-manifest")
++++++ MozillaFirefox.desktop ++++++
[Desktop Entry]
Encoding=UTF-8
Name=%NAME
GenericName=Web Browser
Comment=Web Browser
TryExec=%EXEC
Exec=%EXEC %u
Icon=%ICON
Terminal=false
StartupNotify=true
MimeType=text/html;text/xml;application/xhtml+xml;application/vnd.mozilla.xul+xml;text/mml;application/x-xpinstall;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/ftp;
Type=Application

Actions=PrivateBrowsing;

[Desktop Action PrivateBrowsing]
Name=New Private Browsing Window
Exec=%EXEC --private-window %u
++++++ _constraints ++++++
<?xml version="1.0" encoding="UTF-8"?>
<constraints>
  <hardware>
    <disk>
      <size unit="G">25</size>
    </disk>
    <memory>
      <size unit="G">14</size>
    </memory>
  </hardware>
  <overwrite>
    <conditions>
      <arch>armv6l</arch>
      <arch>armv7l</arch>
    </conditions>
    <hardware>
      <disk>
        <size unit="G">12</size>
      </disk>
      <memory>
        <size unit="G">5</size>
      </memory>
    </hardware>
  </overwrite>
  <overwrite>
    <conditions>
      <arch>aarch64</arch>
    </conditions>
    <hardware>
      <memory>
        <size unit="G">12</size>
      </memory>
    </hardware>
  </overwrite>
  <overwrite>
    <conditions>
      <arch>x86_64</arch>
    </conditions>
    <hardware>
      <memory>
        <size unit="G">16</size>
      </memory>
    </hardware>
  </overwrite>
  <overwrite>
    <conditions>
      <arch>ppc64le</arch>
    </conditions>
    <hardware>
      <memory>
        <size unit="G">12</size>
      </memory>
    </hardware>
  </overwrite>
</constraints>
++++++ create-tar.sh ++++++
#!/bin/bash

function print_usage_and_exit() {
  echo "Usage: create-tar.sh tar_stamps"
  echo ""
  echo "Where tar_stamps should look like this:"
  echo ""
  cat << EOF
# Node ID: 64ee63facd4ff96b3e8590cff559d7e97ac6b061
PRODUCT="firefox" # "firefox" or "thunderbird"
CHANNEL="esr60"
VERSION="60.7.0"
VERSION_SUFFIX="esr"
RELEASE_TAG="" # Needs only to be set if no tar-ball can be downloaded
PREV_VERSION="60.6.3" # Prev. version only needed for locales (leave empty to 
force l10n-generation)
PREV_VERSION_SUFFIX="esr"
#SKIP_LOCALES="" # Uncomment to skip l10n-generation
EOF

exit 1
}

if [ $# -ne 1 ]; then
  print_usage_and_exit
fi

# Sourcing the given tar_stamps-file to have the variables available
TAR_STAMP="$1"
source "$TAR_STAMP" || print_usage_and_exit

# Internal variables
BRANCH="releases/mozilla-$CHANNEL"
if [ "$PRODUCT" = "firefox" ]; then
  LOCALE_FILE="firefox-$VERSION/browser/locales/l10n-changesets.json"
else
  LOCALE_FILE="thunderbird-$VERSION/comm/mail/locales/l10n-changesets.json"
fi

SOURCE_TARBALL="$PRODUCT-$VERSION$VERSION_SUFFIX.source.tar.xz"
FTP_URL="https://ftp.mozilla.org/pub/$PRODUCT/releases/$VERSION$VERSION_SUFFIX/source";
FTP_CANDIDATES_BASE_URL="https://ftp.mozilla.org/pub/$PRODUCT/candidates";
# Make first letter of PRODCUT upper case
PRODUCT_CAP="${PRODUCT^}"
LOCALES_URL="https://product-details.mozilla.org/1.0/l10n/$PRODUCT_CAP";
PRODUCT_URL="https://product-details.mozilla.org/1.0/$PRODUCT.json";
# Exit script on CTRL+C
trap "exit" INT

function get_ftp_candidates_url() {
  VERSION_WITH_SUFFIX="$1"
  echo "$FTP_CANDIDATES_BASE_URL/$VERSION_WITH_SUFFIX-candidates"
}

function check_tarball_source () {
  TARBALL=$1
  # Print out what is going to be done:
  if [ -e $TARBALL ]; then
      echo "Reuse existing file"
  elif wget --spider $FTP_URL/$TARBALL 2> /dev/null; then
      echo "Download file"
  else
      echo "Mercurial checkout"
  fi
}

function ask_cont_abort_question() {
  while true; do
    read -p "$1 [(c)ontinue/(a)bort] " ca
    case $ca in
        [Cc]* ) return 0 ;;
        [Aa]* ) return 1 ;;
        * ) echo "Please answer c or a.";;
    esac
  done
}

function check_for_binary() {
  if ! test -x $1; then
    echo "$1 is missing: execute zypper in $2"
    exit 5
  fi
}

function get_source_stamp() {
  BUILD_ID="$1"
  FTP_CANDIDATES_BASE_URL=$(get_ftp_candidates_url $VERSION$VERSION_SUFFIX)
  
FTP_CANDIDATES_JSON_SUFFIX="${BUILD_ID}/linux-x86_64/en-US/$PRODUCT-$VERSION$VERSION_SUFFIX.json"
  BUILD_JSON=$(curl --silent --fail 
"$FTP_CANDIDATES_BASE_URL/$FTP_CANDIDATES_JSON_SUFFIX") || return 1;
  REV=$(echo "$BUILD_JSON" | jq .moz_source_stamp)
  SOURCE_REPO=$(echo "$BUILD_JSON" | jq .moz_source_repo)
  TIMESTAMP=$(echo "$BUILD_JSON" | jq .buildid)
  echo "Extending $TAR_STAMP with:"
  echo "RELEASE_REPO=${SOURCE_REPO}"
  echo "RELEASE_TAG=${REV}"
  echo "RELEASE_TIMESTAMP=${TIMESTAMP}"
  # We "remove and add" instead of "replace" in case the entries are not there 
yet
  # Removing the old RELEASE_-tags
  sed -i "/RELEASE_\(TAG\|REPO\|TIMESTAMP\)=.*/d" "$TAR_STAMP"
  # Appending the new 
  echo "RELEASE_REPO=$SOURCE_REPO" >> "$TAR_STAMP"
  echo "RELEASE_TAG=$REV" >> "$TAR_STAMP"
  echo "RELEASE_TIMESTAMP=$TIMESTAMP" >> "$TAR_STAMP"
}

function get_build_number() {
  LAST_FOUND=""
  VERSION_WITH_SUFFIX="$1"

  BUILD_ID=$(curl --silent "$PRODUCT_URL" | jq -e '.["releases"] | 
.["'$PRODUCT-$VERSION_WITH_SUFFIX'"] | .["build_number"]')

  # Slow fall-back
  if [ $? -ne 0 ]; then
      echo "Build number not found in product URL, falling back to slow 
FTP-parsing." 1>&2
      FTP_CANDIDATES_BASE_URL=$(get_ftp_candidates_url $VERSION_WITH_SUFFIX)
      # Unfortunately, locales-files are not associated to releases, but to 
builds.
      # And since we don't know which build was the final build, we grep them 
all from
      # the candidates-page, sort them and take the last one which should be 
the oldest
      # Error only if not even the first one exists
      LAST_FOUND=$(curl --silent --fail "$FTP_CANDIDATES_BASE_URL/" | grep -o 
"build[0-9]*/" | sort | uniq | tail -n 1 | cut -d "/" -f 1)
  else
      LAST_FOUND="build$BUILD_ID"
  fi

  if [ "$LAST_FOUND" != "" ]; then
    echo "$LAST_FOUND"
    return 0
  else
    echo "Error: Could not find build-number for Firefox $VERSION_WITH_SUFFIX 
!"  1>&2
    return 1
  fi
}


function locales_get() {
  TMP_VERSION="$1"
  BUILD_ID="$2"
  URL_TO_CHECK="${LOCALES_URL}-${TMP_VERSION}"
  FINAL_URL="${URL_TO_CHECK}-${BUILD_ID}.json"
  if wget --quiet --spider "$FINAL_URL"; then
    echo "$FINAL_URL"
    return 0
  else
    echo "Error: Could not find locales-file (json) for Firefox $TMP_VERSION !" 
 1>&2
    return 1
  fi
}

function locales_parse() {
  URL="$1"
  curl -s "$URL" | python -c "import json; import sys; \
             print('\n'.join(['{} {}'.format(key, value['changeset']) \
                for key, value in 
sorted(json.load(sys.stdin)['locales'].items())]));"
}

function locales_unchanged() {
  BUILD_ID="$1"
  PREV_BUILD_ID=$(get_build_number "$PREV_VERSION$PREV_VERSION_SUFFIX")
  # If no json-file for one of the versions can be found, we say "they changed"
  prev_url=$(locales_get "$PREV_VERSION$PREV_VERSION_SUFFIX" "$PREV_BUILD_ID") 
|| return 1
  curr_url=$(locales_get "$VERSION$VERSION_SUFFIX" "$BUILD_ID")           || 
return 1

  prev_content=$(locales_parse "$prev_url") || exit 1
  curr_content=$(locales_parse "$curr_url") || exit 1

  diff -y --suppress-common-lines -d <(echo "$prev_content") <(echo 
"$curr_content")
}

# check required tools
check_for_binary /usr/bin/hg "mercurial"
check_for_binary /usr/bin/jq "jq"
which python > /dev/null || exit 1

# use parallel compression, if available
compression='-J'
pixz -h > /dev/null 2>&1
if (($? != 127)); then
  compression='-Ipixz'
fi

# Get ID 
BUILD_ID=$(get_build_number "$VERSION$VERSION_SUFFIX")

if [ -z ${SKIP_LOCALES+x} ]; then
  if [ "$PREV_VERSION" != "" ] && locales_unchanged "$BUILD_ID"; then
    printf "%-40s: Did not change. Skipping.\n" "locales"
    LOCALES_CHANGED=0
  else
    printf "%-40s: Need to download.\n" "locales"
    LOCALES_CHANGED=1
  fi
else 
  printf "%-40s: User forced skip (SKIP_LOCALES set)\n" "locales"
fi

# Check what is going to be done and ask for consent
for ff in $SOURCE_TARBALL $SOURCE_TARBALL.asc; do
  printf "%-40s: %s\n" $ff "$(check_tarball_source $ff)"
done

$(ask_cont_abort_question "Is this ok?") || exit 0

# Try to download tar-ball from officiall mozilla-mirror
if [ ! -e $SOURCE_TARBALL ]; then
  wget 
https://ftp.mozilla.org/pub/$PRODUCT/releases/$VERSION$VERSION_SUFFIX/source/$SOURCE_TARBALL
fi
# including signature
if [ ! -e $SOURCE_TARBALL.asc ]; then
  wget 
https://ftp.mozilla.org/pub/$PRODUCT/releases/$VERSION$VERSION_SUFFIX/source/$SOURCE_TARBALL.asc
fi

# we might have an upstream archive already and can skip the checkout
if [ -e $SOURCE_TARBALL ]; then
  if [ -z ${SKIP_LOCALES+x} ] && [ $LOCALES_CHANGED -ne 0 ]; then
    # still need to extract the locale information from the archive
    echo "extract locale changesets"
    tar -xf $SOURCE_TARBALL $LOCALE_FILE
  fi
  get_source_stamp "$BUILD_ID"
else
  # We are working on a version that is not yet published on the mozilla mirror
  # so we have to actually check out the repo

  # mozilla
  if [ -d $PRODUCT-$VERSION ]; then
    pushd $PRODUCT-$VERSION || exit 1
    _repourl=$(hg paths)
    case "$_repourl" in
      *$BRANCH*)
        echo "updating previous tree"
        hg pull
        popd || exit 1
        ;;
      * )
        echo "removing obsolete tree"
        popd || exit 1
        rm -rf $PRODUCT-$VERSION
        ;;
    esac
  fi
  if [ ! -d $PRODUCT-$VERSION ]; then
    echo "cloning new $BRANCH..."
    hg clone https://hg.mozilla.org/$BRANCH $PRODUCT-$VERSION
    if [ "$PRODUCT" = "thunderbird" ]; then
      hg clone https://hg.mozilla.org/releases/comm-$CHANNEL 
$PRODUCT-$VERSION/comm
    fi
  fi
  pushd $PRODUCT-$VERSION || exit 1

  # parse out the Firefox-release tag for this Thunderbird-checkout
  if [ "$PRODUCT" = "thunderbird" ]; then
    FF_RELEASE_TAG=$(grep ^GECKO_HEAD_REV ./comm/.gecko_rev.yml | awk -F ' ' 
'{print $2}') || exit 1
    echo "Parsed Firefox base ID from .gecko_rev.yml: $FF_RELEASE_TAG"
  else
    FF_RELEASE_TAG="$RELEASE_TAG"
  fi

  hg update --check $FF_RELEASE_TAG
  [ "$FF_RELEASE_TAG" == "default" ] || hg update -r $FF_RELEASE_TAG
  # get repo and source stamp
  REV=$(hg -R . parent --template="{node|short}\n")
  SOURCE_REPO=$(hg showconfig paths.default 2>/dev/null | head -n1 | sed -e 
"s/^ssh:/https:/")
  TIMESTAMP=$(date +%Y%m%d%H%M%S)

  if [ "$PRODUCT" = "thunderbird" ]; then
    pushd comm || exit 1
    hg update --check $RELEASE_TAG
    popd || exit 1
    rm -rf thunderbird-${VERSION}/{,comm/}other-licenses/7zstub
  fi
  popd || exit 1

  echo "Extending $TAR_STAMP with:"
  echo "RELEASE_REPO=${SOURCE_REPO}"
  echo "RELEASE_TAG=${REV}"
  echo "RELEASE_TIMESTAMP=${TIMESTAMP}"

  # We "remove and add" instead of "replace" in case the entries are not there 
yet
  # Removing the old RELEASE_-tags
  sed -i "/RELEASE_\(TAG\|REPO\|TIMESTAMP\)=.*/d" "$TAR_STAMP"
  # Appending the new 
  echo "RELEASE_REPO=$SOURCE_REPO" >> "$TAR_STAMP"
  echo "RELEASE_TAG=$REV" >> "$TAR_STAMP"
  echo "RELEASE_TIMESTAMP=$TIMESTAMP" >> "$TAR_STAMP"

  echo "creating archive..."
  tar $compression -cf $PRODUCT-$VERSION$VERSION_SUFFIX.source.tar.xz 
--exclude=.hgtags --exclude=.hgignore --exclude=.hg --exclude=CVS 
$PRODUCT-$VERSION
fi

if [ ! -z ${SKIP_LOCALES+x} ]; then
  echo "Skipping locales-creation."
  exit 0
fi

if [ $LOCALES_CHANGED -ne 0 ]; then
  # l10n
  echo "fetching locales..."
  test ! -d l10n && mkdir l10n
  jq -r 'to_entries[]| "\(.key) \(.value|.revision)"' $LOCALE_FILE | \
    while read locale changeset ; do
      case $locale in
        ja-JP-mac|en-US)
          ;;
        *)
          echo "reading changeset information for $locale"
          echo "fetching $locale changeset $changeset ..."
          if [ -d "l10n/$locale/.hg" ]; then
            pushd "l10n/$locale" || exit 1
            hg pull
            popd || exit 1
          else
            hg clone "https://hg.mozilla.org/l10n-central/$locale"; 
"l10n/$locale"
          fi
          [ "$RELEASE_TAG" == "default" ] || hg -R "l10n/$locale" up -C -r 
"$changeset"
          ;;
      esac
    done
  echo "creating l10n archive..."
  if [ "$PRODUCT" = "thunderbird" ]; then
    TB_TAR_FLAGS="--exclude=browser --exclude=suite"
  fi
  tar $compression -cf l10n-$VERSION$VERSION_SUFFIX.tar.xz \
  --exclude=.hgtags --exclude=.hgignore --exclude=.hg \
  $TB_TAR_FLAGS \
  l10n
elif [ -f "l10n-$PREV_VERSION$PREV_VERSION_SUFFIX.tar.xz" ]; then
  # Locales did not change, but the old tar-ball is in this directory
  # Simply rename it:
  echo "Moving l10n-$PREV_VERSION$PREV_VERSION_SUFFIX.tar.xz to 
l10n-$VERSION$VERSION_SUFFIX.tar.xz"
  mv "l10n-$PREV_VERSION$PREV_VERSION_SUFFIX.tar.xz" 
"l10n-$VERSION$VERSION_SUFFIX.tar.xz"
fi
++++++ firefox-appdata.xml ++++++
<?xml version="1.0" encoding="UTF-8"?>
<!--
Upstream does not want to ship it 
https://bugzilla.mozilla.org/show_bug.cgi?id=1071061
so maintain a stub in here.
-->

<component>
  <id type="desktop">firefox.desktop</id>
  <metadata_license>CC0-1.0</metadata_license>
  <name>Firefox Web Browser</name>
  <project_license>MPL-2.0</project_license>
  <summary>Mozilla Firefox Web Browser</summary>
  <url type="homepage">http://www.mozilla.org/</url>
  <description>
    <p>Mozilla Firefox is a standalone web browser, designed for privacy, 
security, standards
compliance and performance.  Its functionality can be enhanced via a plethora 
of extensions.</p>
    <p>Firefox makes your daily web browsing fun and easy with a number of 
features, including:</p>
    <ul>
      <li>Tabbed browsing</li>
      <li>Private browsing including do-not-track enabled by default</li>
      <li>Advanced phishing and malware protection</li>
      <li>Spell checking</li>
      <li>Incremental find within pages</li>
      <li>Live bookmarking and Smart Bookmarks</li>
      <li>Download manager</li>
      <li>Location-aware browsing</li>
      <li>Compliant with modern web standards</li>
      <li>Modern web development tools</li>
      <li>Available in a wide number of locales</li>
      <li>A thriving ecosystem of themes and extensions at 
https://addons.mozilla.org</li>
    </ul>
  </description>
  <screenshots>
    <screenshot type="default">
      <image height="800" 
width="1280">https://support.cdn.mozilla.net/media/uploads/gallery/images/2015-05-20-16-04-21-88bff4.png</image>
      <caption>New tab page with speed dials</caption>
    </screenshot>
    <screenshot>
      <image height="439" 
width="620">https://support.cdn.mozilla.net/media/uploads/gallery/images/2015-12-22-15-15-05-3c0a80.png</image>
      <caption>Search suggestions from home page</caption>
    </screenshot>
    <screenshot>
      <image height="394" 
width="700">https://addons.cdn.mozilla.net/user-media/previews/full/159/159648.png</image>
      <caption>Firefox with Adwaita theme</caption>
    </screenshot>
  </screenshots>
  <update_contact>m...@lists.mozilla.org</update_contact>
</component>
++++++ firefox-branded-icons.patch ++++++
# HG changeset patch
# Parent e0751ad74e835e80041a61ea00c2a63bf6fbe2de
# Parent  91064bb25b378c1fdcc2d99a89aeaf5e821b1689

diff --git a/browser/branding/branding-common.mozbuild 
b/browser/branding/branding-common.mozbuild
--- a/browser/branding/branding-common.mozbuild
+++ b/browser/branding/branding-common.mozbuild
@@ -22,12 +22,15 @@ def FirefoxBranding():
         FINAL_TARGET_FILES.VisualElements += [
             'VisualElements_150.png',
             'VisualElements_70.png',
         ]
     elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gtk':
         FINAL_TARGET_FILES.chrome.icons.default += [
             'default128.png',
             'default16.png',
+            'default22.png',
+            'default24.png',
+            'default256.png',
             'default32.png',
             'default48.png',
             'default64.png',
         ]
diff --git a/browser/installer/package-manifest.in 
b/browser/installer/package-manifest.in
--- a/browser/installer/package-manifest.in
+++ b/browser/installer/package-manifest.in
@@ -249,20 +249,23 @@
 @RESPATH@/browser/chrome/pdfjs.manifest
 @RESPATH@/browser/chrome/pdfjs/*
 @RESPATH@/chrome/toolkit@JAREXT@
 @RESPATH@/chrome/toolkit.manifest
 @RESPATH@/chrome/recording.manifest
 @RESPATH@/chrome/recording/*
 #ifdef MOZ_GTK
 @RESPATH@/browser/chrome/icons/default/default16.png
+@RESPATH@/browser/chrome/icons/default/default22.png
+@RESPATH@/browser/chrome/icons/default/default24.png
 @RESPATH@/browser/chrome/icons/default/default32.png
 @RESPATH@/browser/chrome/icons/default/default48.png
 @RESPATH@/browser/chrome/icons/default/default64.png
 @RESPATH@/browser/chrome/icons/default/default128.png
+@RESPATH@/browser/chrome/icons/default/default256.png
 #endif
 @RESPATH@/browser/features/*
 
 ; [DevTools Startup Files]
 @RESPATH@/browser/chrome/devtools-startup@JAREXT@
 @RESPATH@/browser/chrome/devtools-startup.manifest
 
 ; DevTools
++++++ firefox-dev-random-sandbox.patch ++++++
# HG changeset patch
# User Charles G Robertson <cgrobert...@suse.com>
# Date 1598289968 21600
#      Mon Aug 24 11:26:08 2020 -0600
# Node ID 597266eaae166d5fabb2a36a6d2fda6dbf7dc861
# Parent  e23a3176498ec0e724033e000140204915e2375b
[mq]: firefox-dev-random-sandbox.patch
bsc#1174284 - Firefox tab just crashed in FIPS mode

diff --git a/security/sandbox/linux/Sandbox.cpp 
b/security/sandbox/linux/Sandbox.cpp
--- a/security/sandbox/linux/Sandbox.cpp
+++ b/security/sandbox/linux/Sandbox.cpp
@@ -647,16 +647,17 @@ void SetMediaPluginSandbox(const char* a
     SANDBOX_LOG_ERROR("failed to open plugin file %s: %s", aFilePath,
                       strerror(errno));
     MOZ_CRASH("failed while trying to open the plugin file ");
   }
 
   auto files = new SandboxOpenedFiles();
   files->Add(std::move(plugin));
   files->Add("/dev/urandom", true);
+  files->Add("/dev/random", true);
   files->Add("/etc/ld.so.cache");  // Needed for NSS in clearkey.
   files->Add("/sys/devices/system/cpu/cpu0/tsc_freq_khz");
   files->Add("/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq");
   files->Add("/proc/cpuinfo");  // Info also available via CPUID instruction.
   files->Add("/proc/sys/crypto/fips_enabled");  // Needed for NSS in clearkey.
 #ifdef __i386__
   files->Add("/proc/self/auxv");  // Info also in process's address space.
 #endif
diff --git a/security/sandbox/linux/broker/SandboxBrokerPolicyFactory.cpp 
b/security/sandbox/linux/broker/SandboxBrokerPolicyFactory.cpp
--- a/security/sandbox/linux/broker/SandboxBrokerPolicyFactory.cpp
+++ b/security/sandbox/linux/broker/SandboxBrokerPolicyFactory.cpp
@@ -289,16 +289,17 @@ SandboxBrokerPolicyFactory::SandboxBroke
   // Bug 1312678: radeonsi/Intel with DRI when using WebGL
   policy->AddDir(rdwr, "/dev/dri");
 
   // Bug 1575985: WASM library sandbox needs RW access to /dev/null
   policy->AddPath(rdwr, "/dev/null");
 
   // Read permissions
   policy->AddPath(rdonly, "/dev/urandom");
+  policy->AddPath(rdonly, "/dev/random");
   policy->AddPath(rdonly, "/proc/sys/crypto/fips_enabled");
   policy->AddPath(rdonly, "/proc/cpuinfo");
   policy->AddPath(rdonly, "/proc/meminfo");
   policy->AddDir(rdonly, "/sys/devices/cpu");
   policy->AddDir(rdonly, "/sys/devices/system/cpu");
   policy->AddDir(rdonly, "/lib");
   policy->AddDir(rdonly, "/lib64");
   policy->AddDir(rdonly, "/usr/lib");
++++++ firefox-kde.patch ++++++
# HG changeset patch
# User msirringh...@suse.de
# Date 1559300151 -7200
#      Fri May 31 12:55:51 2019 +0200
# Node ID 54d41b0033b8d649d842a1f862c6fed8b9874dec
# Parent  419d9eee7a82119821b3fa31134cb66501027ba6
How to apply this patch:
1. Import and apply it
2. cp browser/base/content/browser.xul browser/base/content/browser-kde.xul
3. Find editBookmarkPanelDoneButton
4. Replace #ifndef with #ifdef in the line above (this hanges the button order 
from Gnome-style to KDE-style)
5. hg qrefresh

diff --git a/browser/components/preferences/main.js 
b/browser/components/preferences/main.js
--- a/browser/components/preferences/main.js
+++ b/browser/components/preferences/main.js
@@ -335,16 +335,23 @@ var gMainPane = {
         }, backoffTimes[this._backoffIndex + 1 < backoffTimes.length ? 
this._backoffIndex++ : backoffTimes.length - 1]);
       };
 
       window.setTimeout(() => {
         window.requestIdleCallback(pollForDefaultBrowser);
       }, backoffTimes[this._backoffIndex]);
     }
 
+    var env = Components.classes["@mozilla.org/process/environment;1"]
+      .getService(Components.interfaces.nsIEnvironment);
+    var kde_session = 0;
+    if (env.get('KDE_FULL_SESSION') == "true") {
+      kde_session = 1;
+    }
+
     this.initBrowserContainers();
     this.buildContentProcessCountMenuList();
 
     let performanceSettingsLink = document.getElementById(
       "performanceSettingsLearnMore"
     );
     let performanceSettingsUrl =
       Services.urlFormatter.formatURLPref("app.support.baseURL") +
@@ -1300,16 +1307,27 @@ var gMainPane = {
       this._backoffIndex = 0;
 
       let shellSvc = getShellService();
       if (!shellSvc) {
         return;
       }
       try {
         shellSvc.setDefaultBrowser(true, false);
+        if (kde_session == 1) {
+          var shellObj = Components.classes["@mozilla.org/file/local;1"]
+            .createInstance(Components.interfaces.nsILocalFile);
+          shellObj.initWithPath("/usr/bin/kwriteconfig");
+          var process = Components.classes["@mozilla.org/process/util;1"]
+            .createInstance(Components.interfaces.nsIProcess);
+          process.init(shellObj);
+          var args = ["--file", "kdeglobals", "--group", "General", "--key",
+              "BrowserApplication", "firefox"];
+          process.run(false, args, args.length);
+        }
       } catch (ex) {
         Cu.reportError(ex);
         return;
       }
 
       let selectedIndex = shellSvc.isDefaultBrowser(false, true) ? 1 : 0;
       document.getElementById("setDefaultPane").selectedIndex = selectedIndex;
     }
diff --git a/browser/components/shell/moz.build 
b/browser/components/shell/moz.build
--- a/browser/components/shell/moz.build
+++ b/browser/components/shell/moz.build
@@ -34,16 +34,18 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'coco
     ]
 elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gtk':
     XPIDL_SOURCES += [
         'nsIGNOMEShellService.idl',
     ]
 
     SOURCES += [
         'nsGNOMEShellService.cpp',
+        'nsKDEShellService.cpp',
+        'nsUnixShellService.cpp',
     ]
     if CONFIG['MOZ_ENABLE_DBUS']:
         SOURCES += [
             'nsGNOMEShellDBusHelper.cpp',
             'nsGNOMEShellSearchProvider.cpp',
         ]
         include('/ipc/chromium/chromium-config.mozbuild')
 
diff --git a/browser/components/shell/nsKDEShellService.cpp 
b/browser/components/shell/nsKDEShellService.cpp
new file mode 100644
--- /dev/null
+++ b/browser/components/shell/nsKDEShellService.cpp
@@ -0,0 +1,103 @@
+/* -*- 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/. */
+
+#include "mozilla/ArrayUtils.h"
+
+#include "nsCOMPtr.h"
+#include "nsKDEShellService.h"
+#include "nsShellService.h"
+#include "nsKDEUtils.h"
+#include "nsIPrefService.h"
+#include "nsIProcess.h"
+#include "nsIFile.h"
+#include "nsServiceManagerUtils.h"
+#include "nsComponentManagerUtils.h"
+#include "nsIMutableArray.h"
+#include "nsISupportsPrimitives.h"
+#include "nsArrayUtils.h"
+
+using namespace mozilla;
+
+nsresult
+nsKDEShellService::Init()
+{
+    if( !nsKDEUtils::kdeSupport())
+        return NS_ERROR_NOT_AVAILABLE;
+    return NS_OK;
+}
+
+NS_IMPL_ISUPPORTS(nsKDEShellService, nsIGNOMEShellService, nsIShellService)
+
+NS_IMETHODIMP
+nsKDEShellService::IsDefaultBrowser(bool aForAllTypes,
+                                    bool* aIsDefaultBrowser)
+{
+    *aIsDefaultBrowser = false;
+
+    nsCOMPtr<nsIMutableArray> command = do_CreateInstance( NS_ARRAY_CONTRACTID 
);
+    if (!command)
+        return NS_ERROR_FAILURE;
+
+    nsCOMPtr<nsISupportsCString> str = do_CreateInstance( 
NS_SUPPORTS_CSTRING_CONTRACTID );
+    if (!str)
+        return NS_ERROR_FAILURE;
+
+    str->SetData( NS_LITERAL_CSTRING( "ISDEFAULTBROWSER" ));
+    command->AppendElement( str );
+
+    if( nsKDEUtils::command( command ))
+        *aIsDefaultBrowser = true;
+    return NS_OK;
+}
+
+NS_IMETHODIMP
+nsKDEShellService::SetDefaultBrowser(bool aClaimAllTypes,
+                                     bool aForAllUsers)
+{
+    nsCOMPtr<nsIMutableArray> command = do_CreateInstance( NS_ARRAY_CONTRACTID 
);
+    if (!command)
+        return NS_ERROR_FAILURE;
+
+    nsCOMPtr<nsISupportsCString> cmdstr = do_CreateInstance( 
NS_SUPPORTS_CSTRING_CONTRACTID );
+    nsCOMPtr<nsISupportsCString> paramstr = do_CreateInstance( 
NS_SUPPORTS_CSTRING_CONTRACTID );
+    if (!cmdstr || !paramstr)
+        return NS_ERROR_FAILURE;
+
+    cmdstr->SetData( NS_LITERAL_CSTRING( "SETDEFAULTBROWSER" ));
+    command->AppendElement( cmdstr );
+
+    paramstr->SetData( aClaimAllTypes ? NS_LITERAL_CSTRING( "ALLTYPES" ) : 
NS_LITERAL_CSTRING( "NORMAL" ));
+    command->AppendElement( paramstr );
+
+    return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE;
+}
+
+NS_IMETHODIMP
+nsKDEShellService::GetCanSetDesktopBackground(bool* aResult)
+{
+  *aResult = true;
+  return NS_OK;
+}
+
+NS_IMETHODIMP
+nsKDEShellService::SetDesktopBackground(dom::Element* aElement,
+                                        int32_t aPosition,
+                                        const nsACString& aImageName)
+{
+    return NS_ERROR_NOT_IMPLEMENTED;
+}
+
+NS_IMETHODIMP
+nsKDEShellService::GetDesktopBackgroundColor(PRUint32 *aColor)
+{
+    return NS_ERROR_NOT_IMPLEMENTED;
+}
+
+NS_IMETHODIMP
+nsKDEShellService::SetDesktopBackgroundColor(PRUint32 aColor)
+{
+    return NS_ERROR_NOT_IMPLEMENTED;
+}
+
diff --git a/browser/components/shell/nsKDEShellService.h 
b/browser/components/shell/nsKDEShellService.h
new file mode 100644
--- /dev/null
+++ b/browser/components/shell/nsKDEShellService.h
@@ -0,0 +1,32 @@
+/* -*- 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/. */
+
+#ifndef nskdeshellservice_h____
+#define nskdeshellservice_h____
+
+#include "nsIGNOMEShellService.h"
+#include "nsToolkitShellService.h"
+#include "nsString.h"
+#include "mozilla/Attributes.h"
+
+class nsKDEShellService final : public nsIGNOMEShellService,
+                                public nsToolkitShellService
+{
+public:
+  nsKDEShellService() : mCheckedThisSession(false) { }
+
+  NS_DECL_ISUPPORTS
+  NS_DECL_NSISHELLSERVICE
+  NS_DECL_NSIGNOMESHELLSERVICE
+
+  nsresult Init();
+
+private:
+  ~nsKDEShellService() {}
+
+  bool mCheckedThisSession;
+};
+
+#endif // nskdeshellservice_h____
diff --git a/browser/components/shell/nsUnixShellService.cpp 
b/browser/components/shell/nsUnixShellService.cpp
new file mode 100644
--- /dev/null
+++ b/browser/components/shell/nsUnixShellService.cpp
@@ -0,0 +1,22 @@
+/* -*- 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/. */
+
+
+#include "nsUnixShellService.h"
+#include "nsGNOMEShellService.h"
+#include "nsKDEShellService.h"
+#include "nsKDEUtils.h"
+#include "mozilla/ModuleUtils.h"
+
+NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsGNOMEShellService, Init)
+NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsKDEShellService, Init)
+
+NS_IMETHODIMP
+nsUnixShellServiceConstructor(nsISupports *aOuter, REFNSIID aIID, void 
**aResult)
+{
+    if( nsKDEUtils::kdeSupport())
+        return nsKDEShellServiceConstructor( aOuter, aIID, aResult );
+    return nsGNOMEShellServiceConstructor( aOuter, aIID, aResult );
+}
diff --git a/browser/components/shell/nsUnixShellService.h 
b/browser/components/shell/nsUnixShellService.h
new file mode 100644
--- /dev/null
+++ b/browser/components/shell/nsUnixShellService.h
@@ -0,0 +1,15 @@
+/* -*- 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/. */
+
+
+#ifndef nsunixshellservice_h____
+#define nsunixshellservice_h____
+
+#include "nsIGNOMEShellService.h"
+
+NS_IMETHODIMP
+nsUnixShellServiceConstructor(nsISupports *aOuter, REFNSIID aIID, void 
**aResult);
+
+#endif // nsunixshellservice_h____
++++++ firefox-mimeinfo.xml ++++++
<?xml version="1.0" encoding="UTF-8"?>
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info";>
  <mime-type type="application/x-xpinstall">
    <comment xml:lang="en">Mozilla Cross-Platform Installer Module</comment>
    <glob pattern="*.xpi" />
  </mime-type>
</mime-info>
++++++ firefox.1 ++++++
.TH FIREFOX 1 "November 30, 2017" firefox "Linux User's Manual"
.SH NAME
firefox \- a Web browser for X11 derived from the Mozilla browser

.SH SYNOPSIS
.B firefox
[\fIOPTIONS\fR ...] [\fIURL\fR]

.B firefox-bin
[\fIOPTIONS\fR] [\fIURL\fR]

.SH DESCRIPTION
\fBMozilla Firefox\fR is an open-source web browser, designed for
standards compliance, performance and portability.

.SH USAGE
\fBfirefox\fR is a simple shell script that will set up the
environment for the actual executable, \fBfirefox-bin\fR.

.SH OPTIONS
A summary of the options supported by \fBfirefox\fR is included below.

.SS "X11 options"
.TP
.BI \-\-display= DISPLAY
X display to use
.TP
.B \--sync
Make X calls synchronous
.TP
.B \-\-g-fatal-warnings
Make all warnings fatal

.SS "Firefox options"
.TP
.B \-h, \-help
Show summary of options.
.TP
.B \-v, \-version
Print Firefox version.
.TP
\fB\-P\fR \fIprofile\fR
Start with \fIprofile\fR.
.TP
\fB\-\-profile\fR \fIpath\fR
Start with profile at \fIpath\fR.
.TP
\fB\-\-migration\fR
Start with migration wizard.
.TP
.B \-\-ProfileManager
Start with ProfileManager.
.TP
\fB\-\-no\-remote\fR
Do not accept or send remote commands; implies \fB--new-instance\fR.
.TP
\fB\-\-new\-instance\fR
Open new instance, not a new window in running instance.
.TP
\fB\-\-UILocale\fR \fIlocale\fR
Start with \fIlocale\fR resources as UI Locale.
.TP
\fB\-\-save\-mode\fR
Disables extensions and themes for this session.
.TP
\fB\-\-headless\fR
Run without a GUI.
.TP
\fB\-\-marionette\fR
Enable remote control server.
.TP
\fB\-\-browser\fR
Open a browser window.
.TP
\fB\-\-new-window\fR \fIurl\fR
Open \fIurl\fR in a new window.
.TP
\fB\-\-new-tab\fR \fIurl\fR
Open \fIurl\fR in a new tab.
.TP
\fB\-\-private-window\fR \fIurl\fR
Open \fIurl\fR in a new private window.
.TP
\fB\-\-preferences\fR
Open Preferences dialog.
.TP
\fB\-\-screenshot\fR [\fIpath\fR]
Save screenshot to \fIpath\fR or in working directory.
.TP
\fB\-\-window-size\fR \fIwidth\fR[,\fIheight\fR]
Width and optionally height of screenshot.
.TP
\fB\-\-search\fR \fIterm\fR
Search \fIterm\fR with your default search engine.
.TP


\fB\-\-jsconsole\fR
Open the Browser Console.
.TP
\fB\-\-jsdebugger\fR
Open the Browser Toolbox.
.TP
\fB\-\-wait-for-jsdebugger\fR
Spin event loop until JS debugger connects.  Enables debugging (some) 
application startup code paths.  Only has an effect when \fI--jsdebugger\fR is 
also supplied.
.TP
\fB\-\-devtools\fR
Open DevTools on initial load.
.TP
\fB\-\-start-debugger-server\fR [ws:][\fIport\fR|\fIpath\fR]
Start the debugger server on a TCP port or Unix domain socket path. Defaults to 
TCP port 6000. Use WebSocket protocol if ws: prefix is specified.
.TP
\fB\-\-recording\fR \fIfile\fR
Record drawing for a given URL.
.TP
\fB\-\-recording-output\fR \fIfile\fR
Specify destination file for a drawing recording.
.TP
\fB\-\-setDefaultBrowser\fR
Set this app as the default browser.

.SH FILES
\fI/usr/bin/firefox\fR - shell script wrapping
\fBfirefox\fR
.br
\fI/usr/lib64/firefox/firefox-bin\fR - \fBfirefox\fR
executable

.SH VERSION
57.0

.SH BUGS
To report a bug, please visit \fIhttp://bugzilla.mozilla.org/\fR

.SH AUTHORS
.TP
.B The Mozilla Organization
.I http://www.mozilla.org/about.html
.TP
.B Tobias Girstmair
.I https://gir.st/
++++++ firefox.js ++++++
pref("intl.locale.requested", "");
pref("geo.wifi.uri", 
"https://location.services.mozilla.com/v1/geolocate?key=%MOZILLA_API_KEY%";);
/* Disable DoH by default */
pref("network.trr.mode", 5);
// do not disable any scope
pref("extensions.autoDisableScopes", 0);
pref("extensions.shownSelectionUI", true);
pref("extensions.langpacks.signatures.required", false);
++++++ google-api-key ++++++
AIzaSyD1hTe85_a14kr1Ks8T3Ce75rvbR1_Dx7Q
++++++ mozilla-aarch64-startup-crash.patch ++++++
# HG changeset patch
# User msirringh...@suse.de
# Date 1558442998 -7200
#      Tue May 21 14:49:58 2019 +0200
# Node ID 386083b58d8558141901d796ec6919a4aba7ad3a
# Parent  e073359d18bfdf41aa2f860f0e62cb14e99674e7
bsc#991344 - Rpi3: Firefox crashes after a few seconds of usage
bmo#1302554 - ARM/AARCH64: Firefox crashes on NULL nsIChannel** result pointer 
in nsIOService::NewChannelFromURIWithProxyFlagsInternal()

diff --git a/netwerk/base/nsIOService.cpp b/netwerk/base/nsIOService.cpp
--- a/netwerk/base/nsIOService.cpp
+++ b/netwerk/base/nsIOService.cpp
@@ -1090,17 +1090,23 @@ nsresult nsIOService::NewChannelFromURIW
             "doesn't support nsIUploadChannel2. An extension has "
             "supplied a non-functional http protocol handler. This will "
             "break behavior and in future releases not work at all.");
       }
       gHasWarnedUploadChannel2 = true;
     }
   }
 
+#if defined(__aarch64__)
+  if (result) {
+    channel.forget(result);
+  }
+#else
   channel.forget(result);
+#endif
   return NS_OK;
 }
 
 NS_IMETHODIMP
 nsIOService::NewChannelFromURIWithProxyFlags(
     nsIURI* aURI, nsIURI* aProxyURI, uint32_t aProxyFlags,
     nsINode* aLoadingNode, nsIPrincipal* aLoadingPrincipal,
     nsIPrincipal* aTriggeringPrincipal, uint32_t aSecurityFlags,
++++++ mozilla-api-key ++++++
4605624048be48fda932495844d16fbb
++++++ mozilla-bmo1005535.patch ++++++
# HG changeset patch
# User Steve Singer <st...@ssinger.info>
# Date 1558451540 -7200
#      Tue May 21 17:12:20 2019 +0200
# Node ID 433beec63e6b5f409683af20a0c1ab137cc7bfad
# Parent  0b9b94a6526d4f1aa6e23b95c1f5f7c0bef841a7
Bug 1005535 - Get skia GPU building on big endian.

diff -r 0b9b94a6526d gfx/skia/skia/src/gpu/GrColor.h
--- a/gfx/skia/skia/src/gpu/GrColor.h   Tue May 21 17:26:58 2019 +0200
+++ b/gfx/skia/skia/src/gpu/GrColor.h   Wed Jan 08 12:14:52 2020 +0100
@@ -64,7 +64,7 @@
  *  Since premultiplied means that alpha >= color, we construct a color with
  *  each component==255 and alpha == 0 to be "illegal"
  */
-#define GrColor_ILLEGAL     (~(0xFF << GrColor_SHIFT_A))
+#define GrColor_ILLEGAL     ((uint32_t)(~(0xFF << GrColor_SHIFT_A)))
 
 /** Normalizes and coverts an uint8_t to a float. [0, 255] -> [0.0, 1.0] */
 static inline float GrNormalizeByteToFloat(uint8_t value) {
++++++ mozilla-bmo1463035.patch ++++++
# HG changeset patch
# User Mike Hommey <mh+mozi...@glandium.org>
# Date 1526871862 -32400
#      Mon May 21 12:04:22 2018 +0900
# Node ID 74a0c200d7f748a3fe46bb22a38625b074da8e26
# Parent  13745a5781a024dea46103c295a733e506a236b3
Bug 1463035 - Remove MOZ_SIGNAL_TRAMPOLINE. r?darchons

For some reason, GNU as is not happy with the assembly generated after
bug 1238661 anymore on Debian armel.

OTOH, as mentioned in bug 1238661 comment 4, we actually don't need this
workaround anymore, so let's just kill it.

diff --git a/mozglue/baseprofiler/core/platform-linux-android.cpp 
b/mozglue/baseprofiler/core/platform-linux-android.cpp
--- a/mozglue/baseprofiler/core/platform-linux-android.cpp
+++ b/mozglue/baseprofiler/core/platform-linux-android.cpp
@@ -58,17 +58,16 @@
 #ifdef __GLIBC__
 #  include <execinfo.h>  // backtrace, backtrace_symbols
 #endif                   // def __GLIBC__
 #include <strings.h>     // index
 #include <errno.h>
 #include <stdarg.h>
 
 #include "prenv.h"
-#include "mozilla/LinuxSignal.h"
 #include "mozilla/PodOperations.h"
 #include "mozilla/DebugOnly.h"
 
 #include <string.h>
 #include <list>
 
 using namespace mozilla;
 
@@ -289,17 +288,17 @@ Sampler::Sampler(PSLockRef aLock)
 
   // NOTE: We don't initialize LUL here, instead initializing it in
   // SamplerThread's constructor. This is because with the
   // profiler_suspend_and_sample_thread entry point, we want to be able to
   // sample without waiting for LUL to be initialized.
 
   // Request profiling signals.
   struct sigaction sa;
-  sa.sa_sigaction = MOZ_SIGNAL_TRAMPOLINE(SigprofHandler);
+  sa.sa_sigaction = SigprofHandler;
   sigemptyset(&sa.sa_mask);
   sa.sa_flags = SA_RESTART | SA_SIGINFO;
   if (sigaction(SIGPROF, &sa, &mOldSigprofHandler) != 0) {
     MOZ_CRASH("Error installing SIGPROF handler in the profiler");
   }
 }
 
 void Sampler::Disable(PSLockRef aLock) {
diff --git a/tools/profiler/core/platform-linux-android.cpp 
b/tools/profiler/core/platform-linux-android.cpp
--- a/tools/profiler/core/platform-linux-android.cpp
+++ b/tools/profiler/core/platform-linux-android.cpp
@@ -283,17 +283,17 @@ Sampler::Sampler(PSLockRef aLock)
 
   // NOTE: We don't initialize LUL here, instead initializing it in
   // SamplerThread's constructor. This is because with the
   // profiler_suspend_and_sample_thread entry point, we want to be able to
   // sample without waiting for LUL to be initialized.
 
   // Request profiling signals.
   struct sigaction sa;
-  sa.sa_sigaction = MOZ_SIGNAL_TRAMPOLINE(SigprofHandler);
+  sa.sa_sigaction = SigprofHandler;
   sigemptyset(&sa.sa_mask);
   sa.sa_flags = SA_RESTART | SA_SIGINFO;
   if (sigaction(SIGPROF, &sa, &mOldSigprofHandler) != 0) {
     MOZ_CRASH("Error installing SIGPROF handler in the profiler");
   }
 }
 
 void Sampler::Disable(PSLockRef aLock) {
++++++ mozilla-bmo1504834-part1.patch ++++++
# HG changeset patch
# Parent  bfc992a793417e64e09c77b8b80771bf78be064c
Taken from https://bugzilla.mozilla.org/show_bug.cgi?id=1504834

diff --git a/gfx/2d/DrawTargetSkia.cpp b/gfx/2d/DrawTargetSkia.cpp
--- a/gfx/2d/DrawTargetSkia.cpp
+++ b/gfx/2d/DrawTargetSkia.cpp
@@ -130,18 +130,17 @@ static IntRect CalculateSurfaceBounds(co
   Rect sampledBounds = inverse.TransformBounds(*aBounds);
   if (!sampledBounds.ToIntRect(&bounds)) {
     return surfaceBounds;
   }
 
   return surfaceBounds.Intersect(bounds);
 }
 
-static const int kARGBAlphaOffset =
-    SurfaceFormat::A8R8G8B8_UINT32 == SurfaceFormat::B8G8R8A8 ? 3 : 0;
+static const int kARGBAlphaOffset = 0;  // Skia is always BGRA 
SurfaceFormat::A8R8G8B8_UINT32 == SurfaceFormat::B8G8R8A8 ? 3 : 0;
 
 static bool VerifyRGBXFormat(uint8_t* aData, const IntSize& aSize,
                              const int32_t aStride, SurfaceFormat aFormat) {
   if (aFormat != SurfaceFormat::B8G8R8X8 || aSize.IsEmpty()) {
     return true;
   }
   // We should've initialized the data to be opaque already
   // On debug builds, verify that this is actually true.
diff --git a/gfx/2d/Types.h b/gfx/2d/Types.h
--- a/gfx/2d/Types.h
+++ b/gfx/2d/Types.h
@@ -85,25 +85,18 @@ enum class SurfaceFormat : int8_t {
   Depth,
 
   // This represents the unknown format.
   UNKNOWN,
 
 // The following values are endian-independent synonyms. The _UINT32 suffix
 // indicates that the name reflects the layout when viewed as a uint32_t
 // value.
-#if MOZ_LITTLE_ENDIAN()
   A8R8G8B8_UINT32 = B8G8R8A8,  // 0xAARRGGBB
   X8R8G8B8_UINT32 = B8G8R8X8,  // 0x00RRGGBB
-#elif MOZ_BIG_ENDIAN()
-  A8R8G8B8_UINT32 = A8R8G8B8,  // 0xAARRGGBB
-  X8R8G8B8_UINT32 = X8R8G8B8,  // 0x00RRGGBB
-#else
-#  error "bad endianness"
-#endif
 
   // The following values are OS and endian-independent synonyms.
   //
   // TODO(aosmond): When everything blocking bug 1581828 has been resolved, we
   // can make this use R8B8G8A8 and R8B8G8X8 for non-Windows platforms.
   OS_RGBA = A8R8G8B8_UINT32,
   OS_RGBX = X8R8G8B8_UINT32
 };
diff --git a/gfx/skia/skia/third_party/skcms/skcms.cc 
b/gfx/skia/skia/third_party/skcms/skcms.cc
--- a/gfx/skia/skia/third_party/skcms/skcms.cc
+++ b/gfx/skia/skia/third_party/skcms/skcms.cc
@@ -25,16 +25,18 @@
         // it'd be a lot slower.  But we want all those headers included so we
         // can use their features after runtime checks later.
         #include <smmintrin.h>
         #include <avxintrin.h>
         #include <avx2intrin.h>
         #include <avx512fintrin.h>
         #include <avx512dqintrin.h>
     #endif
+#else
+    #define SKCMS_PORTABLE
 #endif
 
 // sizeof(x) will return size_t, which is 32-bit on some machines and 64-bit 
on others.
 // We have better testing on 64-bit machines, so force 32-bit machines to 
behave like 64-bit.
 //
 // Please do not use sizeof() directly, and size_t only when required.
 // (We have no way of enforcing these requests...)
 #define SAFE_SIZEOF(x) ((uint64_t)sizeof(x))
@@ -275,30 +277,38 @@ enum {
     skcms_Signature_sf32 = 0x73663332,
     // XYZ is also a PCS signature, so it's defined in skcms.h
     // skcms_Signature_XYZ = 0x58595A20,
 };
 
 static uint16_t read_big_u16(const uint8_t* ptr) {
     uint16_t be;
     memcpy(&be, ptr, sizeof(be));
-#if defined(_MSC_VER)
+#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
+    return be;
+#else
+    #if defined(_MSC_VER)
     return _byteswap_ushort(be);
-#else
+    #else
     return __builtin_bswap16(be);
+    #endif
 #endif
 }
 
 static uint32_t read_big_u32(const uint8_t* ptr) {
     uint32_t be;
     memcpy(&be, ptr, sizeof(be));
-#if defined(_MSC_VER)
+#if __BYTE_ORDER == __ORDER_BIG_ENDIAN__
+    return be;
+#else
+    #if defined(_MSC_VER)
     return _byteswap_ulong(be);
-#else
+    #else
     return __builtin_bswap32(be);
+    #endif
 #endif
 }
 
 static int32_t read_big_i32(const uint8_t* ptr) {
     return (int32_t)read_big_u32(ptr);
 }
 
 static float read_big_fixed(const uint8_t* ptr) {
++++++ mozilla-bmo1504834-part2.patch ++++++
# HG changeset patch
# Parent  b6e9843f9ad4ddce1cc8a0d83e21dc272fa3c3d3
Skia does not support big endian. The places to fix are too numerous and 
upstream (skia, not Mozilla)
has no interest in maintaining big endian.
So here we try to swizzle the input for skia, so that skia always works on LE, 
and when it comes
out again, we transform back to BE.

diff --git a/gfx/2d/ConvolutionFilter.cpp b/gfx/2d/ConvolutionFilter.cpp
--- a/gfx/2d/ConvolutionFilter.cpp
+++ b/gfx/2d/ConvolutionFilter.cpp
@@ -29,32 +29,79 @@ bool ConvolutionFilter::GetFilterOffsetA
                                                  int32_t* aResultLength) {
   if (aRowIndex >= mFilter->numValues()) {
     return false;
   }
   mFilter->FilterForValue(aRowIndex, aResultOffset, aResultLength);
   return true;
 }
 
+static void ByteSwapArray(uint8_t *u8Array, int32_t size) {
+    uint32_t *array = reinterpret_cast<uint32_t*>(u8Array);
+    for (int pxl = 0; pxl < size; ++pxl) {
+        // Use an endian swap to move the bytes, i.e. BGRA -> ARGB.
+        uint32_t rgba = array[pxl];
+        array[pxl] = NativeEndian::swapToLittleEndian(rgba);
+    }
+}
+
 void ConvolutionFilter::ConvolveHorizontally(const uint8_t* aSrc, uint8_t* 
aDst,
                                              bool aHasAlpha) {
+#if MOZ_BIG_ENDIAN()
+    int outputSize = mFilter->numValues();
+
+    // Input size isn't handed in, so we have to calculate it quickly
+    int inputSize = 0;
+    for (int xx = 0; xx < outputSize; ++xx) {
+        // Get the filter that determines the current output pixel.
+        int filterOffset, filterLength;
+        mFilter->FilterForValue(xx, &filterOffset, &filterLength);
+        inputSize = std::max(inputSize, filterOffset + filterLength);
+    }
+
+    ByteSwapArray((uint8_t*)aSrc, inputSize);
+#endif
+
   SkOpts::convolve_horizontally(aSrc, *mFilter, aDst, aHasAlpha);
+
+#if MOZ_BIG_ENDIAN()
+    ByteSwapArray((uint8_t*)aSrc, inputSize);
+    ByteSwapArray(aDst, outputSize);
+#endif
 }
 
 void ConvolutionFilter::ConvolveVertically(uint8_t* const* aSrc, uint8_t* aDst,
                                            int32_t aRowIndex, int32_t aRowSize,
                                            bool aHasAlpha) {
   MOZ_ASSERT(aRowIndex < mFilter->numValues());
 
   int32_t filterOffset;
   int32_t filterLength;
   auto filterValues =
       mFilter->FilterForValue(aRowIndex, &filterOffset, &filterLength);
+
+#if MOZ_BIG_ENDIAN()
+  for (int filterY = 0; filterY < filterLength; filterY++) {
+      // Skia only knows LE, so we have to swizzle the input
+    ByteSwapArray(aSrc[filterY], aRowSize);
+  }
+#endif
+
   SkOpts::convolve_vertically(filterValues, filterLength, aSrc, aRowSize, aDst,
                               aHasAlpha);
+
+#if MOZ_BIG_ENDIAN()
+  // After skia is finished, we swizzle back to BE, in case
+  // the input is used again somewhere else
+  for (int filterY = 0; filterY < filterLength; filterY++) {
+    ByteSwapArray(aSrc[filterY], aRowSize);
+  }
+  // The destination array as well
+  ByteSwapArray(aDst, aRowSize);
+#endif
 }
 
 /* ConvolutionFilter::ComputeResizeFactor is derived from Skia's
  * SkBitmapScaler/SkResizeFilter::computeFactors. It is governed by Skia's
  * BSD-style license (see gfx/skia/LICENSE) and the following copyright:
  * Copyright (c) 2015 Google Inc.
  */
 bool ConvolutionFilter::ComputeResizeFilter(ResizeMethod aResizeMethod,
diff --git a/gfx/skia/skia/include/core/SkPreConfig.h 
b/gfx/skia/skia/include/core/SkPreConfig.h
--- a/gfx/skia/skia/include/core/SkPreConfig.h
+++ b/gfx/skia/skia/include/core/SkPreConfig.h
@@ -68,17 +68,17 @@
         #define SK_CPU_BENDIAN
     #elif defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == 
__ORDER_LITTLE_ENDIAN__)
         #define SK_CPU_LENDIAN
     #elif defined(__sparc) || defined(__sparc__) || \
       defined(_POWER) || defined(__powerpc__) || \
       defined(__ppc__) || defined(__hppa) || \
       defined(__PPC__) || defined(__PPC64__) || \
       defined(_MIPSEB) || defined(__ARMEB__) || \
-      defined(__s390__) || \
+      defined(__s390__) || defined(__s390x__) || \
       (defined(__sh__) && defined(__BIG_ENDIAN__)) || \
       (defined(__ia64) && defined(__BIG_ENDIAN__))
          #define SK_CPU_BENDIAN
     #else
         #define SK_CPU_LENDIAN
     #endif
 #endif
 
++++++ mozilla-bmo1504834-part3.patch ++++++
# HG changeset patch
# Parent  aecb4600e5da17443b224c79eee178c1d8e155e3
For FF68, AntiAliasing of XULTexts seem to be broken on big endian (s390x). 
Text and icons of the sandwich-menu to the
right of the address bar, as well as plugin-windows appears transparant, which 
usually means unreadable (white on white).

diff -r aecb4600e5da gfx/skia/skia/include/private/SkNx.h
--- a/gfx/skia/skia/include/private/SkNx.h      Tue Aug 20 09:46:55 2019 +0200
+++ b/gfx/skia/skia/include/private/SkNx.h      Mon Sep 09 10:04:06 2019 +0200
@@ -238,7 +238,18 @@
     AI SkNx operator*(const SkNx& y) const { return fVal * y.fVal; }
     AI SkNx operator/(const SkNx& y) const { return fVal / y.fVal; }
 
+    // On Big endian the commented out variant doesn't work,
+    // and honestly, I have no idea why it exists in the first place.
+    // The reason its broken is, I think, that it defaults to the 
double-variant of ToBits()
+    // which gets a 64-bit integer, and FromBits returns 32-bit,
+    // cutting off the wrong half again.
+    // Overall, I see no reason to have ToBits and FromBits at all (even for 
floats/doubles).
+    // Still we are only "fixing" this for big endian and leave little endian 
alone (never touch a running system)
+#ifdef SK_CPU_BENDIAN
+    AI SkNx operator&(const SkNx& y) const { return fVal & y.fVal; }
+#else
     AI SkNx operator&(const SkNx& y) const { return FromBits(ToBits(fVal) & 
ToBits(y.fVal)); }
+#endif
     AI SkNx operator|(const SkNx& y) const { return FromBits(ToBits(fVal) | 
ToBits(y.fVal)); }
     AI SkNx operator^(const SkNx& y) const { return FromBits(ToBits(fVal) ^ 
ToBits(y.fVal)); }
 
diff -r aecb4600e5da gfx/skia/skia/src/opts/SkBlitMask_opts.h
--- a/gfx/skia/skia/src/opts/SkBlitMask_opts.h  Tue Aug 20 09:46:55 2019 +0200
+++ b/gfx/skia/skia/src/opts/SkBlitMask_opts.h  Mon Sep 09 10:04:06 2019 +0200
@@ -203,7 +203,13 @@
             //   ~~~>
             // a = 1*aa + d(1-1*aa) = aa + d(1-aa)
             // c = 0*aa + d(1-1*aa) =      d(1-aa)
+
+            // For big endian we have to swap the alpha-mask from 0,0,0,255 to 
255,0,0,0
+#ifdef SK_CPU_BENDIAN
+            return Sk4px(Sk16b(aa) & Sk16b(255,0,0,0, 255,0,0,0, 255,0,0,0, 
255,0,0,0))
+#else
             return Sk4px(Sk16b(aa) & Sk16b(0,0,0,255, 0,0,0,255, 0,0,0,255, 
0,0,0,255))
+#endif
                  + d.approxMulDiv255(aa.inv());
         };
         while (h --> 0) {
++++++ mozilla-bmo1504834-part4.patch ++++++
# HG changeset patch
# Parent  95bcf60bb4e85bb4fbb34cffa86c71d72b5e5f9b
Problem description: Tab-titles that are too long to fit into a tab get faded 
out.
                     On big endian this is broken and instead of fading out, the
                     tab gets white and the font transparent, leading to an 
unreadable
                     tab-title
Solution: This is not a real solution, but a hack. The real solution would have 
been
          to byte-swap the correct buffer, but I could not find it.
          So the next best thing is to deactivate the fading-effect. Now all 
tab-titles
          are readable, albeit not as pretty to look at as they could be.
Side-effects: I have not yet found an unwanted side-effect.

diff --git a/gfx/2d/DrawTargetSkia.cpp b/gfx/2d/DrawTargetSkia.cpp
--- a/gfx/2d/DrawTargetSkia.cpp
+++ b/gfx/2d/DrawTargetSkia.cpp
@@ -1895,16 +1895,24 @@ void DrawTargetSkia::PushLayerWithBlend(
   }
 
   SkCanvas::SaveLayerRec saveRec(
       aBounds.IsEmpty() ? nullptr : &bounds, &paint, nullptr, clipImage.get(),
       &clipMatrix,
       SkCanvas::kPreserveLCDText_SaveLayerFlag |
           (aCopyBackground ? SkCanvas::kInitWithPrevious_SaveLayerFlag : 0));
 
+#if MOZ_BIG_ENDIAN()
+  // Pushing a layer where an aMask is defined produces wrong output.
+  // We _should_ endian swap the data, but I couldn't find a workable way to 
do so
+  // Therefore I deactivate those layers in the meantime.
+  // The result is: Tab-titles that are longer than the available space should 
be faded out.
+  //                The fading doesn't work, so we deactivate the 
fading-effect here.
+  if (!aMask)
+#endif
   mCanvas->saveLayer(saveRec);
 
   SetPermitSubpixelAA(aOpaque);
 
 #ifdef MOZ_WIDGET_COCOA
   CGContextRelease(mCG);
   mCG = nullptr;
 #endif
++++++ mozilla-bmo1512162.patch ++++++
# HG changeset patch
# Parent  6919b968084406279a7d78690c242497c3f1b59e
This fixes a broken build for gcc < 9 on ppc64le.
This patch can be removed for newer gcc-versions.

diff --git a/js/xpconnect/src/XPCWrappedNative.cpp 
b/js/xpconnect/src/XPCWrappedNative.cpp
--- a/js/xpconnect/src/XPCWrappedNative.cpp
+++ b/js/xpconnect/src/XPCWrappedNative.cpp
@@ -1070,17 +1070,21 @@ class MOZ_STACK_CLASS CallMethodHelper f
                                                uint32_t* result);
 
   MOZ_ALWAYS_INLINE bool GetInterfaceTypeFromParam(const nsXPTType& type,
                                                    nsID* result) const;
 
   MOZ_ALWAYS_INLINE bool GetOutParamSource(uint8_t paramIndex,
                                            MutableHandleValue srcp) const;
 
-  MOZ_ALWAYS_INLINE bool GatherAndConvertResults();
+#if !(__GNUC__ && __linux__ && __PPC64__ && _LITTLE_ENDIAN)
+// Work around a compiler bug on ppc64le (bug 1512162).
+  MOZ_ALWAYS_INLINE
+#endif
+  bool GatherAndConvertResults();
 
   MOZ_ALWAYS_INLINE bool QueryInterfaceFastPath();
 
   nsXPTCVariant* GetDispatchParam(uint8_t paramIndex) {
     if (paramIndex >= mJSContextIndex) {
       paramIndex += 1;
     }
     if (paramIndex >= mOptArgcIndex) {
@@ -1117,17 +1121,21 @@ class MOZ_STACK_CLASS CallMethodHelper f
 
   {
     // Success checked later.
     mIFaceInfo->GetMethodInfo(mVTableIndex, &mMethodInfo);
   }
 
   ~CallMethodHelper();
 
-  MOZ_ALWAYS_INLINE bool Call();
+#if !(__GNUC__ && __linux__ && __PPC64__ && _LITTLE_ENDIAN)
+// Work around a compiler bug on ppc64le (bug 1512162).
+  MOZ_ALWAYS_INLINE
+#endif
+  bool Call();
 
   // Trace implementation so we can put our CallMethodHelper in a Rooted<T>.
   void trace(JSTracer* aTrc);
 };
 
 // static
 bool XPCWrappedNative::CallMethod(XPCCallContext& ccx,
                                   CallMode mode /*= CALL_METHOD */) {
++++++ mozilla-bmo1554971.patch ++++++
# HG changeset patch
# Parent  a25cebecb02d5460b8ad757fe9cb4a9c8d1d7658
Eliminate startup error message:
JavaScript error: , line 0: Error: Type error for platformInfo value (Error 
processing arch: Invalid enumeration value "s390x") for runtime.getPlatformInfo.

Reported here: https://bugzilla.mozilla.org/show_bug.cgi?id=1554971

Uncertain if this is causing real problems or not. Also uncertain if the fix 
actually fixes anything.
No response from upstream yet.

diff -r a25cebecb02d -r 378b81b00e73 
toolkit/components/extensions/schemas/runtime.json
--- a/toolkit/components/extensions/schemas/runtime.json        Fri Jul 05 
12:42:44 2019 +0200
+++ b/toolkit/components/extensions/schemas/runtime.json        Fri Jul 19 
13:19:30 2019 +0200
@@ -64,7 +64,7 @@
       {
         "id": "PlatformArch",
         "type": "string",
-        "enum": ["arm", "x86-32", "x86-64"],
+        "enum": ["arm", "x86-32", "x86-64", "s390x", "aarch64", "ppc64le"],
         "allowedContexts": ["content", "devtools"],
         "description": "The machine's processor architecture."
       },
++++++ mozilla-bmo1568145.patch ++++++
Author: Bernhard M. Wiedemann <bwiedemann suse de>
Date: 2019-07-22

Allow to override build date with SOURCE_DATE_EPOCH
in order to make builds reproducible.
See https://reproducible-builds.org/ for why this is good
and https://reproducible-builds.org/specs/source-date-epoch/
for the definition of this variable.

diff --git a/python/mozbuild/mozbuild/action/langpack_manifest.py 
b/python/mozbuild/mozbuild/action/langpack_manifest.py
--- a/python/mozbuild/mozbuild/action/langpack_manifest.py
+++ b/python/mozbuild/mozbuild/action/langpack_manifest.py
@@ -11,16 +11,17 @@
 from __future__ import absolute_import, print_function, unicode_literals
 
 import argparse
 import sys
 import os
 import json
 import io
 import datetime
+import time
 import requests
 import mozversioncontrol
 import mozpack.path as mozpath
 from mozpack.chrome.manifest import (
     Manifest,
     ManifestLocale,
     parse_manifest,
 )
@@ -94,17 +95,17 @@ def get_dt_from_hg(path):
 #    ts == "20170914215617"
 ###
 def get_timestamp_for_locale(path):
     dt = None
     if os.path.isdir(os.path.join(path, '.hg')):
         dt = get_dt_from_hg(path)
 
     if dt is None:
-        dt = datetime.datetime.utcnow()
+        dt = 
datetime.datetime.utcfromtimestamp(int(os.environ.get('SOURCE_DATE_EPOCH', 
time.time())))
 
     dt = dt.replace(microsecond=0)
     return dt.strftime("%Y%m%d%H%M%S")
 
 
 ###
 # Parses multiple defines files into a single key-value pair object.
 #
++++++ mozilla-bmo1602730.patch ++++++
# HG changeset patch
# User msirringh...@suse.de
# Date 1582805890 -3600
#      Thu Feb 27 13:18:10 2020 +0100
# Node ID 457cbe5705f2a3759d3da36a05c0ed66ec61ea12
# Parent  7440f4b6bab85068ca2f84e9c48e0706d04330e8
imported patch mozilla-bmo1602730-FF73.patch

diff -r 7440f4b6bab8 gfx/layers/composite/CompositableHost.cpp
--- a/gfx/layers/composite/CompositableHost.cpp Thu Feb 27 13:17:56 2020 +0100
+++ b/gfx/layers/composite/CompositableHost.cpp Wed Jun 17 15:33:32 2020 +0200
@@ -92,9 +92,13 @@
   }
   MOZ_ASSERT(source);
 
+  // Setting an alpha-mask here breaks the URL-bar on big endian (s390x)
+  // if the typed URL is too long for the textbox (automatic scrolling needed)
+#if MOZ_LITTLE_ENDIAN()
   RefPtr<EffectMask> effect =
       new EffectMask(source, source->GetSize(), aTransform);
   aEffects.mSecondaryEffects[EffectTypes::MASK] = effect;
+#endif
   return true;
 }
 
++++++ mozilla-bmo1626236.patch ++++++
# HG changeset patch
# User msirringh...@suse.de
# Date 1582805876 -3600
#      Thu Feb 27 13:17:56 2020 +0100
# Node ID cc3d09abea31068e57f1ab918782f9f86fc6a158
# Parent  cbb93a02d4a3d183c8def6f12737b456a14a3951
imported patch decoder_workaround.patch

diff --git a/image/decoders/nsGIFDecoder2.cpp b/image/decoders/nsGIFDecoder2.cpp
--- a/image/decoders/nsGIFDecoder2.cpp
+++ b/image/decoders/nsGIFDecoder2.cpp
@@ -416,16 +416,19 @@ void nsGIFDecoder2::ConvertColormap(uint
       qcms_transform_data(transform, aColormap, aColormap, aColors);
     }
   }
 
   // Expand color table from RGB to BGRA.
   MOZ_ASSERT(mSwizzleFn);
   uint8_t* data = reinterpret_cast<uint8_t*>(aColormap);
   mSwizzleFn(data, data, aColors);
+#if MOZ_BIG_ENDIAN()
+  SwizzleRow(SurfaceFormat::A8R8G8B8, SurfaceFormat::B8G8R8A8)(data, data, 
aColors);
+#endif
 }
 
 LexerResult nsGIFDecoder2::DoDecode(SourceBufferIterator& aIterator,
                                     IResumable* aOnResume) {
   MOZ_ASSERT(!HasError(), "Shouldn't call DoDecode after error!");
 
   return mLexer.Lex(
       aIterator, aOnResume,
diff --git a/image/decoders/nsJPEGDecoder.cpp b/image/decoders/nsJPEGDecoder.cpp
--- a/image/decoders/nsJPEGDecoder.cpp
+++ b/image/decoders/nsJPEGDecoder.cpp
@@ -251,30 +251,34 @@ LexerTransition<nsJPEGDecoder::State> ns
 
       // We're doing a full decode.
       switch (mInfo.jpeg_color_space) {
         case JCS_GRAYSCALE:
         case JCS_RGB:
         case JCS_YCbCr:
           // By default, we will output directly to BGRA. If we need to apply
           // special color transforms, this may change.
+#if MOZ_BIG_ENDIAN()
+          mInfo.out_color_space = MOZ_JCS_EXT_NATIVE_ENDIAN_XRGB;
+#else
           switch (SurfaceFormat::OS_RGBX) {
             case SurfaceFormat::B8G8R8X8:
               mInfo.out_color_space = JCS_EXT_BGRX;
               break;
             case SurfaceFormat::X8R8G8B8:
               mInfo.out_color_space = JCS_EXT_XRGB;
               break;
             case SurfaceFormat::R8G8B8X8:
               mInfo.out_color_space = JCS_EXT_RGBX;
               break;
             default:
               mState = JPEG_ERROR;
               return Transition::TerminateFailure();
           }
+#endif
           break;
         case JCS_CMYK:
         case JCS_YCCK:
           // libjpeg can convert from YCCK to CMYK, but not to XRGB.
           mInfo.out_color_space = JCS_CMYK;
           break;
         default:
           mState = JPEG_ERROR;
diff --git a/image/decoders/nsPNGDecoder.cpp b/image/decoders/nsPNGDecoder.cpp
--- a/image/decoders/nsPNGDecoder.cpp
+++ b/image/decoders/nsPNGDecoder.cpp
@@ -351,26 +351,34 @@ nsresult nsPNGDecoder::InitInternal() {
 
   return NS_OK;
 }
 
 LexerResult nsPNGDecoder::DoDecode(SourceBufferIterator& aIterator,
                                    IResumable* aOnResume) {
   MOZ_ASSERT(!HasError(), "Shouldn't call DoDecode after error!");
 
-  return mLexer.Lex(aIterator, aOnResume,
+  LexerResult res = mLexer.Lex(aIterator, aOnResume,
                     [=](State aState, const char* aData, size_t aLength) {
                       switch (aState) {
                         case State::PNG_DATA:
                           return ReadPNGData(aData, aLength);
                         case State::FINISHED_PNG_DATA:
                           return FinishedPNGData();
                       }
                       MOZ_CRASH("Unknown State");
                     });
+
+#if MOZ_BIG_ENDIAN()
+  if(res.is<TerminalState>() && res.as<TerminalState>() == 
TerminalState::SUCCESS) {
+      
NativeEndian::swapToLittleEndianInPlace<uint32_t>((uint32_t*)(mImageData), 
mImageDataLength / 4);
+  }
+#endif
+
+  return res;
 }
 
 LexerTransition<nsPNGDecoder::State> nsPNGDecoder::ReadPNGData(
     const char* aData, size_t aLength) {
   // If we were waiting until after returning from a yield to call
   // CreateFrame(), call it now.
   if (mNextFrameInfo) {
     if (NS_FAILED(CreateFrame(*mNextFrameInfo))) {
diff --git a/image/decoders/nsWebPDecoder.cpp b/image/decoders/nsWebPDecoder.cpp
--- a/image/decoders/nsWebPDecoder.cpp
+++ b/image/decoders/nsWebPDecoder.cpp
@@ -240,17 +240,22 @@ nsresult nsWebPDecoder::CreateFrame(cons
             ("[this=%p] nsWebPDecoder::CreateFrame -- create decoder error\n",
              this));
     return NS_ERROR_FAILURE;
   }
 
   // WebP doesn't guarantee that the alpha generated matches the hint in the
   // header, so we always need to claim the input is BGRA. If the output is
   // BGRX, swizzling will mask off the alpha channel.
+#if MOZ_BIG_ENDIAN()
+  mBuffer.colorspace = MODE_ARGB;
+  SurfaceFormat inFormat = mFormat;
+#else
   SurfaceFormat inFormat = SurfaceFormat::OS_RGBA;
+#endif
 
   SurfacePipeFlags pipeFlags = SurfacePipeFlags();
   if (mFormat == SurfaceFormat::OS_RGBA &&
       !(GetSurfaceFlags() & SurfaceFlags::NO_PREMULTIPLY_ALPHA)) {
     pipeFlags |= SurfacePipeFlags::PREMULTIPLY_ALPHA;
   }
 
   Maybe<AnimationParams> animParams;
++++++ mozilla-bmo849632.patch ++++++
# HG changeset patch
# Parent  03158f2a8298fcc53f78ad3cbfb50cbc3596d507
Problem:  webGL sites are displayed in the wrong color (usually blue-ish)
Solution: Problem is with skia once again. Output of webgl seems 
endian-correct, but skia only
          knows how to deal with little endian.
          So we swizzle the output of webgl after reading it from readpixels()
Note:     This does not fix all webGL sites, but is a step in the right 
direction

diff --git a/gfx/gl/GLContext.h b/gfx/gl/GLContext.h
--- a/gfx/gl/GLContext.h
+++ b/gfx/gl/GLContext.h
@@ -1551,16 +1551,23 @@ class GLContext : public GenericAtomicRe
     AFTER_GL_CALL;
   }
 
   void raw_fReadPixels(GLint x, GLint y, GLsizei width, GLsizei height,
                        GLenum format, GLenum type, GLvoid* pixels) {
     BEFORE_GL_CALL;
     mSymbols.fReadPixels(x, y, width, height, format, type, pixels);
     OnSyncCall();
+#if MOZ_BIG_ENDIAN()
+    uint8_t* itr = (uint8_t*)pixels;
+    for (GLsizei i = 0; i < width * height; i++) {
+      NativeEndian::swapToLittleEndianInPlace((uint32_t*)itr, 1);
+      itr += 4;
+    }
+#endif
     AFTER_GL_CALL;
     mHeavyGLCallsSinceLastFlush = true;
   }
 
   void fReadPixels(GLint x, GLint y, GLsizei width, GLsizei height,
                    GLenum format, GLenum type, GLvoid* pixels);
 
  public:
++++++ mozilla-bmo998749.patch ++++++
# HG changeset patch
# User msirringh...@suse.de
# Date 1583738770 -3600
#      Mon Mar 09 08:26:10 2020 +0100
# Node ID 34676feac1a542e409e22acf5b98735f8313b1ce
# Parent  506857dace0a08d1c9685e3ac264646590b3e27f
[mq]: mozilla-bmo998749.patch

diff -r 506857dace0a -r 34676feac1a5 gfx/2d/FilterProcessing.h
--- a/gfx/2d/FilterProcessing.h Fri Feb 28 12:31:51 2020 +0100
+++ b/gfx/2d/FilterProcessing.h Mon Mar 09 08:26:10 2020 +0100
@@ -13,10 +13,17 @@
 namespace mozilla {
 namespace gfx {
 
+#if MOZ_BIG_ENDIAN()
+const ptrdiff_t B8G8R8A8_COMPONENT_BYTEOFFSET_B = 3;
+const ptrdiff_t B8G8R8A8_COMPONENT_BYTEOFFSET_G = 2;
+const ptrdiff_t B8G8R8A8_COMPONENT_BYTEOFFSET_R = 1;
+const ptrdiff_t B8G8R8A8_COMPONENT_BYTEOFFSET_A = 0;
+#else
 const ptrdiff_t B8G8R8A8_COMPONENT_BYTEOFFSET_B = 0;
 const ptrdiff_t B8G8R8A8_COMPONENT_BYTEOFFSET_G = 1;
 const ptrdiff_t B8G8R8A8_COMPONENT_BYTEOFFSET_R = 2;
 const ptrdiff_t B8G8R8A8_COMPONENT_BYTEOFFSET_A = 3;
+#endif
 
 class FilterProcessing {
  public:
++++++ mozilla-disable-wasm-emulate-arm-unaligned-fp-access.patch ++++++
# HG changeset patch
# Parent  743f8dc3f009a6020a34e59f42eb061b6e5ff0e1

diff --git a/js/src/wasm/WasmSignalHandlers.cpp 
b/js/src/wasm/WasmSignalHandlers.cpp
--- a/js/src/wasm/WasmSignalHandlers.cpp
+++ b/js/src/wasm/WasmSignalHandlers.cpp
@@ -240,17 +240,17 @@ using mozilla::DebugOnly;
 // Those definitions are however not present in the headers of every Linux
 // distro - Raspbian is known to be a problem, for example.  However those
 // distros are tier-3 platforms.
 //
 // If you run into compile problems on a tier-3 platform, you can disable the
 // emulation here.
 
 #if defined(__linux__) && defined(__arm__)
-#  define WASM_EMULATE_ARM_UNALIGNED_FP_ACCESS
+// #  define WASM_EMULATE_ARM_UNALIGNED_FP_ACCESS
 #endif
 
 #ifdef WASM_EMULATE_ARM_UNALIGNED_FP_ACCESS
 #  include <sys/user.h>
 #endif
 
 #if defined(ANDROID)
 // Not all versions of the Android NDK define ucontext_t or mcontext_t.
++++++ mozilla-fix-aarch64-libopus.patch ++++++
# HG changeset patch
# Parent  1317782cd47f1d1f2410712a1dd283b305393eae

diff --git a/media/libopus/silk/arm/arm_silk_map.c 
b/media/libopus/silk/arm/arm_silk_map.c
--- a/media/libopus/silk/arm/arm_silk_map.c
+++ b/media/libopus/silk/arm/arm_silk_map.c
@@ -23,17 +23,17 @@ INTERRUPTION) HOWEVER CAUSED AND ON ANY 
 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 POSSIBILITY OF SUCH DAMAGE.
 ***********************************************************************/
 #ifdef HAVE_CONFIG_H
 # include "config.h"
 #endif
 
-#include "main_FIX.h"
+#include "../fixed/main_FIX.h"
 #include "NSQ.h"
 #include "SigProc_FIX.h"
 
 #if defined(OPUS_HAVE_RTCD)
 
 # if (defined(OPUS_ARM_MAY_HAVE_NEON_INTR) && \
  !defined(OPUS_ARM_PRESUME_NEON_INTR))
 
++++++ mozilla-fix-top-level-asm.patch ++++++
>From 91bb79836ee274855393bdf6ab10e24899b1b349 Mon Sep 17 00:00:00 2001
From: Martin Liska <mli...@suse.cz>
Date: Fri, 17 May 2019 14:41:35 +0200
Subject: [PATCH] Fix top-level asm issue.

---
 security/sandbox/linux/moz.build | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/security/sandbox/linux/moz.build b/security/sandbox/linux/moz.build
index aae85843e9f6..208368dfd189 100644
--- a/security/sandbox/linux/moz.build
+++ b/security/sandbox/linux/moz.build
@@ -61,7 +61,6 @@ UNIFIED_SOURCES += [
     '../chromium/sandbox/linux/bpf_dsl/policy_compiler.cc',
     '../chromium/sandbox/linux/bpf_dsl/syscall_set.cc',
     '../chromium/sandbox/linux/seccomp-bpf/die.cc',
-    '../chromium/sandbox/linux/seccomp-bpf/syscall.cc',
     'broker/SandboxBrokerCommon.cpp',
     'Sandbox.cpp',
     'SandboxBrokerClient.cpp',
@@ -77,6 +76,7 @@ UNIFIED_SOURCES += [
 SOURCES += [
     '../chromium/base/strings/safe_sprintf.cc',
     '../chromium/base/third_party/icu/icu_utf.cc',
+    '../chromium/sandbox/linux/seccomp-bpf/syscall.cc',
     '../chromium/sandbox/linux/seccomp-bpf/trap.cc',
     '../chromium/sandbox/linux/services/syscall_wrappers.cc',
 ]
@@ -96,6 +96,9 @@ if CONFIG['CC_TYPE'] in ('clang', 'gcc'):
     SOURCES['../chromium/sandbox/linux/services/syscall_wrappers.cc'].flags += 
[
         '-Wno-empty-body',
     ]
+    SOURCES['../chromium/sandbox/linux/seccomp-bpf/syscall.cc'].flags += [
+        '-fno-lto'
+    ]
 
 # gcc lto likes to put the top level asm in syscall.cc in a different partition
 # from the function using it which breaks the build.  Work around that by
-- 
2.23.0

++++++ mozilla-get-app-id ++++++
#!/usr/bin/perl -w
use XML::Simple;

my $file = shift || die "Usage: $0 [install.rdf|somefile.xpi]\n";
my $xml;

if ($file =~ /\.xpi$/) {
        use Archive::Zip qw/:ERROR_CODES :CONSTANTS/;
        my $zip = Archive::Zip->new();
        if ( $zip->read($file) != AZ_OK ) {
                die "zip file read error\n";
        }
        my $data = $zip->contents("install.rdf");
        die "missing install.rdf in $file\n" unless $data;
        $xml = XMLin($data) || die "$!\n";
} elsif ($file =~ /install.rdf/) {
        $xml = XMLin($file) || die "$!\n";
} else {
        die "unsupported file format\n";
}

my $desc;
for my $tag (qw/RDF:Description Description/) {
        if (exists $xml->{$tag}) {
                if (ref $xml->{$tag} eq 'ARRAY') {
                        $desc = $xml->{$tag};
                } else {
                        $desc = [ $xml->{$tag} ];
                }
        }
}

my $uuid;
my $id;
for my $x (@$desc) {
        if ($x->{"em:id"} =~ /{[[:xdigit:]]+-/) {
                print STDERR "Warning: multiple uuids!\n" if defined $uuid;
                $uuid = $x->{"em:id"};
        } elsif ($x->{"em:id"} =~ /@/) {
                print STDERR "Warning: multiple ids!\n" if defined $id;
                $id = $x->{"em:id"};
        }
}

if (defined $id) {
        print "$id\n";
} elsif (defined $uuid) {
        print "$uuid\n";
} else {
        exit 1;
}
++++++ mozilla-kde.patch ++++++
++++ 1941 lines (skipped)

++++++ mozilla-nongnome-proxies.patch ++++++
# HG changeset patch
# User Wolfgang Rosenauer
# Date 1558442915 -7200
#      Tue May 21 14:48:35 2019 +0200
# Node ID 6bcf2dfebc1ea2aa34e5cc61152709fc8e409dc5
# Parent  528a48eaf83b24ca1698353167dfe9c537fe7f0b
Do not use gconf for proxy settings if not running within Gnome
Index: toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp
===================================================================
RCS file: 
/cvsroot/mozilla/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp,v
retrieving revision 1.1

diff --git a/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp 
b/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp
--- a/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp
+++ b/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp
@@ -49,21 +49,24 @@ NS_IMETHODIMP
 nsUnixSystemProxySettings::GetMainThreadOnly(bool* aMainThreadOnly) {
   // dbus prevents us from being threadsafe, but this routine should not block
   // anyhow
   *aMainThreadOnly = true;
   return NS_OK;
 }
 
 void nsUnixSystemProxySettings::Init() {
-  mGSettings = do_GetService(NS_GSETTINGSSERVICE_CONTRACTID);
-  if (mGSettings) {
-    mGSettings->GetCollectionForSchema(
-        NS_LITERAL_CSTRING("org.gnome.system.proxy"),
-        getter_AddRefs(mProxySettings));
+  const char* sessionType = PR_GetEnv("DESKTOP_SESSION");
+  if (sessionType && !strcmp(sessionType, "gnome")) {
+    mGSettings = do_GetService(NS_GSETTINGSSERVICE_CONTRACTID);
+    if (mGSettings) {
+      mGSettings->GetCollectionForSchema(
+          NS_LITERAL_CSTRING("org.gnome.system.proxy"),
+          getter_AddRefs(mProxySettings));
+    }
   }
 }
 
 nsresult nsUnixSystemProxySettings::GetPACURI(nsACString& aResult) {
   if (mProxySettings) {
     nsCString proxyMode;
     // Check if mode is auto
     nsresult rv =
++++++ mozilla-ntlm-full-path.patch ++++++
# HG changeset patch
# User Petr Cerny <pce...@novell.com>
# Parent 7308e4a7c1f769f4bbbc90870b849cadd99495a6
# Parent  6ab277cf616dc2748e9855101100a97a6cec10a6
Bug 634334 - call to the ntlm_auth helper fails

diff --git a/extensions/auth/nsAuthSambaNTLM.cpp 
b/extensions/auth/nsAuthSambaNTLM.cpp
--- a/extensions/auth/nsAuthSambaNTLM.cpp
+++ b/extensions/auth/nsAuthSambaNTLM.cpp
@@ -156,17 +156,17 @@ static uint8_t* ExtractMessage(const nsA
   *aLen = (length / 4) * 3 - numEquals;
   return reinterpret_cast<uint8_t*>(PL_Base64Decode(s, length, nullptr));
 }
 
 nsresult nsAuthSambaNTLM::SpawnNTLMAuthHelper() {
   const char* username = PR_GetEnv("USER");
   if (!username) return NS_ERROR_FAILURE;
 
-  const char* const args[] = {"ntlm_auth",
+  const char* const args[] = {"/usr/bin/ntlm_auth",
                               "--helper-protocol",
                               "ntlmssp-client-1",
                               "--use-cached-creds",
                               "--username",
                               username,
                               nullptr};
 
   bool isOK = SpawnIOChild(const_cast<char* const*>(args), &mChildPID,
++++++ mozilla-pipewire-0-3.patch ++++++
++++ 846 lines (skipped)

++++++ mozilla-ppc-altivec_static_inline.patch ++++++
# HG changeset patch
# User msirringh...@suse.de
# Date 1558452418 -7200
#      Tue May 21 17:26:58 2019 +0200
# Node ID 6cd963b6c82ea6629aaf4050851789b78f310338
# Parent  010a35335b4e45e222b9efdbda24fd1963202ecf
imported patch mozilla-ppc-altivec_static_inline.patch

diff --git a/gfx/qcms/transform-altivec.cpp b/gfx/qcms/transform-altivec.cpp
--- a/gfx/qcms/transform-altivec.cpp
+++ b/gfx/qcms/transform-altivec.cpp
@@ -25,17 +25,17 @@
 
 #include "qcmsint.h"
 
 #define FLOATSCALE (float)(PRECACHE_OUTPUT_SIZE)
 #define CLAMPMAXVAL (((float) (PRECACHE_OUTPUT_SIZE - 1)) / 
PRECACHE_OUTPUT_SIZE)
 static const ALIGN float floatScaleX4 = FLOATSCALE;
 static const ALIGN float clampMaxValueX4 = CLAMPMAXVAL;
 
-inline vector float load_aligned_float(float *dataPtr)
+static inline vector float load_aligned_float(float *dataPtr)
 {
        vector float data = vec_lde(0, dataPtr);
        vector unsigned char moveToStart = vec_lvsl(0, dataPtr);
        return vec_perm(data, data, moveToStart);
 }
 
 template <size_t kRIndex, size_t kGIndex, size_t kBIndex, size_t kAIndex = 
NO_A_INDEX>
 static void qcms_transform_data_template_lut_altivec(const qcms_transform 
*transform,
++++++ mozilla-reduce-rust-debuginfo.patch ++++++
# HG changeset patch
# User msirringh...@suse.de
# Date 1560754926 -7200
#      Mon Jun 17 09:02:06 2019 +0200
# Node ID 428161c3b9599083e1b8710eda1760f1f707ab11
# Parent  05ad9fc387e07b0429a661513aed62c543464908
#Description: reduce the rust debuginfo level on selected architectures where
# compiling with debuginfo=2 causes the OOM killer to interrupt the build on
# launchpad builders. Initially this was only on 32 bit architectures, but with
# firefox 63 it started happening frequently on arm64 and ppc64el too.

diff --git a/build/moz.configure/toolchain.configure 
b/build/moz.configure/toolchain.configure
--- a/build/moz.configure/toolchain.configure
+++ b/build/moz.configure/toolchain.configure
@@ -1868,18 +1868,18 @@ imply_option('RUSTC_OPT_LEVEL', '2', whe
 @depends('RUSTC_OPT_LEVEL', moz_optimize)
 def rustc_opt_level(opt_level_option, moz_optimize):
     if opt_level_option:
         return opt_level_option[0]
     else:
         return '1' if moz_optimize.optimize else '0'
 
 
-@depends(rustc_opt_level, debug_rust, '--enable-debug-symbols', 
'--enable-frame-pointers')
-def rust_compile_flags(opt_level, debug_rust, debug_symbols, frame_pointers):
+@depends(rustc_opt_level, debug_rust, '--enable-debug-symbols', 
'--enable-frame-pointers', host)
+def rust_compile_flags(opt_level, debug_rust, debug_symbols, frame_pointers, 
host):
     # Cargo currently supports only two interesting profiles for building:
     # development and release. Those map (roughly) to --enable-debug and
     # --disable-debug in Gecko, respectively.
     #
     # But we'd also like to support an additional axis of control for
     # optimization level. Since Cargo only supports 2 profiles, we're in
     # a bit of a bind.
     #
@@ -1892,16 +1892,18 @@ def rust_compile_flags(opt_level, debug_
 
     # opt-level=0 implies -C debug-assertions, which may not be desired
     # unless Rust debugging is enabled.
     if opt_level == '0' and not debug_rust:
         debug_assertions = False
 
     if debug_symbols:
         debug_info = '2'
+#        if host.bitness == 32 or host.cpu == 'aarch64' or host.cpu == 
'ppc64': # Just reduce debug_info for all archs
+        debug_info = '1'
 
     opts = []
 
     if opt_level is not None:
         opts.append('opt-level=%s' % opt_level)
     if debug_assertions is not None:
         opts.append('debug-assertions=%s' %
                     ('yes' if debug_assertions else 'no'))
++++++ mozilla-s390-context.patch ++++++
# HG changeset patch
# User msirringh...@suse.de
# Date 1558452408 -7200
#      Tue May 21 17:26:48 2019 +0200
# Node ID 602e92722e765a3c238d3b96b26c0c8063b5eeb4
# Parent  339450bf6566c21e54f7d48bd81b65108b21325f
[mq]: mozilla-s390-context.patch

diff --git a/js/src/wasm/WasmSignalHandlers.cpp 
b/js/src/wasm/WasmSignalHandlers.cpp
--- a/js/src/wasm/WasmSignalHandlers.cpp
+++ b/js/src/wasm/WasmSignalHandlers.cpp
@@ -150,16 +150,20 @@ using mozilla::DebugOnly;
 #    define FP_sig(p) ((p)->uc_mcontext.mc_fp)
 #    define SP_sig(p) ((p)->uc_mcontext.mc_i7)
 #  endif
 #  if defined(__linux__) && (defined(__ppc64__) || defined(__PPC64__) || \
                              defined(__ppc64le__) || defined(__PPC64LE__))
 #    define R01_sig(p) ((p)->uc_mcontext.gp_regs[1])
 #    define R32_sig(p) ((p)->uc_mcontext.gp_regs[32])
 #  endif
+#  if defined(__linux__) && defined(__s390x__)
+#    define GR_sig(p,x) ((p)->uc_mcontext.gregs[x])
+#    define PSWa_sig(p) ((p)->uc_mcontext.psw.addr)
+#  endif
 #elif defined(__NetBSD__)
 #  define EIP_sig(p) ((p)->uc_mcontext.__gregs[_REG_EIP])
 #  define EBP_sig(p) ((p)->uc_mcontext.__gregs[_REG_EBP])
 #  define ESP_sig(p) ((p)->uc_mcontext.__gregs[_REG_ESP])
 #  define RIP_sig(p) ((p)->uc_mcontext.__gregs[_REG_RIP])
 #  define RSP_sig(p) ((p)->uc_mcontext.__gregs[_REG_RSP])
 #  define RBP_sig(p) ((p)->uc_mcontext.__gregs[_REG_RBP])
 #  define R11_sig(p) ((p)->uc_mcontext.__gregs[_REG_R11])
@@ -381,18 +385,23 @@ struct macos_arm_context {
 #  define FP_sig(p) RFP_sig(p)
 #  define SP_sig(p) RSP_sig(p)
 #  define LR_sig(p) R31_sig(p)
 #elif defined(__ppc64__) || defined(__PPC64__) || defined(__ppc64le__) || \
     defined(__PPC64LE__)
 #  define PC_sig(p) R32_sig(p)
 #  define SP_sig(p) R01_sig(p)
 #  define FP_sig(p) R01_sig(p)
+#elif defined(__s390x__)
+# define PC_sig(p) PSWa_sig(p)
+# define SP_sig(p) GR_sig(p, 15)
+# define FP_sig(p) GR_sig(p, 11)
 #endif
 
+
 static void SetContextPC(CONTEXT* context, uint8_t* pc) {
 #ifdef PC_sig
   *reinterpret_cast<uint8_t**>(&PC_sig(context)) = pc;
 #else
   MOZ_CRASH();
 #endif
 }
 
++++++ mozilla-s390x-skia-gradient.patch ++++++
# HG changeset patch
# Parent  acf59ea86dd1d878b43920832093f082dcfc61c0

diff -r acf59ea86dd1 gfx/skia/skia/src/shaders/gradients/Sk4fLinearGradient.cpp
--- a/gfx/skia/skia/src/shaders/gradients/Sk4fLinearGradient.cpp        Mon Mar 
09 08:26:10 2020 +0100
+++ b/gfx/skia/skia/src/shaders/gradients/Sk4fLinearGradient.cpp        Fri Mar 
27 13:30:28 2020 +0100
@@ -7,7 +7,7 @@
 
 #include "include/core/SkPaint.h"
 #include "src/shaders/gradients/Sk4fLinearGradient.h"
-
+#include "src/core/SkEndian.h"
 #include <cmath>
 #include <utility>
 
@@ -28,6 +28,9 @@
 
     while (n >= 4) {
         DstTraits<premul>::store4x(c0, c1, c2, c3, dst, bias0, bias1);
+#ifdef SK_CPU_BENDIAN
+        SkEndianSwap32s(dst, 4);
+#endif
         dst += 4;
 
         c0 = c0 + dc4;
@@ -37,12 +40,23 @@
         n -= 4;
     }
     if (n & 2) {
-        DstTraits<premul>::store(c0, dst++, bias0);
-        DstTraits<premul>::store(c1, dst++, bias1);
+        DstTraits<premul>::store(c0, dst, bias0);
+#ifdef SK_CPU_BENDIAN
+        *dst = SkEndianSwap32(*dst);
+#endif
+        ++dst;
+        DstTraits<premul>::store(c1, dst, bias1);
+#ifdef SK_CPU_BENDIAN
+        *dst = SkEndianSwap32(*dst);
+#endif
+        ++dst;
         c0 = c0 + dc2;
     }
     if (n & 1) {
         DstTraits<premul>::store(c0, dst, bias0);
+#ifdef SK_CPU_BENDIAN
+        *dst = SkEndianSwap32(*dst);
+#endif
     }
 }
 
++++++ mozilla-sandbox-fips.patch ++++++
From: meiss...@suse.com
Subject: allow Firefox to access addtional process information
Reference: http://bugzilla.suse.com/show_bug.cgi?id=1167132

diff --git a/security/sandbox/linux/broker/SandboxBrokerPolicyFactory.cpp 
b/security/sandbox/linux/broker/SandboxBrokerPolicyFactory.cpp
--- a/security/sandbox/linux/broker/SandboxBrokerPolicyFactory.cpp
+++ b/security/sandbox/linux/broker/SandboxBrokerPolicyFactory.cpp
@@ -289,16 +289,17 @@ SandboxBrokerPolicyFactory::SandboxBroke
   // Bug 1312678: radeonsi/Intel with DRI when using WebGL
   policy->AddDir(rdwr, "/dev/dri");
 
   // Bug 1575985: WASM library sandbox needs RW access to /dev/null
   policy->AddPath(rdwr, "/dev/null");
 
   // Read permissions
   policy->AddPath(rdonly, "/dev/urandom");
+  policy->AddPath(rdonly, "/proc/sys/crypto/fips_enabled");
   policy->AddPath(rdonly, "/proc/cpuinfo");
   policy->AddPath(rdonly, "/proc/meminfo");
   policy->AddDir(rdonly, "/sys/devices/cpu");
   policy->AddDir(rdonly, "/sys/devices/system/cpu");
   policy->AddDir(rdonly, "/lib");
   policy->AddDir(rdonly, "/lib64");
   policy->AddDir(rdonly, "/usr/lib");
   policy->AddDir(rdonly, "/usr/lib32");
++++++ mozilla.keyring ++++++
This file contains the PGP keys of various developers that work on
Mozilla and its subprojects (such as Firefox and Thunderbird).

Please realize that this file itself or the public key servers may be
compromised.  You are encouraged to validate the authenticity of these keys in
an out-of-band manner.

Mozilla users: pgp < KEY

pub   rsa4096 2015-07-17 [SC]
      14F26682D0916CDD81E37B6D61B7B526D98F0353
uid           [  full  ] Mozilla Software Releases <rele...@mozilla.com>
sub   rsa4096 2015-07-17 [S] [expired: 2017-07-16]
sub   rsa4096 2017-06-22 [S] [expired: 2019-06-22]
sub   rsa4096 2019-05-30 [S] [expires: 2021-05-29]
sub   rsa4096 2021-05-17 [S] [expires: 2023-05-17]

-----BEGIN PGP PUBLIC KEY BLOCK-----

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
=81zK
-----END PGP PUBLIC KEY BLOCK-----

++++++ mozilla.sh.in ++++++
#!/bin/sh
#
# ***** BEGIN LICENSE BLOCK *****
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
#
# The contents of this file are subject to the Mozilla Public License Version
# 1.1 (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS" basis,
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
# for the specific language governing rights and limitations under the
# License.
#
# The Original Code is mozilla.org Code.
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 1998
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
#    Wolfgang Rosenauer <wolfgang.rosena...@suse.de>
#                       <w...@rosenauer.org>
#
# Alternatively, the contents of this file may be used under the terms of
# either the GNU General Public License Version 2 or later (the "GPL"), or
# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
# in which case the provisions of the GPL or the LGPL are applicable instead
# of those above. If you wish to allow use of your version of this file only
# under the terms of either the GPL or the LGPL, and not to allow others to
# use your version of this file under the terms of the MPL, indicate your
# decision by deleting the provisions above and replace them with the notice
# and other provisions required by the GPL or the LGPL. If you do not delete
# the provisions above, a recipient may use your version of this file under
# the terms of any one of the MPL, the GPL or the LGPL.
#
# ***** END LICENSE BLOCK *****

##
## Usage:
##
## $ mozilla [args]
##
## This script is meant to run a mozilla program from the mozilla
## rpm installation.
##
## The script will setup all the environment voodoo needed to make
## mozilla work.

cmdname=`basename $0`

##
## Variables
##
MOZ_DIST_BIN="%PREFIX"
MOZ_DIST_LIB="%PROGDIR"
MOZ_APPNAME="%APPNAME"
MOZ_PROGRAM="$MOZ_DIST_LIB/$MOZ_APPNAME"

MOZ_APP_LAUNCHER="$MOZ_DIST_LIB/$MOZ_APPNAME.sh"
if [ "$0" = "$MOZ_APP_LAUNCHER" ]; then
  [ -h "/usr/bin/$MOZ_APPNAME" ] && \
   _link=$(readlink -f "/usr/bin/$MOZ_APPNAME")
  if [ "$_link" = "$MOZ_APP_LAUNCHER" ]; then
    export MOZ_APP_LAUNCHER="/usr/bin/$MOZ_APPNAME"
  fi
else
  export MOZ_APP_LAUNCHER="/usr/bin/$MOZ_APPNAME"
fi

MOZILLA_FIVE_HOME="$MOZ_DIST_LIB"
export MOZILLA_FIVE_HOME
LD_LIBRARY_PATH=$MOZ_DIST_LIB${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
export LD_LIBRARY_PATH

# needed for SUN Java under Xorg >= 7.2
export LIBXCB_ALLOW_SLOPPY_LOCK=1

# disable Gnome crash dialog (doesn't make sense anyway)
export GNOME_DISABLE_CRASH_DIALOG=1

# Wayland
# Only supported on newer systems
WAYLAND_SUPPORTED=%WAYLAND_SUPPORTED

# $XDG_SESSION_TYPE should contain either x11 or wayland
if [ $WAYLAND_SUPPORTED -eq 1 ] && [ "$XDG_SESSION_TYPE" = "wayland" ]; then
  export MOZ_ENABLE_WAYLAND=1
fi

# enable xinput2 (boo#1032003)
# breaks too many things right now (boo#1053959)
#export MOZ_USE_XINPUT2=1

moz_debug=0
script_args=""
pass_arg_count=0
while [ $# -gt $pass_arg_count ]
do
  case "$1" in
    -d | --debugger)
      moz_debugger=$2;
      if [ "${moz_debugger}" != "" ]; then
        shift 2
        moz_debug=1
      else
        echo "-d requires an argument"
        exit 1
      fi
      ;;
    *)
      # Move the unrecognized argument to the end of the list.
      arg="$1"
      shift
      set -- "$@" "$arg"
      pass_arg_count=`expr $pass_arg_count + 1`
      ;;
  esac
done

if [ $moz_debug -eq 1 ]; then
  tmpfile=`mktemp /tmp/mozargs.XXXXXX` || { echo "Cannot create temporary file" 
>&2; exit 1; }
  trap " [ -f \"$tmpfile\" ] && /bin/rm -f -- \"$tmpfile\"" 0 1 2 3 13 15
  echo "set args ${1+"$@"}" > $tmpfile
  echo "run" >> $tmpfile
  echo "$moz_debugger $MOZ_PROGRAM -x $tmpfile"
  exec $moz_debugger "$MOZ_PROGRAM" -x $tmpfile
else
  exec $MOZ_PROGRAM "$@"
fi
++++++ spellcheck.js ++++++
pref("spellchecker.dictionary_path", "/usr/share/myspell");
++++++ tar_stamps ++++++
PRODUCT="firefox"
CHANNEL="esr78"
VERSION="78.12.0"
VERSION_SUFFIX="esr"
PREV_VERSION="78.11.0"
PREV_VERSION_SUFFIX="esr"
#SKIP_LOCALES="" # Uncomment to skip l10n and compare-locales-generation
RELEASE_REPO="https://hg.mozilla.org/releases/mozilla-esr78";
RELEASE_TAG="3d3d5640bfac60507d42648dc4d9c20e9e0f84a8"
RELEASE_TIMESTAMP="20210706194121"

Reply via email to