lists.torproject.org
Sign In Sign Up
Manage this list Sign In Sign Up

Keyboard Shortcuts

Thread View

  • j: Next unread message
  • k: Previous unread message
  • j a: Jump to all threads
  • j l: Jump to MailingList overview

tbb-commits

Thread Start a new thread
Download
Threads by month
  • ----- 2025 -----
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2024 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2023 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2022 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2021 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2020 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2019 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2018 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2017 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2016 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2015 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2014 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
tbb-commits@lists.torproject.org

  • 1 participants
  • 18767 discussions
[Git][tpo/applications/tor-browser][tor-browser-102.12.0esr-12.5-1] Bug 1832832 - protect encoder accesses in Java callbacks. r=media-playback-reviewers, alwu a=pascalc
by richard (@richard) 06 Jun '23

06 Jun '23
richard pushed to branch tor-browser-102.12.0esr-12.5-1 at The Tor Project / Applications / Tor Browser Commits: 7ece5b1d by John Lin at 2023-06-06T16:11:52+00:00 Bug 1832832 - protect encoder accesses in Java callbacks. r=media-playback-reviewers,alwu a=pascalc Differential Revision: https://phabricator.services.mozilla.com/D178564 - - - - - 2 changed files: - dom/media/platforms/android/AndroidDataEncoder.cpp - dom/media/platforms/android/AndroidDataEncoder.h Changes: ===================================== dom/media/platforms/android/AndroidDataEncoder.cpp ===================================== @@ -494,7 +494,10 @@ void AndroidDataEncoder<ConfigType>::CallbacksSupport::HandleInput( template <typename ConfigType> void AndroidDataEncoder<ConfigType>::CallbacksSupport::HandleOutput( java::Sample::Param aSample, java::SampleBuffer::Param aBuffer) { - mEncoder->ProcessOutput(std::move(aSample), std::move(aBuffer)); + MutexAutoLock lock(mMutex); + if (mEncoder) { + mEncoder->ProcessOutput(std::move(aSample), std::move(aBuffer)); + } } template <typename ConfigType> @@ -504,7 +507,10 @@ void AndroidDataEncoder<ConfigType>::CallbacksSupport:: template <typename ConfigType> void AndroidDataEncoder<ConfigType>::CallbacksSupport::HandleError( const MediaResult& aError) { - mEncoder->Error(aError); + MutexAutoLock lock(mMutex); + if (mEncoder) { + mEncoder->Error(aError); + } } // Force compiler to generate code. ===================================== dom/media/platforms/android/AndroidDataEncoder.h ===================================== @@ -13,6 +13,7 @@ #include "mozilla/Maybe.h" #include "mozilla/Monitor.h" +#include "mozilla/Mutex.h" namespace mozilla { @@ -36,7 +37,15 @@ class AndroidDataEncoder final : public MediaDataEncoder { class CallbacksSupport final : public JavaCallbacksSupport { public: explicit CallbacksSupport(AndroidDataEncoder* aEncoder) - : mEncoder(aEncoder) {} + : mMutex("AndroidDataEncoder::CallbacksSupport") { + MutexAutoLock lock(mMutex); + mEncoder = aEncoder; + } + + ~CallbacksSupport() { + MutexAutoLock lock(mMutex); + mEncoder = nullptr; + } void HandleInput(int64_t aTimestamp, bool aProcessed) override; void HandleOutput(java::Sample::Param aSample, @@ -46,7 +55,8 @@ class AndroidDataEncoder final : public MediaDataEncoder { void HandleError(const MediaResult& aError) override; private: - AndroidDataEncoder* mEncoder; + Mutex mMutex; + AndroidDataEncoder* mEncoder MOZ_GUARDED_BY(mMutex); }; friend class CallbacksSupport; View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/7ece5b1… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/7ece5b1… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-102.12.0esr-12.5-1] Bug 41803 - Add some developer tools for working on tor-browser.
by richard (@richard) 05 Jun '23

05 Jun '23
richard pushed to branch tor-browser-102.12.0esr-12.5-1 at The Tor Project / Applications / Tor Browser Commits: ae4c538d by Henry Wilkes at 2023-06-05T19:47:48+00:00 Bug 41803 - Add some developer tools for working on tor-browser. - - - - - 2 changed files: - + tools/torbrowser/git-rebase-fixup-preprocessor - + tools/torbrowser/tb-dev Changes: ===================================== tools/torbrowser/git-rebase-fixup-preprocessor ===================================== @@ -0,0 +1,93 @@ +#!/usr/bin/python +""" +Pre-process a git todo file before passing it on to an editor. +""" + +import sys +import os +import subprocess +import re + +EDITOR_ENV_NAME = "GIT_REBASE_FIXUP_PREPROCESSOR_USER_EDITOR" + +try: + editor = os.environ[EDITOR_ENV_NAME] +except KeyError: + print(f"Missing {EDITOR_ENV_NAME} in environment", file=sys.stderr) + exit(1) + +if len(sys.argv) < 2: + print("Missing filename argument", file=sys.stderr) + exit(1) + +filename = sys.argv[1] + + +class TodoLine: + """ + Represents a line in the git todo file. + """ + + _PICK_REGEX = re.compile(r"^pick [a-f0-9]+ (?P<fixups>(fixup! )*)(?P<title>.*)") + + def __init__(self, line): + """ + Create a new line with the given text content. + """ + self._line = line + self._make_fixup = False + + match = self._PICK_REGEX.match(line) + if match: + self._is_pick = True + self._num_fixups = len(match.group("fixups")) / len("fixup! ") + self._title = match.group("title") + else: + self._is_pick = False + self._num_fixups = False + self._title = None + + def add_to_list_try_fixup(self, existing_lines): + """ + Add the TodoLine to the given list of other TodoLine, trying to fix up + one of the existing lines. + """ + if not self._num_fixups: # Not a fixup line. + existing_lines.append(self) + return + + # Search from the end of the list upwards. + for index in reversed(range(len(existing_lines))): + other = existing_lines[index] + if ( + other._is_pick + and self._num_fixups == other._num_fixups + 1 + and other._title == self._title + ): + self._make_fixup = True + existing_lines.insert(index + 1, self) + return + + # No line found to fixup. + existing_lines.append(self) + + def get_text(self): + """ + Get the text for the line to save. + """ + line = self._line + if self._make_fixup: + line = line.replace("pick", "fixup", 1) + return line + + +todo_lines = [] +with open(filename, "r", encoding="utf8") as todo_file: + for line in todo_file: + TodoLine(line).add_to_list_try_fixup(todo_lines) + +with open(filename, "w", encoding="utf8") as todo_file: + for line in todo_lines: + todo_file.write(line.get_text()) + +exit(subprocess.run([editor, *sys.argv[1:]], check=False).returncode) ===================================== tools/torbrowser/tb-dev ===================================== @@ -0,0 +1,715 @@ +#!/usr/bin/python +# PYTHON_ARGCOMPLETE_OK +""" +Useful tools for working on tor-browser repository. +""" + +import sys +import termios +import os +import atexit +import tempfile +import subprocess +import re +import json +import urllib.request +import argparse +import argcomplete + +GIT_PATH = "/usr/bin/git" +UPSTREAM_URLS = [ + "https://gitlab.torproject.org/tpo/applications/tor-browser.git", + "git@gitlab.torproject.org:tpo/applications/tor-browser.git", +] +FIXUP_PREPROCESSOR_EDITOR = "git-rebase-fixup-preprocessor" +USER_EDITOR_ENV_NAME = "GIT_REBASE_FIXUP_PREPROCESSOR_USER_EDITOR" + + +def git_run(args, check=True, env=None): + """ + Run a git command with output sent to stdout. + """ + if env is not None: + tmp_env = dict(os.environ) + for key, value in env.items(): + tmp_env[key] = value + env = tmp_env + subprocess.run([GIT_PATH, *args], check=check, env=env) + + +def git_get(args): + """ + Run a git command with each non-empty line returned in a list. + """ + git_process = subprocess.run( + [GIT_PATH, *args], text=True, stdout=subprocess.PIPE, check=True + ) + return [line for line in git_process.stdout.split("\n") if line] + + +local_root = None + + +def get_local_root(): + """ + Get the path for the tor-browser root directory. + """ + global local_root + if local_root is None: + try: + git_root = git_get(["rev-parse", "--show-toplevel"])[0] + except subprocess.CalledProcessError: + git_root = None + if git_root is None or os.path.basename(git_root) != "tor-browser": + local_root = "" + else: + local_root = git_root + return local_root + + +upstream_name = None + + +def get_upstream_name(): + """ + Get the name of the upstream remote. + """ + global upstream_name + if upstream_name is None: + for remote in git_get(["remote"]): + fetch_url = git_get(["remote", "get-url", remote])[0] + if fetch_url in UPSTREAM_URLS: + upstream_name = remote + break + if upstream_name is None: + raise Exception("No upstream remote found.") + return upstream_name + + +class Reference: + """Represents a git reference to a commit.""" + + def __init__(self, name, commit): + self.name = name + self.commit = commit + + +def get_refs(ref_type, name_start): + """ + Get a list of references that match the given 'ref_type' ("tag" or "remote" + or "head") that starts with the given 'name_start'. + """ + if ref_type == "tag": + # Instead of returning tag hash, return the commit hash it points to. + fstring = "%(*objectname)" + ref_start = "refs/tags/" + elif ref_type == "remote": + fstring = "%(objectname)" + ref_start = "refs/remotes/" + elif ref_type == "head": + fstring = "%(objectname)" + ref_start = "refs/heads/" + else: + raise TypeError(f"Unknown type {ref_type}") + + fstring = f"{fstring},%(refname)" + pattern = f"{ref_start}{name_start}**" + + def line_to_ref(line): + [commit, ref_name] = line.split(",", 1) + return Reference(ref_name.replace(ref_start, "", 1), commit) + + return [ + line_to_ref(line) + for line in git_get(["for-each-ref", f"--format={fstring}", pattern]) + ] + + +def get_nearest_ref(ref_type, name_start, search_from): + """ + Search backwards from the 'search_from' commit to find the first commit + that matches the given 'ref_type' that starts with the given 'name_start'. + """ + ref_list = get_refs(ref_type, name_start) + + for commit in git_get(["rev-list", "-1000", search_from]): + for ref in ref_list: + if commit == ref.commit: + return ref + + raise Exception(f"No {name_start} commit found in the last 1000 commits") + + +def get_firefox_ref(search_from): + """ + Search backwards from the 'search_from' commit to find the commit that comes + from firefox. + """ + return get_nearest_ref("tag", "FIREFOX_", search_from) + + +def get_upstream_commit(search_from): + """ + Get the first common ancestor of search_from that is also in its upstream + branch. + """ + return git_get(["merge-base", search_from, f"{search_from}@{{upstream}}"])[0] + + +def get_changed_files(from_commit, staged=False): + """ + Get a list of filenames relative to the current working directory that have + been changed since 'from_commit' (non-inclusive). + """ + args = ["diff"] + if staged: + args.append("--staged") + args.append("--name-only") + args.append(from_commit) + return [ + os.path.relpath(os.path.join(get_local_root(), filename)) + for filename in git_get(args) + ] + + +def file_contains(filename, regex): + """ + Return whether the file is a utf-8 text file containing the regular + expression given by 'regex'. + """ + with open(filename, "r", encoding="utf-8") as file: + try: + for line in file: + if regex.search(line): + return True + except UnicodeDecodeError: + # Not a text file + pass + return False + + +def get_gitlab_default(): + """ + Get the name of the default branch on gitlab. + """ + query = """ + query { + project(fullPath: "tpo/applications/tor-browser") { + repository { rootRef } + } + } + """ + request_data = {"query": re.sub(r"\s+", "", query)} + gitlab_request = urllib.request.Request( + "https://gitlab.torproject.org/api/graphql", + headers={ + "Content-Type": "application/json", + "User-Agent": "", + }, + data=json.dumps(request_data).encode("ascii"), + ) + + with urllib.request.urlopen(gitlab_request, timeout=20) as response: + branch_name = json.load(response)["data"]["project"]["repository"]["rootRef"] + return f"{get_upstream_name()}/{branch_name}" + + +def within_tor_browser_root(): + """ + Whether we are with the tor browser root. + """ + root = get_local_root() + if not root: + return False + return os.path.commonpath([os.getcwd(), root]) == root + + +# * -------------------- * +# | Methods for commands | +# * -------------------- * + + +def show_firefox_commit(_args): + """ + Print the tag name and commit for the last firefox commit below the current + HEAD. + """ + ref = get_firefox_ref("HEAD") + print(ref.name) + print(ref.commit) + + +def show_upstream_commit(_args): + """ + Print the last upstream commit for the current HEAD. + """ + print(get_upstream_commit("HEAD")) + + +def show_log(args): + """ + Show the git log between the current HEAD and the last firefox commit. + """ + commit = get_firefox_ref("HEAD").commit + git_run(["log", f"{commit}..HEAD", *args.gitargs], check=False) + + +def show_files_containing(args): + """ + List all the files that that have been modified for tor browser, that also + contain a regular expression. + """ + try: + regex = re.compile(args.regex) + except re.error as err: + raise Exception(f"{args.regex} is not a valid python regex") from err + + file_list = get_changed_files(get_firefox_ref("HEAD").commit) + + for filename in file_list: + if not os.path.isfile(filename): + # deleted ofile + continue + if file_contains(filename, regex): + print(filename) + + +def show_changed_files(_args): + """ + List all the files that have been modified relative to upstream. + """ + for filename in get_changed_files(get_upstream_commit("HEAD")): + print(filename) + + +def lint_changed_files(args): + """ + Lint all the files that have been modified relative to upstream. + """ + os.chdir(get_local_root()) + file_list = [ + f + for f in get_changed_files(get_upstream_commit("HEAD")) + if os.path.isfile(f) # Not deleted + ] + command_base = ["./mach", "lint"] + lint_process = subprocess.run( + [*command_base, "--list"], text=True, stdout=subprocess.PIPE, check=True + ) + + linters = [] + for line in lint_process.stdout.split("\n"): + if not line: + continue + if line.startswith("Note that clang-tidy"): + # Note at end + continue + if line == "license": + # don't lint the license + continue + if line.startswith("android-"): + continue + # lint everything else + linters.append("-l") + linters.append(line) + + if not linters: + raise Exception("No linters found") + + if args.fix: + command_base.append("--fix") + # We add --warnings since clang only reports whitespace issues as warnings. + lint_process = subprocess.run( + [*command_base, "--warnings", *linters, *file_list], check=False + ) + + +def prompt_user(prompt, convert): + """ + Ask the user for some input until the given converter returns without + throwing a ValueError. + """ + while True: + # Flush out stdin. + termios.tcflush(sys.stdin, termios.TCIFLUSH) + print(prompt, end="") + sys.stdout.flush() + try: + return convert(sys.stdin.readline().strip()) + except ValueError: + # Continue to prompt. + pass + + +def binary_reply_default_no(value): + """Process a 'y' or 'n' reply, defaulting to 'n' if empty.""" + if value == "": + return False + if value.lower() == "y": + return True + if value.lower() == "n": + return False + raise ValueError() + + +def get_fixup_for_file(filename, firefox_commit): + """Find the commit the given file should fix up.""" + + def parse_log_line(line): + [commit, short_ref, title] = line.split(",", 2) + return {"commit": commit, "short-ref": short_ref, "title": title} + + options = [ + parse_log_line(line) + for line in git_get( + [ + "log", + "--pretty=format:%H,%h,%s", + f"{firefox_commit}..HEAD", + "--", + filename, + ] + ) + ] + if not options: + print(f"No commit found for {filename}") + return None + + def valid_index(val): + if val == "d": + return val + + is_patch = val.startswith("p") + if is_patch: + val = val[1:] + + # May raise a ValueError. + as_index = int(val) + if as_index < 0 or as_index > len(options): + raise ValueError() + + if as_index == 0: + if is_patch: + raise ValueError() + return None + + return (is_patch, options[as_index - 1]["commit"]) + + while True: + print(f"For {filename}:\n") + print(" \x1b[1m0\x1b[0m: None") + for index, opt in enumerate(options): + print( + f" \x1b[1m{index + 1}\x1b[0m: " + + f"\x1b[1;38;5;212m{opt['short-ref']}\x1b[0m " + + opt["title"] + ) + print("") + response = prompt_user( + "Choose an <index> to fixup, or '0' to skip this file, " + "or 'd' to view the pending diff, " + "or 'p<index>' to view the patch for the index: ", + valid_index, + ) + if response is None: + # Skip this file. + return None + + if response == "d": + git_run(["diff", "--", filename]) + continue + + view_patch, commit = response + if view_patch: + git_run(["log", "-p", "-1", commit, "--", filename]) + continue + + return commit + + +def auto_fixup(_args): + """ + Automatically find and fix up commits using the current unstaged changes. + """ + # Only want to search as far back as the firefox commit. + firefox_commit = get_firefox_ref("HEAD").commit + + staged_files = get_changed_files("HEAD", staged=True) + if staged_files: + raise Exception(f"Have already staged files: {staged_files}") + + fixups = {} + for filename in get_changed_files("HEAD"): + commit = get_fixup_for_file(filename, firefox_commit) + if commit is None: + continue + if commit not in fixups: + fixups[commit] = [filename] + else: + fixups[commit].append(filename) + print("") + + for commit, files in fixups.items(): + print("") + git_run(["add", *files]) + git_run(["commit", f"--fixup={commit}"]) + print("") + + if prompt_user( + "Edit fixup commit message? (y/\x1b[4mn\x1b[0m)", binary_reply_default_no + ): + git_run(["commit", "--amend"]) + + +def clean_fixups(_args): + """ + Perform an interactive rebase that automatically applies fixups, similar to + --autosquash but also works on fixups of fixups. + """ + user_editor = git_get(["var", "GIT_SEQUENCE_EDITOR"])[0] + sub_editor = os.path.join( + os.path.dirname(os.path.realpath(__file__)), FIXUP_PREPROCESSOR_EDITOR + ) + + git_run( + ["rebase", "--interactive"], + check=False, + env={"GIT_SEQUENCE_EDITOR": sub_editor, USER_EDITOR_ENV_NAME: user_editor}, + ) + + +def show_default(_args): + """ + Print the default branch name from gitlab. + """ + print(get_gitlab_default()) + + +def branch_from_default(args): + """ + Fetch the default gitlab branch from upstream and create a new local branch. + """ + default_branch = get_gitlab_default() + + git_run(["fetch"], get_upstream_name()) + git_run(["switch", "--create", args.branchname, "--track", default_branch]) + + +def rebase_on_default(_args): + """ + Fetch the default gitlab branch from upstream and rebase the current branch + on top. + """ + try: + branch_name = git_get(["branch", "--show-current"])[0] + except IndexError: + raise Exception("No current branch") + + current_upstream = get_upstream_commit("HEAD") + default_branch = get_gitlab_default() + + git_run(["fetch"], get_upstream_name()) + # We set the new upstream before the rebase in case there are conflicts. + git_run(["branch", f"--set-upstream-to={default_branch}"]) + git_run( + ["rebase", "--onto", default_branch, current_upstream, branch_name], check=False + ) + + +def show_range_diff(args): + """ + Show the range diff between two branches, from their firefox bases. + """ + firefox_commit_1 = get_firefox_ref(args.branch1).commit + firefox_commit_2 = get_firefox_ref(args.branch2).commit + git_run( + [ + "range-diff", + f"{firefox_commit_1}..{args.branch1}", + f"{firefox_commit_2}..{args.branch2}", + ], + check=False, + ) + + +def show_diff_diff(args): + """ + Show the diff between the diffs of two branches, relative to their firefox + bases. + """ + config_res = git_get(["config", "--get", "diff.tool"]) + if not config_res: + raise Exception("No diff.tool configured for git") + diff_tool = config_res[0] + + # Filter out parts of the diff we expect to be different. + index_regex = re.compile(r"index [0-9a-f]{12}\.\.[0-9a-f]{12}") + lines_regex = re.compile(r"@@ -[0-9]+,[0-9]+ \+[0-9]+,[0-9]+ @@(?P<rest>.*)") + + def save_diff(branch): + firefox_commit = get_firefox_ref(branch).commit + file_desc, file_name = tempfile.mkstemp( + text=True, prefix=f'{branch.split("/")[-1]}-' + ) + # Register deleting the file at exit. + atexit.register(os.remove, file_name) + + diff_process = subprocess.Popen( + [GIT_PATH, "diff", f"{firefox_commit}..{branch}"], + stdout=subprocess.PIPE, + text=True, + ) + + with os.fdopen(file_desc, "w") as file: + for line in diff_process.stdout: + if index_regex.match(line): + # Fake data that will match. + file.write("index ????????????..????????????\n") + continue + lines_match = lines_regex.match(line) + if lines_match: + # Fake data that will match. + file.write("@@ ?,? ?,? @@" + lines_match.group('rest')) + continue + file.write(line) + + status = diff_process.poll() + if status != 0: + raise Exception(f"git diff exited with status {status}") + + return file_name + + file_1 = save_diff(args.branch1) + file_2 = save_diff(args.branch2) + subprocess.run([diff_tool, file_1, file_2], check=False) + + +# * -------------------- * +# | Command line parsing | +# * -------------------- * + + +def branch_complete(prefix, parsed_args, **kwargs): + """ + Complete the argument with a branch name. + """ + if not within_tor_browser_root(): + return [] + try: + branches = [ref.name for ref in get_refs("head", "")] + branches.extend([ref.name for ref in get_refs("remote", "")]) + branches.append("HEAD") + except Exception: + return [] + return [br for br in branches if br.startswith(prefix)] + + +parser = argparse.ArgumentParser() +subparsers = parser.add_subparsers(required=True) + +for name, details in { + "show-upstream-commit": { + "func": show_upstream_commit, + }, + "changed-files": { + "func": show_changed_files, + }, + "lint-changed-files": { + "func": lint_changed_files, + "args": { + "--fix": { + "help": "whether to fix the files", + "action": "store_true", + }, + }, + }, + "auto-fixup": { + "func": auto_fixup, + }, + "clean-fixups": { + "func": clean_fixups, + }, + "show-default": { + "func": show_default, + }, + "branch-from-default": { + "func": branch_from_default, + "args": { + "branchname": { + "help": "the name for the new local branch", + "metavar": "<branch-name>", + }, + }, + }, + "rebase-on-default": { + "func": rebase_on_default, + }, + "show-firefox-commit": { + "func": show_firefox_commit, + }, + "log": { + "func": show_log, + "args": { + "gitargs": { + "help": "argument to pass to git log", + "metavar": "-- git-log-arg", + "nargs": "*", + }, + }, + }, + "branch-range-diff": { + "func": show_range_diff, + "args": { + "branch1": { + "help": "the first branch to compare", + "metavar": "<branch-1>", + "completer": branch_complete, + }, + "branch2": { + "help": "the second branch to compare", + "metavar": "<branch-2>", + "completer": branch_complete, + }, + }, + }, + "branch-diff-diff": { + "func": show_diff_diff, + "args": { + "branch1": { + "help": "the first branch to compare", + "metavar": "<branch-1>", + "completer": branch_complete, + }, + "branch2": { + "help": "the second branch to compare", + "metavar": "<branch-2>", + "completer": branch_complete, + }, + }, + }, + "files-containing": { + "func": show_files_containing, + "args": { + "regex": {"help": "the regex that the files must contain"}, + }, + }, +}.items(): + help_message = re.sub(r"\s+", " ", details["func"].__doc__).strip() + sub = subparsers.add_parser(name, help=help_message) + sub.set_defaults(func=details["func"]) + for arg, keywords in details.get("args", {}).items(): + completer = None + if "completer" in keywords: + completer = keywords["completer"] + del keywords["completer"] + sub_arg = sub.add_argument(arg, **keywords) + if completer is not None: + sub_arg.completer = completer + +argcomplete.autocomplete(parser) + +if not within_tor_browser_root(): + raise Exception("Must be within a tor-browser directory") +parsed_args = parser.parse_args() + +parsed_args.func(parsed_args) View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/ae4c538… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/ae4c538… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-102.12.0esr-12.5-1] fixup! Bug 31286: Implementation of bridge, proxy, and firewall settings in...
by richard (@richard) 05 Jun '23

05 Jun '23
richard pushed to branch tor-browser-102.12.0esr-12.5-1 at The Tor Project / Applications / Tor Browser Commits: e6cc145a by Pier Angelo Vendrame at 2023-06-05T19:46:15+00:00 fixup! Bug 31286: Implementation of bridge, proxy, and firewall settings in about:preferences#connection Bug 41802: Improve the regex on parseBridgeLine The previous version of the regex took for granted the bridge fingerprint was always available, but it is actually optional. So, parsing some bridge lines (e.g., Conjure) failed, and vanilla bridge was displayed instead of the actual transport. - - - - - 1 changed file: - browser/components/torpreferences/content/connectionPane.js Changes: ===================================== browser/components/torpreferences/content/connectionPane.js ===================================== @@ -1176,7 +1176,7 @@ function makeBridgeId(bridgeString) { } function parseBridgeLine(line) { - const re = /^([^\s]+\s+)?([0-9a-fA-F\.\[\]\:]+:[0-9]{1,5})\s*([0-9a-fA-F]{40})(\s+.+)?/; + const re = /^\s*(\S+\s+)?([0-9a-fA-F\.\[\]\:]+:\d{1,5})(\s+[0-9a-fA-F]{40})?(\s+.+)?/; const matches = line.match(re); if (!matches) { return null; @@ -1186,7 +1186,7 @@ function parseBridgeLine(line) { bridge.transport = matches[1].trim(); } if (matches[3] !== undefined) { - bridge.id = matches[3].toUpperCase(); + bridge.id = matches[3].trim().toUpperCase(); } if (matches[4] !== undefined) { bridge.args = matches[4].trim(); View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/e6cc145… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/e6cc145… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-102.12.0esr-12.5-1] fixup! Bug 8324: Prevent DNS proxy bypasses caused by Drag&Drop
by ma1 (@ma1) 05 Jun '23

05 Jun '23
ma1 pushed to branch tor-browser-102.12.0esr-12.5-1 at The Tor Project / Applications / Tor Browser Commits: 423f239c by cypherpunks1 at 2023-06-05T11:07:29-08:00 fixup! Bug 8324: Prevent DNS proxy bypasses caused by Drag&amp;Drop Bug 41792: Allow dragging downloads from about:downloads and the download panel - - - - - 1 changed file: - toolkit/torbutton/components/dragDropFilter.js Changes: ===================================== toolkit/torbutton/components/dragDropFilter.js ===================================== @@ -142,7 +142,8 @@ DragDropFilter.prototype = { for (const type of types) { if ( type !== INTERNAL_FALLBACK && - type !== "text/x-moz-place" // don't touch bookmarks + type !== "text/x-moz-place" && // don't touch bookmarks + type !== "application/x-moz-file" // don't touch downloads ) { aDataTransfer.mozClearDataAt(type, i); } View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/423f239… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/423f239… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-102.12.0esr-12.5-1] 2 commits: fixup! Bug 31286: Implementation of bridge, proxy, and firewall settings in...
by Pier Angelo Vendrame (@pierov) 05 Jun '23

05 Jun '23
Pier Angelo Vendrame pushed to branch tor-browser-102.12.0esr-12.5-1 at The Tor Project / Applications / Tor Browser Commits: f8d0eb2d by Pier Angelo Vendrame at 2023-06-05T18:52:53+02:00 fixup! Bug 31286: Implementation of bridge, proxy, and firewall settings in about:preferences#connection Bug 40552: Improve the description of the modal to provide a bridge manually. - - - - - fc0557ed by Pier Angelo Vendrame at 2023-06-05T18:52:54+02:00 fixup! Add TorStrings module for localization Bug 40552: New texts for the add a bridge manually modal - - - - - 5 changed files: - browser/components/torpreferences/content/provideBridgeDialog.jsm - browser/components/torpreferences/content/provideBridgeDialog.xhtml - browser/components/torpreferences/content/torPreferences.css - browser/modules/TorStrings.jsm - toolkit/torbutton/chrome/locale/en-US/settings.properties Changes: ===================================== browser/components/torpreferences/content/provideBridgeDialog.jsm ===================================== @@ -17,7 +17,7 @@ class ProvideBridgeDialog { static get selectors() { return { - header: "#torPreferences-provideBridge-header", + description: "#torPreferences-provideBridge-description", textarea: "#torPreferences-provideBridge-textarea", }; } @@ -25,11 +25,25 @@ class ProvideBridgeDialog { _populateXUL(window, aDialog) { const selectors = ProvideBridgeDialog.selectors; + const openHelp = () => { + window.top.openTrustedLinkIn( + TorStrings.settings.learnMoreBridgesURL, + "tab" + ); + }; + this._dialog = aDialog; const dialogWin = this._dialog.parentElement; - dialogWin.setAttribute("title", TorStrings.settings.provideBridgeTitle); - this._dialog.querySelector(selectors.header).textContent = - TorStrings.settings.provideBridgeHeader; + dialogWin.setAttribute("title", TorStrings.settings.provideBridgeTitleAdd); + const learnMore = window.document.createXULElement("label"); + learnMore.className = "learnMore text-link"; + learnMore.setAttribute("is", "text-link"); + learnMore.setAttribute("value", TorStrings.settings.learnMore); + learnMore.addEventListener("click", openHelp); + const descr = this._dialog.querySelector(selectors.description); + descr.textContent = ""; + const pieces = TorStrings.settings.provideBridgeDescription.split("%S"); + descr.append(pieces[0], learnMore, pieces[1] || ""); this._textarea = this._dialog.querySelector(selectors.textarea); this._textarea.setAttribute( "placeholder", @@ -42,12 +56,7 @@ class ProvideBridgeDialog { this._dialog.addEventListener("dialogaccept", e => { this.onSubmit(this._textarea.value); }); - this._dialog.addEventListener("dialoghelp", e => { - window.top.openTrustedLinkIn( - TorStrings.settings.learnMoreBridgesURL, - "tab" - ); - }); + this._dialog.addEventListener("dialoghelp", openHelp); } init(window, aDialog) { ===================================== browser/components/torpreferences/content/provideBridgeDialog.xhtml ===================================== @@ -8,7 +8,9 @@ xmlns:html="http://www.w3.org/1999/xhtml"> <dialog id="torPreferences-provideBridge-dialog" buttons="help,accept,cancel"> - <html:h3 id="torPreferences-provideBridge-header">&#8203;</html:h3> + <description> + <html:div id="torPreferences-provideBridge-description">&#8203;<br/>&#8203;</html:div> + </description> <html:textarea id="torPreferences-provideBridge-textarea" multiline="true" rows="3"/> <script type="application/javascript"><![CDATA[ "use strict"; ===================================== browser/components/torpreferences/content/torPreferences.css ===================================== @@ -586,8 +586,8 @@ groupbox#torPreferences-bridges-group textarea { } /* Provide bridge dialog */ -#torPreferences-provideBridge-header { - margin-top: 8px; +#torPreferences-provideBridge-textarea { + margin-top: 16px; } /* Connection settings dialog */ ===================================== browser/modules/TorStrings.jsm ===================================== @@ -161,8 +161,9 @@ const Loader = { captchaTextboxPlaceholder: "Enter the characters from the image", incorrectCaptcha: "The solution is not correct. Please try again.", // Provide bridge dialog - provideBridgeTitle: "Provide Bridge", - provideBridgeHeader: "Enter bridge information from a trusted source", + provideBridgeTitleAdd: "Add a Bridge Manually", + provideBridgeDescription: + "Add a bridge provided by a trusted organization or someone you know. If you don’t have a bridge, you can request one from the Tor Project. %S", provideBridgePlaceholder: "type address:port (one per line)", // Connection settings dialog connectionSettingsDialogTitle: "Connection Settings", ===================================== toolkit/torbutton/chrome/locale/en-US/settings.properties ===================================== @@ -104,8 +104,9 @@ settings.captchaTextboxPlaceholder=Enter the characters from the image settings.incorrectCaptcha=The solution is not correct. Please try again. # Provide bridge dialog -settings.provideBridgeTitle=Provide Bridge -settings.provideBridgeHeader=Enter bridge information from a trusted source +settings.provideBridgeTitleAdd=Add a Bridge Manually +# Translation note: %S is a Learn more link. +settings.provideBridgeDescription=Add a bridge provided by a trusted organization or someone you know. If you don’t have a bridge, you can request one from the Tor Project. %S settings.provideBridgePlaceholder=type address:port (one per line) # Connection settings dialog @@ -129,3 +130,7 @@ settings.allowedPortsPlaceholder=Comma-seperated values # Log dialog settings.torLogDialogTitle=Tor Logs settings.copyLog=Copy Tor Log to Clipboard + +# Legacy strings - remove once 12.0 has gone EOL +settings.provideBridgeTitle=Provide Bridge +settings.provideBridgeHeader=Enter bridge information from a trusted source View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/014f64… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/014f64… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-102.12.0esr-12.5-1] fixup! Bug 40597: Implement TorSettings module
by Pier Angelo Vendrame (@pierov) 05 Jun '23

05 Jun '23
Pier Angelo Vendrame pushed to branch tor-browser-102.12.0esr-12.5-1 at The Tor Project / Applications / Tor Browser Commits: 014f6414 by Pier Angelo Vendrame at 2023-06-01T22:03:04+02:00 fixup! Bug 40597: Implement TorSettings module Bug 41801: Fix handleProcessReady in TorSettings.init - - - - - 1 changed file: - browser/modules/TorSettings.jsm Changes: ===================================== browser/modules/TorSettings.jsm ===================================== @@ -299,7 +299,7 @@ const TorSettings = (() => { Services.obs.addObserver(this, TorTopics.ProcessIsReady); if (TorMonitorService.isRunning) { - handleProcessReady(); + this.handleProcessReady(); } } }, @@ -308,22 +308,22 @@ const TorSettings = (() => { async observe(subject, topic, data) { console.log(`TorSettings: Observed ${topic}`); - // once the tor daemon is ready, we need to apply our settings - const handleProcessReady = async () => { - // push down settings to tor - await this.applySettings(); - console.log("TorSettings: Ready"); - Services.obs.notifyObservers(null, TorSettingsTopics.Ready); - }; - switch (topic) { case TorTopics.ProcessIsReady: Services.obs.removeObserver(this, TorTopics.ProcessIsReady); - await handleProcessReady(); + await this.handleProcessReady(); break; } }, + // once the tor daemon is ready, we need to apply our settings + async handleProcessReady() { + // push down settings to tor + await this.applySettings(); + console.log("TorSettings: Ready"); + Services.obs.notifyObservers(null, TorSettingsTopics.Ready); + }, + // load our settings from prefs loadFromPrefs() { console.log("TorSettings: loadFromPrefs()"); View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/014f641… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/014f641… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser-build][main] 2 commits: Revert "Bug 40869: Temporarily set obfs4 to a fixed commit"
by boklm (@boklm) 05 Jun '23

05 Jun '23
boklm pushed to branch main at The Tor Project / Applications / tor-browser-build Commits: 94050678 by Nicolas Vigier at 2023-06-05T10:29:21+02:00 Revert &quot;Bug 40869: Temporarily set obfs4 to a fixed commit&quot; This reverts commit 40298e792e7cd498e8534d65cb1220ff4e43e325. - - - - - 723c63a0 by Nicolas Vigier at 2023-06-05T17:24:57+02:00 Bug 40869: obfs4 is renamed to lyrebird - - - - - 11 changed files: - Makefile - projects/browser/Bundle-Data/Docs-TBB/Licenses/PluggableTransports/LICENSE - projects/browser/Bundle-Data/PTConfigs/linux/torrc-defaults-appendix - projects/browser/Bundle-Data/PTConfigs/mac/torrc-defaults-appendix - projects/browser/Bundle-Data/PTConfigs/windows/torrc-defaults-appendix - projects/obfs4/build → projects/lyrebird/build - projects/obfs4/config → projects/lyrebird/config - projects/tor-expert-bundle/build - projects/tor-expert-bundle/config - projects/tor-expert-bundle/pt_config.json - projects/tor-onion-proxy-library/build Changes: ===================================== Makefile ===================================== @@ -601,11 +601,11 @@ go_vendor-conjure-alpha: submodule-update go_vendor-webtunnel-alpha: submodule-update $(rbm) build webtunnel --step go_vendor --target alpha --target torbrowser-linux-x86_64 -go_vendor-obfs4-alpha: submodule-update - $(rbm) build obfs4 --step go_vendor --target alpha --target torbrowser-linux-x86_64 +go_vendor-lyrebird-alpha: submodule-update + $(rbm) build lyrebird --step go_vendor --target alpha --target torbrowser-linux-x86_64 -go_vendor-obfs4-nightly: submodule-update - $(rbm) build obfs4 --step go_vendor --target nightly --target torbrowser-linux-x86_64 +go_vendor-lyrebird-nightly: submodule-update + $(rbm) build lyrebird --step go_vendor --target nightly --target torbrowser-linux-x86_64 ################## ===================================== projects/browser/Bundle-Data/Docs-TBB/Licenses/PluggableTransports/LICENSE ===================================== @@ -145,10 +145,10 @@ warranty. See LICENSE.CC0. =============================================================================== -obfs4 +lyrebird -Copyright (c) 2014, Yawning Angel <yawning at torproject dot org> -All rights reserved. +Copyright (c) 2023, The Tor Project +Copyright (c) 2014-2023, Yawning Angel <yawning at schwanenlied dot me> Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: ===================================== projects/browser/Bundle-Data/PTConfigs/linux/torrc-defaults-appendix ===================================== @@ -1,5 +1,5 @@ -## obfs4proxy configuration -ClientTransportPlugin meek_lite,obfs2,obfs3,obfs4,scramblesuit exec ./TorBrowser/Tor/PluggableTransports/obfs4proxy +## lyrebird configuration +ClientTransportPlugin meek_lite,obfs2,obfs3,obfs4,scramblesuit exec ./TorBrowser/Tor/PluggableTransports/lyrebird ## snowflake configuration ClientTransportPlugin snowflake exec ./TorBrowser/Tor/PluggableTransports/snowflake-client ===================================== projects/browser/Bundle-Data/PTConfigs/mac/torrc-defaults-appendix ===================================== @@ -1,5 +1,5 @@ -## obfs4proxy configuration -ClientTransportPlugin meek_lite,obfs2,obfs3,obfs4,scramblesuit exec PluggableTransports/obfs4proxy +## lyrebird configuration +ClientTransportPlugin meek_lite,obfs2,obfs3,obfs4,scramblesuit exec PluggableTransports/lyrebird ## snowflake configuration ClientTransportPlugin snowflake exec PluggableTransports/snowflake-client ===================================== projects/browser/Bundle-Data/PTConfigs/windows/torrc-defaults-appendix ===================================== @@ -1,5 +1,5 @@ -## obfs4proxy configuration -ClientTransportPlugin meek_lite,obfs2,obfs3,obfs4,scramblesuit exec TorBrowser\Tor\PluggableTransports\obfs4proxy.exe +## lyrebird configuration +ClientTransportPlugin meek_lite,obfs2,obfs3,obfs4,scramblesuit exec TorBrowser\Tor\PluggableTransports\lyrebird.exe ## snowflake configuration ClientTransportPlugin snowflake exec TorBrowser\Tor\PluggableTransports\snowflake-client.exe ===================================== projects/obfs4/build → projects/lyrebird/build ===================================== @@ -17,9 +17,8 @@ cd /var/tmp/build/[% project %]-[% c('version') %] tar -xf $rootdir/[% c('input_files_by_name/go_vendor') %] -cd obfs4proxy -go build -mod=vendor -ldflags '-s' -cp -a obfs4proxy[% IF c("var/windows") %].exe[% END %] $distdir +go build -mod=vendor -ldflags '-s' ./cmd/lyrebird +cp -a lyrebird[% IF c("var/windows") %].exe[% END %] $distdir cd $distdir [% c('tar', { ===================================== projects/obfs4/config → projects/lyrebird/config ===================================== @@ -1,7 +1,7 @@ # vim: filetype=yaml sw=2 -version: 0.0.14-tor2 -git_url: https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/obfs… -git_hash: 'obfs4proxy-[% c("version") %]' +version: 0.1.0 +git_url: https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/lyre… +git_hash: 'lyrebird-[% c("version") %]' tag_gpg_id: 1 gpg_keyring: anti-censorship.gpg @@ -9,16 +9,15 @@ container: use_container: 1 var: - go_vendor_sha256sum: 5d2d82d00afc5fe044ee6df718ffe066b7d9e5446944c0ee0870e060e4e6bcc8 + go_vendor_sha256sum: d95d1fa8ce3904b76395b20ef169e8ef2b039fa485764b74739bb6290631537d targets: nightly: - # Set fixed commit until tor-browser-build#40869 is done - git_hash: a34b4cad6d3c20f4abdec357e01101751a583f88 + git_hash: main version: '[% c("abbrev") %]' tag_gpg_id: 0 var: - go_vendor_sha256sum: 8b7e04a43bfbcdc829ea5093d8ee0a50eddefad543acd201b25424b33a7f882b + go_vendor_sha256sum: d95d1fa8ce3904b76395b20ef169e8ef2b039fa485764b74739bb6290631537d steps: build: @@ -32,7 +31,7 @@ steps: enable: '[% c("var/android") %]' - name: go_vendor pkg_type: go_vendor - project: obfs4 + project: lyrebird norec: sha256sum: '[% c("var/go_vendor_sha256sum") %]' target_replace: ===================================== projects/tor-expert-bundle/build ===================================== @@ -9,7 +9,7 @@ tar -xkf $rootdir/[% c('input_files_by_name/tor') %] cd tor mkdir pluggable_transports && cd pluggable_transports -tar -xkf $rootdir/[% c('input_files_by_name/obfs4') %] +tar -xkf $rootdir/[% c('input_files_by_name/lyrebird') %] tar -xkf $rootdir/[% c('input_files_by_name/snowflake') %] tar -xkf $rootdir/[% c('input_files_by_name/webtunnel') %] tar -xkf $rootdir/[% c('input_files_by_name/conjure') %] ===================================== projects/tor-expert-bundle/config ===================================== @@ -14,8 +14,8 @@ input_files: - project: container-image - name: tor project: tor - - name: obfs4 - project: obfs4 + - name: lyrebird + project: lyrebird - name: snowflake project: snowflake - project: webtunnel ===================================== projects/tor-expert-bundle/pt_config.json ===================================== @@ -1,7 +1,7 @@ { "recommendedDefault" : "obfs4", "pluggableTransports" : { - "obfs4proxy" : "ClientTransportPlugin meek_lite,obfs2,obfs3,obfs4,scramblesuit exec ${pt_path}obfs4proxy${pt_extension}", + "lyrebird" : "ClientTransportPlugin meek_lite,obfs2,obfs3,obfs4,scramblesuit exec ${pt_path}lyrebird${pt_extension}", "snowflake" : "ClientTransportPlugin snowflake exec ${pt_path}snowflake-client${pt_extension}", "webtunnel" : "ClientTransportPlugin webtunnel exec ${pt_path}webtunnel-client${pt_extension}", "conjure" : "ClientTransportPlugin conjure exec ${pt_path}conjure-client${pt_extension} -registerURL https://registration.refraction.network/api" ===================================== projects/tor-onion-proxy-library/build ===================================== @@ -36,8 +36,8 @@ patch -p1 < $rootdir/0001-Bug-40800-Add-WebTunnel-support.patch # Overwrite the obfs4proxy binary provided by Pluto and add Snowflake [% IF arch == "armv7" -%] - cp $ptdir/obfs4proxy external/pluto/bin/armeabi-v7a/ - cp $ptdir/obfs4proxy external/pluto/bin/armeabi/ + cp $ptdir/lyrebird external/pluto/bin/armeabi-v7a/obfs4proxy + cp $ptdir/lyrebird external/pluto/bin/armeabi/obfs4proxy cp $ptdir/snowflake-client external/pluto/bin/armeabi-v7a/ cp $ptdir/snowflake-client external/pluto/bin/armeabi/ cp $ptdir/conjure-client external/pluto/bin/armeabi-v7a/ @@ -45,12 +45,12 @@ patch -p1 < $rootdir/0001-Bug-40800-Add-WebTunnel-support.patch cp $ptdir/webtunnel-client external/pluto/bin/armeabi-v7a/ cp $ptdir/webtunnel-client external/pluto/bin/armeabi/ [% ELSIF arch == "aarch64" -%] - cp $ptdir/obfs4proxy external/pluto/bin/arm64-v8a/ + cp $ptdir/lyrebird external/pluto/bin/arm64-v8a/obfs4proxy cp $ptdir/snowflake-client external/pluto/bin/arm64-v8a/ cp $ptdir/conjure-client external/pluto/bin/arm64-v8a/ cp $ptdir/webtunnel-client external/pluto/bin/arm64-v8a/ [% ELSE -%] - cp $ptdir/obfs4proxy external/pluto/bin/[% arch %]/ + cp $ptdir/lyrebird external/pluto/bin/[% arch %]/obfs4proxy cp $ptdir/snowflake-client external/pluto/bin/[% arch %]/ cp $ptdir/conjure-client external/pluto/bin/[% arch %]/ cp $ptdir/webtunnel-client external/pluto/bin/[% arch %]/ View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/compare/… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/compare/… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser-build][maint-12.0-mullvad] Bug 40871: Update keyring/boklm.gpg for new subkeys
by boklm (@boklm) 02 Jun '23

02 Jun '23
boklm pushed to branch maint-12.0-mullvad at The Tor Project / Applications / tor-browser-build Commits: 747e1261 by Nicolas Vigier at 2023-06-02T11:32:41+02:00 Bug 40871: Update keyring/boklm.gpg for new subkeys - - - - - 1 changed file: - keyring/boklm.gpg Changes: ===================================== keyring/boklm.gpg ===================================== Binary files a/keyring/boklm.gpg and b/keyring/boklm.gpg differ View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/7… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/7… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser-build][maint-12.0] Bug 40871: Update keyring/boklm.gpg for new subkeys
by boklm (@boklm) 02 Jun '23

02 Jun '23
boklm pushed to branch maint-12.0 at The Tor Project / Applications / tor-browser-build Commits: 0bfd0b01 by Nicolas Vigier at 2023-06-02T11:32:02+02:00 Bug 40871: Update keyring/boklm.gpg for new subkeys - - - - - 1 changed file: - keyring/boklm.gpg Changes: ===================================== keyring/boklm.gpg ===================================== Binary files a/keyring/boklm.gpg and b/keyring/boklm.gpg differ View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/0… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/0… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser-build][main] Bug 40871: Update keyring/boklm.gpg for new subkeys
by boklm (@boklm) 02 Jun '23

02 Jun '23
boklm pushed to branch main at The Tor Project / Applications / tor-browser-build Commits: 6f8b9584 by Nicolas Vigier at 2023-06-01T18:12:09+02:00 Bug 40871: Update keyring/boklm.gpg for new subkeys - - - - - 1 changed file: - keyring/boklm.gpg Changes: ===================================== keyring/boklm.gpg ===================================== Binary files a/keyring/boklm.gpg and b/keyring/boklm.gpg differ View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/6… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/6… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
  • ← Newer
  • 1
  • ...
  • 415
  • 416
  • 417
  • 418
  • 419
  • 420
  • 421
  • ...
  • 1877
  • Older →

HyperKitty Powered by HyperKitty version 1.3.12.