tor-commits
Threads by month
- ----- 2025 -----
- 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
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
February 2020
- 22 participants
- 1454 discussions

[translation/tpo-web] https://gitweb.torproject.org/translation.git/commit/?h=tpo-web
by translation@torproject.org 06 Feb '20
by translation@torproject.org 06 Feb '20
06 Feb '20
commit a026bd4db6bf830f96ebbee9ac75101b0893ac18
Author: Translation commit bot <translation(a)torproject.org>
Date: Thu Feb 6 05:53:10 2020 +0000
https://gitweb.torproject.org/translation.git/commit/?h=tpo-web
---
contents+zh-CN.po | 40 ++++++++++++++++++++--------------------
1 file changed, 20 insertions(+), 20 deletions(-)
diff --git a/contents+zh-CN.po b/contents+zh-CN.po
index 06ae268efc..b3a6e958fe 100644
--- a/contents+zh-CN.po
+++ b/contents+zh-CN.po
@@ -6,13 +6,13 @@
# ヨイツの賢狼ホロ, 2019
# Dianyu Liu <liudianyu5(a)gmail.com>, 2019
# MD Rights <psychi2009(a)gmail.com>, 2019
-# ff98sha, 2019
# erinm, 2019
# IDRASSI Mounir <mounir.idrassi(a)idrix.fr>, 2019
# ciaran <ciaranchen(a)qq.com>, 2019
# YFdyh000 <yfdyh000(a)gmail.com>, 2019
# Emma Peel, 2019
# Cloud P <heige.pcloud(a)outlook.com>, 2020
+# ff98sha, 2020
#
msgid ""
msgstr ""
@@ -20,7 +20,7 @@ msgstr ""
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-11-15 12:00+CET\n"
"PO-Revision-Date: 2019-03-09 10:41+0000\n"
-"Last-Translator: Cloud P <heige.pcloud(a)outlook.com>, 2020\n"
+"Last-Translator: ff98sha, 2020\n"
"Language-Team: Chinese (China) (https://www.transifex.com/otf/teams/1519/zh_CN/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -296,7 +296,7 @@ msgid ""
"The Tor Project and its surrounding community develop and distribute some of"
" the most popular and widely used free, open source privacy technologies: "
"Tor Browser and the Tor network."
-msgstr "Tor 项目及其周围的社区开发和分发了一些最流行和广泛使用的免费开源的隐私技术:Tor 浏览器和Tor 网络。"
+msgstr "Tor 项目及其周围的社区开发和分发了一些最流行和广泛使用的免费开源的隐私技术:Tor 浏览器和 Tor 网络。"
#: https//www.torproject.org/about/cy-pres/
#: (content/about/cy-pres/contents+en.lrpage.body)
@@ -386,7 +386,7 @@ msgstr "# 商标和版权总声明"
#: https//www.torproject.org/about/trademark/
#: (content/about/trademark/contents+en.lrtrademark.body)
msgid "Content on this site is Copyright The Tor Project, Inc.."
-msgstr "本网站的内容的版权由The Tor Project, Inc.所有。"
+msgstr "本网站的内容的版权由 The Tor Project, Inc. 所有。"
#: https//www.torproject.org/about/trademark/
#: (content/about/trademark/contents+en.lrtrademark.body)
@@ -394,8 +394,8 @@ msgid ""
"Reproduction of content is permitted under a [Creative Commons Attribution "
"3.0 United States License](https://creativecommons.org/licenses/by/3.0/us/)."
msgstr ""
-"根据以下协议,允许复制内容[Creative Commons Attribution 3.0 United States "
-"License](https://creativecommons.org/licenses/by/3.0/us/)。"
+"根据以下协议,允许复制内容:[知识共享 署名 3.0 美国本地化协议(CC BY "
+"3.0)](https://creativecommons.org/licenses/by/3.0/us/)。"
#: https//www.torproject.org/about/trademark/
#: (content/about/trademark/contents+en.lrtrademark.body)
@@ -403,7 +403,7 @@ msgid ""
"All use under such license must be accompanied by a clear and prominent "
"attribution that identifies The Tor Project, Inc. as the owner and "
"originator of such content."
-msgstr "所有使用该协议的用户必须注明清晰明显的来源:The Tor Project, Inc是该内容的所有者。"
+msgstr "所有使用该协议的用户必须注明清晰明显的来源:The Tor Project, Inc 是该内容的所有者。"
#: https//www.torproject.org/about/trademark/
#: (content/about/trademark/contents+en.lrtrademark.body)
@@ -420,7 +420,7 @@ msgid ""
"licenses](https://2019.www.torproject.org/docs/faq.html.en#DistributingTor)."
msgstr ""
"Tor® "
-"软件以各种方式获得许可。了解更多关于[不同许可](https://2019.www.torproject.org/docs/faq.html.en#D…."
+"软件以各种方式获得许可。了解更多关于[不同许可](https://2019.www.torproject.org/docs/faq.html.en#D…"
#: https//www.torproject.org/about/history/
#: (content/about/history/contents+en.lrpage.body)
@@ -971,12 +971,12 @@ msgid ""
"infrastructure, please email tor-security(a)lists.torproject.org. If you've "
"found a security bug in Tor or Tor Browser, feel free to submit it for our"
msgstr ""
-"如果您在我们的项目或基础架构中发现了安全问题,请发送电子邮件至tor-security(a)lists.torproject.org. "
-"如果您在Tor或Tor 浏览器中发现了安全漏洞,请随时将其提交给我们"
+"如果您在我们的项目或基础架构中发现了安全问题,请发送电子邮件至 tor-security(a)lists.torproject.org. 如果您在 Tor "
+"或 Tor 浏览器中发现了安全漏洞,请随时将其提交到我们的"
#: templates/contact.html:80
msgid "bug bounty program."
-msgstr "漏洞赏金计,"
+msgstr "漏洞赏金计划。"
#: templates/contact.html:80
msgid ""
@@ -984,8 +984,8 @@ msgid ""
"list by contacting tor-security-sendkey(a)lists.torproject.org or from pool"
".sks-keyservers.net. Here is the fingerprint:"
msgstr ""
-"如果您想要加密您的邮件,可以通过与tor-security-sendkey(a)lists.torproject.xn--orgpool-b64k564leh6clyh.sks-"
-"keyservers.net获取列表的GPG公钥。 这是指纹:"
+"如果您想要加密您的邮件,可以通过与 tor-security-sendkey(a)lists.torproject.org 联系或从 pool.sks-"
+"keyservers.net 获取列表的 GPG 公钥。 这是指纹:"
#: templates/contact.html:100
msgid "Email us"
@@ -998,8 +998,8 @@ msgid ""
"email frontdesk(a)torproject.org. For donor-related questions, contact "
"giving(a)torproject.org"
msgstr ""
-"对于有关非营利组织Tor的疑问和评论:商标问题,隶属关系和协调,合同查询等,请发送电子邮件至frontdesk(a)torproject.org. "
-"对于与捐助者有关的问题,请联系giving(a)torproject.org"
+"对于有关非营利组织 Tor 的疑问和评论:商标问题,隶属关系和协调,合同查询等,请发送电子邮件至 frontdesk(a)torproject.org. "
+"对于与捐助者有关的问题,请联系 giving(a)torproject.org"
#: templates/contact.html:107
msgid "Send us Mail"
@@ -1052,7 +1052,7 @@ msgstr "MacOS"
#: templates/download-options.html:43
msgid "Tor Browser for Android Alpha"
-msgstr "Tor 浏览器 for Android Alpha"
+msgstr "Android Alpha 版 Tor 浏览器"
#: templates/download-options.html:49
msgid "Google Play"
@@ -1060,7 +1060,7 @@ msgstr "Google Play"
#: templates/download-tor.html:8
msgid "Tor Source"
-msgstr "Tor Source"
+msgstr "Tor 来源"
#: templates/download-tor.html:12
msgid "Version"
@@ -1072,15 +1072,15 @@ msgstr "签名"
#: templates/download-tor.html:37
msgid "Windows Expert Bundle"
-msgstr "Windows Expert Bundle"
+msgstr "Windows 专家套件"
#: templates/download-tor.html:42
msgid "Windows 10, 8, 7, Vista, XP, 2000, 2003 Server, ME, and Windows 98SE"
-msgstr "Windows 10, 8, 7, Vista, XP, 2000, 2003 Server, ME, and Windows 98SE"
+msgstr "Windows 10、8、7、Vista、XP、2000、2003 Server、ME、Windows 98SE"
#: templates/download-tor.html:43
msgid "Contains just Tor and nothing else."
-msgstr "仅包含Tor。"
+msgstr "仅包含 Tor。"
#: templates/download.html:5
msgid "Get Connected"
1
0

[translation/tbmanual-contentspot_completed] https://gitweb.torproject.org/translation.git/commit/?h=tbmanual-contentspot_completed
by translation@torproject.org 06 Feb '20
by translation@torproject.org 06 Feb '20
06 Feb '20
commit ed4384a6962ff959ca1d08ebfc3be9c31b791743
Author: Translation commit bot <translation(a)torproject.org>
Date: Thu Feb 6 05:50:23 2020 +0000
https://gitweb.torproject.org/translation.git/commit/?h=tbmanual-contentspo…
---
contents+zh-CN.po | 144 +++++++++++++++++++++++++++++++-----------------------
1 file changed, 82 insertions(+), 62 deletions(-)
diff --git a/contents+zh-CN.po b/contents+zh-CN.po
index 406c3c9643..f37d63b17d 100644
--- a/contents+zh-CN.po
+++ b/contents+zh-CN.po
@@ -4,10 +4,10 @@
# erinm, 2019
# shenzhui007 <12231252(a)bjtu.edu.cn>, 2019
# YFdyh000 <yfdyh000(a)gmail.com>, 2019
-# ff98sha, 2019
# khi, 2020
-# Emma Peel, 2020
# Cloud P <heige.pcloud(a)outlook.com>, 2020
+# Emma Peel, 2020
+# ff98sha, 2020
#
msgid ""
msgstr ""
@@ -15,7 +15,7 @@ msgstr ""
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-01-15 15:58+CET\n"
"PO-Revision-Date: 2018-11-14 12:31+0000\n"
-"Last-Translator: Cloud P <heige.pcloud(a)outlook.com>, 2020\n"
+"Last-Translator: ff98sha, 2020\n"
"Language-Team: Chinese (China) (https://www.transifex.com/otf/teams/1519/zh_CN/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -157,7 +157,7 @@ msgstr "成为 Tor 翻译者"
#: https//tb-manual.torproject.org/menu/
#: (content/menu/contents+en.lrtopic.body)
msgid "Making Tor Browser portable"
-msgstr ""
+msgstr "可移植 Tor 浏览器"
#: https//tb-manual.torproject.org/menu/
#: (content/menu/contents+en.lrtopic.body)
@@ -306,6 +306,9 @@ msgid ""
"mirrors, either through [EFF](https://tor.eff.org), [Calyx "
"Institute](https://tor.calyxinstitute.org) or [CCC](https://tor.ccc.de)."
msgstr ""
+"如果您无法从Tor 项目的官方网站下载Tor 浏览器,您可以使用从我们的其中一个官方镜像中安装,可以通过 "
+"[EFF](https://tor.eff.org),[Calyx "
+"Institute](https://tor.calyxinstitute.org)或[CCC](https://tor.ccc.de)下载。"
#: https//tb-manual.torproject.org/downloading/
#: (content/downloading/contents+en.lrtopic.body)
@@ -368,12 +371,12 @@ msgstr ""
#: https//tb-manual.torproject.org/installation/
#: (content/installation/contents+en.lrtopic.title)
msgid "INSTALLATION"
-msgstr ""
+msgstr "安装"
#: https//tb-manual.torproject.org/installation/
#: (content/installation/contents+en.lrtopic.description)
msgid "Installing Tor Browser"
-msgstr ""
+msgstr "正在安装 Tor 浏览器"
#: https//tb-manual.torproject.org/installation/
#: (content/installation/contents+en.lrtopic.body)
@@ -387,12 +390,12 @@ msgstr "Windows:"
msgid ""
"1. Navigate to the Tor Browser [download "
"page](https://www.torproject.org/download)."
-msgstr ""
+msgstr "1. 跳转至 Tor 浏览器的[下载页](https://www.torproject.org/download)。"
#: https//tb-manual.torproject.org/installation/
#: (content/installation/contents+en.lrtopic.body)
msgid "2. Download the Windows `.exe` file"
-msgstr ""
+msgstr "2. 下载 Windows 中的“.exe”可执行文件。"
#: https//tb-manual.torproject.org/installation/
#: (content/installation/contents+en.lrtopic.body)
@@ -400,82 +403,84 @@ msgid ""
"3. (Recommended) Verify the [file's "
"signature](https://support.torproject.org/en/tbb/how-to-verify-signature/)."
msgstr ""
+"3. (推荐)验证[文件的签名](https://support.torproject.org/en/tbb/how-to-verify-"
+"signature/)。"
#: https//tb-manual.torproject.org/installation/
#: (content/installation/contents+en.lrtopic.body)
msgid ""
"4. When the download is complete, double click the `.exe` file. Complete the"
" installation wizard process."
-msgstr ""
+msgstr "4. 当下载完成后,双击“.exe”文件。完成安装向导。"
#: https//tb-manual.torproject.org/installation/
#: (content/installation/contents+en.lrtopic.body)
#: https//tb-manual.torproject.org/make-tor-portable/
#: (content/make-tor-portable/contents+en.lrtopic.body)
msgid "For macOS:"
-msgstr ""
+msgstr "对于 macOS:"
#: https//tb-manual.torproject.org/installation/
#: (content/installation/contents+en.lrtopic.body)
msgid "2. Download the macOS `.dmg` file"
-msgstr ""
+msgstr "2. 下载 macOS 的“.dmg”文件。"
#: https//tb-manual.torproject.org/installation/
#: (content/installation/contents+en.lrtopic.body)
msgid ""
"4. When the download is complete, double click the `.dmg` file. Complete the"
" installation wizard process."
-msgstr ""
+msgstr "4. 当下载完成后,双击“.dmg”文件。完成安装向导。"
#: https//tb-manual.torproject.org/installation/
#: (content/installation/contents+en.lrtopic.body)
#: https//tb-manual.torproject.org/make-tor-portable/
#: (content/make-tor-portable/contents+en.lrtopic.body)
msgid "For GNU/Linux:"
-msgstr ""
+msgstr "对于 GNU/Linux:"
#: https//tb-manual.torproject.org/installation/
#: (content/installation/contents+en.lrtopic.body)
msgid "2. Download the GNU/Linux `.tar.xz` file"
-msgstr ""
+msgstr "2. 下载 GNU/Linux 的“.tar.xz”文件"
#: https//tb-manual.torproject.org/installation/
#: (content/installation/contents+en.lrtopic.body)
msgid ""
"4. When the download is complete, extract the archive with the command `tar "
"-xf [TB archive]` or by using an archive manager."
-msgstr ""
+msgstr "4. 当下载完成后,使用命令“tar -xf[TB archive]”解压文件,或使用档案管理器。"
#: https//tb-manual.torproject.org/installation/
#: (content/installation/contents+en.lrtopic.body)
msgid ""
"5. You'll need to tell your GNU/Linux that you want the ability to execute "
"shell scripts from the graphical interface."
-msgstr ""
+msgstr "5. 您将需要告诉您的 NU/Linux 您想要从图形界面允许 shell 脚本。"
#: https//tb-manual.torproject.org/installation/
#: (content/installation/contents+en.lrtopic.body)
msgid "Navigate to the newly extracted Tor Browser directory."
-msgstr ""
+msgstr "导航至新解压出的 Tor 浏览器的目录。"
#: https//tb-manual.torproject.org/installation/
#: (content/installation/contents+en.lrtopic.body)
msgid ""
"Right click on `start-tor-browser.desktop`, open Properties or Preferences "
"and change the permission to allow executing file as program."
-msgstr ""
+msgstr "右击 `start-tor-browser.desktop`,打开属性或优先级并更改许可以允许程序解压该文件。"
#: https//tb-manual.torproject.org/installation/
#: (content/installation/contents+en.lrtopic.body)
msgid "Double-click the icon to start up Tor Browser for the first time."
-msgstr ""
+msgstr "双击图标来第一次运行 Tor 浏览器。"
#: https//tb-manual.torproject.org/installation/
#: (content/installation/contents+en.lrtopic.body)
msgid ""
"6. Alternatively, from inside the Tor Browser directory, you can also start "
"from the command line by running:"
-msgstr ""
+msgstr "6.或者,也可以从 Tor 浏览器的目录中,通过运行以下命令从命令行启动:"
#: https//tb-manual.torproject.org/installation/
#: (content/installation/contents+en.lrtopic.body)
@@ -497,14 +502,14 @@ msgstr "了解如何初次使用 Tor 浏览器"
msgid ""
"When you run Tor Browser for the first time, you will see the Tor Network "
"Settings window."
-msgstr ""
+msgstr "首次运行 Tor 浏览器时,您将看到 Tor 网络设置窗口。"
#: https//tb-manual.torproject.org/running-tor-browser/
#: (content/running-tor-browser/contents+en.lrtopic.body)
msgid ""
"This offers you the option to connect directly to the Tor network, or to "
"configure Tor Browser for your connection."
-msgstr ""
+msgstr "这向您提供直接连接至 Tor 网络,或为您的连接配置 Tor 浏览器的选项。"
#: https//tb-manual.torproject.org/running-tor-browser/
#: (content/running-tor-browser/contents+en.lrtopic.body)
@@ -523,13 +528,13 @@ msgstr "<img class=\"col-md-6\" src=\"../../static/images/connect.png\">"
msgid ""
"In most cases, choosing \"Connect\" will allow you to connect to the Tor "
"network without any further configuration."
-msgstr ""
+msgstr "在大多数情况下,选择“连接”将允许您无需其他配置直接连接至 Tor 网络。"
#: https//tb-manual.torproject.org/running-tor-browser/
#: (content/running-tor-browser/contents+en.lrtopic.body)
msgid ""
"Once clicked, a status bar will appear, showing Tor’s connection progress."
-msgstr ""
+msgstr "一当点击,一个状态栏会显示,展示 Tor 的连接状态。"
#: https//tb-manual.torproject.org/running-tor-browser/
#: (content/running-tor-browser/contents+en.lrtopic.body)
@@ -537,7 +542,7 @@ msgid ""
"If you are on a relatively fast connection, but this bar seems to get stuck "
"at a certain point, see the [Troubleshooting](/troubleshooting) page for "
"help solving the problem."
-msgstr ""
+msgstr "如果您的连接速度相对较快,但该状态栏似乎在某个时候卡住了,请参阅[故障排除](/troubleshooting)页面以帮助解决问题。"
#: https//tb-manual.torproject.org/running-tor-browser/
#: (content/running-tor-browser/contents+en.lrtopic.body)
@@ -607,14 +612,14 @@ msgstr "Tor 网络被拦截该怎么做"
msgid ""
"Direct access to the Tor network may sometimes be blocked by your Internet "
"Service Provider or by a government."
-msgstr ""
+msgstr "您的互联网服务提供商或政府有时可能会阻止直接访问 Tor 网络。"
#: https//tb-manual.torproject.org/circumvention/
#: (content/circumvention/contents+en.lrtopic.body)
msgid ""
"Tor Browser includes some circumvention tools for getting around these "
"blocks. These tools are called “pluggable transports”."
-msgstr ""
+msgstr "Tor 浏览器包括一些规避工具,用于解决这些问题。 这些工具称为“可插拔传输”。"
#: https//tb-manual.torproject.org/circumvention/
#: (content/circumvention/contents+en.lrtopic.body)
@@ -626,7 +631,7 @@ msgstr "### 可插拔传输类型"
msgid ""
"Currently there are three pluggable transports available, but more are being"
" developed."
-msgstr ""
+msgstr "目前您有三种可插拔传输器可用,但我们正在开发更多。"
#: https//tb-manual.torproject.org/circumvention/
#: (content/circumvention/contents+en.lrtopic.body)
@@ -665,6 +670,8 @@ msgid ""
"bridges by Internet scanning. obfs4 bridges are less likely to be blocked "
"than its predecessor, obfs3 bridges."
msgstr ""
+"obfs4 使 Tor 的流量看起来是随机的,并且还防止检查程序通过互联网扫描找到网桥。 与之前的 obfs3 网桥相比,obfs4 "
+"网桥被阻塞的可能性较小。"
#: https//tb-manual.torproject.org/circumvention/
#: (content/circumvention/contents+en.lrtopic.body)
@@ -682,7 +689,7 @@ msgid ""
"meek transports all make it look like you are browsing a major web site "
"instead of using Tor. meek-azure makes it look like you are using a "
"Microsoft web site."
-msgstr ""
+msgstr "meek 方式使您看起来像在浏览主要网站,而不是使用 Tor。 meek-azure 使您看起来像在使用 Microsoft 网站。"
#: https//tb-manual.torproject.org/circumvention/
#: (content/circumvention/contents+en.lrtopic.body)
@@ -706,12 +713,12 @@ msgstr ""
#: https//tb-manual.torproject.org/circumvention/
#: (content/circumvention/contents+en.lrtopic.body)
msgid "</tbody>"
-msgstr ""
+msgstr "</tbody>"
#: https//tb-manual.torproject.org/circumvention/
#: (content/circumvention/contents+en.lrtopic.body)
msgid "</table>"
-msgstr ""
+msgstr "</table>"
#: https//tb-manual.torproject.org/circumvention/
#: (content/circumvention/contents+en.lrtopic.body)
@@ -724,7 +731,7 @@ msgid ""
"To use a pluggable transport, click 'Configure' when starting Tor Browser "
"for the first time. In the window that appears, from the drop-down menu, "
"select whichever pluggable transport you'd like to use."
-msgstr ""
+msgstr "要使用可插拔传输,请在首次启动 Tor 浏览器时单击“配置”。 在出现的窗口中,从下拉菜单中选择您要使用的任何可插拔传输器。"
#: https//tb-manual.torproject.org/circumvention/
#: (content/circumvention/contents+en.lrtopic.body)
@@ -734,13 +741,15 @@ msgid ""
"'Use a bridge', and from the drop-down menu 'Select a built-in bridge', "
"choose whichever pluggable transport you'd like to use."
msgstr ""
+"或者,如果您正在运行 Tor 浏览器,请在汉堡菜单中单击“首选项”,然后在侧栏中单击“Tor”。 "
+"在“网桥”部分中,选中“使用网桥”,然后从下拉菜单“选择内置网桥”中选择您要使用的可插拔传输工具。"
#: https//tb-manual.torproject.org/circumvention/
#: (content/circumvention/contents+en.lrtopic.body)
msgid ""
"Once you've selected the pluggable transport you'd like to use, click "
"'Connect' to save your settings."
-msgstr ""
+msgstr "选择了要使用的可插拔传输器后,点击“连接”以保存您的设置。"
#: https//tb-manual.torproject.org/circumvention/
#: (content/circumvention/contents+en.lrtopic.body)
@@ -752,7 +761,7 @@ msgstr "### 我该使用哪种传输方式?"
msgid ""
"Each of the transports listed in Tor Launcher’s menu works in a different "
"way, and their effectiveness depends on your individual circumstances."
-msgstr ""
+msgstr "Tor 启动器的菜单中列出的每种传输方式都以不同的方式工作,其有效性取决于您的具体情况。"
#: https//tb-manual.torproject.org/circumvention/
#: (content/circumvention/contents+en.lrtopic.body)
@@ -792,7 +801,7 @@ msgstr "大多数可插拔传输,如 obfs4,依赖于使用“网桥”中继
msgid ""
"Most [Pluggable Transports](/circumvention), such as obfs4, rely on the use "
"of “bridge” relays."
-msgstr ""
+msgstr "大多数[可插拔传输](/circumvention),比如 obfs4,依赖于“网桥”中继。"
#: https//tb-manual.torproject.org/bridges/
#: (content/bridges/contents+en.lrtopic.body)
@@ -808,7 +817,7 @@ msgid ""
"Using bridges in combination with pluggable transports helps to disguise the"
" fact that you are using Tor, but may slow down the connection compared to "
"using ordinary Tor relays."
-msgstr ""
+msgstr "结合使用网桥和可插拔传输器有助于掩盖您正在使用 Tor 的事实,但与使用普通 Tor 中继相比,可能会减慢连接速度。"
#: https//tb-manual.torproject.org/bridges/
#: (content/bridges/contents+en.lrtopic.body)
@@ -844,12 +853,12 @@ msgstr "* 使用 Gmail 或 Riseup 的邮箱服务发送电子邮件至 bridges@t
#: https//tb-manual.torproject.org/bridges/
#: (content/bridges/contents+en.lrtopic.body)
msgid "* Use MOAT to fetch bridges from within Tor Browser."
-msgstr ""
+msgstr "*使用 MOAT 从 Tor 浏览器中获取网桥。"
#: https//tb-manual.torproject.org/bridges/
#: (content/bridges/contents+en.lrtopic.body)
msgid "### USING MOAT"
-msgstr ""
+msgstr "### 使用MOAT"
#: https//tb-manual.torproject.org/bridges/
#: (content/bridges/contents+en.lrtopic.body)
@@ -863,7 +872,7 @@ msgstr "当您首次启动 Tor 浏览器时,点击“配置”来打开洋葱
msgid ""
"Otherwise, click on 'Preferences' in the hamburger menu (main menu) and then"
" on 'Tor' in the sidebar."
-msgstr ""
+msgstr "否则,请在菜单中单击“首选项”,然后在侧栏中单击“Tor”。"
#: https//tb-manual.torproject.org/bridges/
#: (content/bridges/contents+en.lrtopic.body)
@@ -876,12 +885,12 @@ msgstr "在洋葱网络设置窗口中,选择“Tor 在我的国家访问受
msgid ""
"Then, select 'Request a bridge from torproject.org' and click 'Request a "
"bridge...'"
-msgstr ""
+msgstr "然后选择“从 torproject.org 申请一个网桥”并点击“申请网桥...”"
#: https//tb-manual.torproject.org/bridges/
#: (content/bridges/contents+en.lrtopic.body)
msgid "Complete the CAPTCHA and click 'Submit'."
-msgstr ""
+msgstr "完成验证码并点击“提交”。"
#: https//tb-manual.torproject.org/bridges/
#: (content/bridges/contents+en.lrtopic.body)
@@ -894,6 +903,8 @@ msgid ""
"<img class=\"col-md-6\" align=\"right\" hspace=\"5\" "
"src=\"../../static/images/tor-launcher-custom-bridges.png\">"
msgstr ""
+"<img class=\"col-md-6\" align=\"right\" hspace=\"5\" "
+"src=\"../../static/images/tor-launcher-custom-bridges.png\">"
#: https//tb-manual.torproject.org/bridges/
#: (content/bridges/contents+en.lrtopic.body)
@@ -910,13 +921,15 @@ msgid ""
"hamburger menu (main menu) and then on 'Tor' in the sidebar to access these "
"options."
msgstr ""
+"如果您是第一次启动 Tor 浏览器,请单击“配置”以打开 Tor 网络设置窗口。 "
+"否则,请在主菜单中单击“首选项”,然后在侧栏中单击“Tor”以访问这些选项。"
#: https//tb-manual.torproject.org/bridges/
#: (content/bridges/contents+en.lrtopic.body)
msgid ""
"In 'Bridges' section, check the box 'Use a bridge', then, select 'Provide a "
"bridge I know' and enter each bridge address on a separate line."
-msgstr ""
+msgstr "在“网桥”部分中,选中“使用网桥”,然后选择“提供我知道的网桥”,然后在单独的行中输入每个网桥地址。"
#: https//tb-manual.torproject.org/bridges/
#: (content/bridges/contents+en.lrtopic.body)
@@ -1086,7 +1099,7 @@ msgstr "<img class=\"col-md-6\" src=\"../../static/images/new_identity.png\">"
msgid ""
"Tor Browser features “New Identity” and “New Tor Circuit for this Site” "
"options. There are also located in the main menu (hamburger menu)."
-msgstr ""
+msgstr "Tor 浏览器具有“新身份”和“此站点的新 Tor 线路”选项。 也位于主菜单中。"
#: https//tb-manual.torproject.org/managing-identities/
#: (content/managing-identities/contents+en.lrtopic.body)
@@ -1112,7 +1125,7 @@ msgstr ""
msgid ""
"To use this option, you just need to click on 'New Identity' in Tor "
"Browser's toolbar."
-msgstr ""
+msgstr "要使用此选项,只需在Tor 浏览器的工具栏中单击“新身份”。"
#: https//tb-manual.torproject.org/managing-identities/
#: (content/managing-identities/contents+en.lrtopic.body)
@@ -1303,7 +1316,7 @@ msgstr "你可以禁用某些互联网功能来进一步提高安全性和匿名
msgid ""
"You can do this by increasing Tor Browser's Security Levels in the shield "
"menu."
-msgstr ""
+msgstr "您可以在通过在盾牌菜单里提高 Tor 浏览器的安全等级来做到这一点。"
#: https//tb-manual.torproject.org/security-settings/
#: (content/security-settings/contents+en.lrtopic.body)
@@ -1471,7 +1484,7 @@ msgstr "<img width=\"400\" src=\"../../static/images/update1.png\" />"
msgid ""
"When you are prompted to update Tor Browser, click on hamburger menu (main "
"menu), then select “Restart to update Tor browser”."
-msgstr ""
+msgstr "当提示您更新 Tor 浏览器时,单击主菜单,然后选择“重新启动以更新 Tor 浏览器”。"
#: https//tb-manual.torproject.org/updating/
#: (content/updating/contents+en.lrtopic.body)
@@ -1483,7 +1496,7 @@ msgstr "<img width=\"500\" src=\"../../static/images/update4.png\" />"
msgid ""
"Wait for the update to download and install, then Tor Browser will restart "
"itself. You will now be running the latest version."
-msgstr ""
+msgstr "等待更新下载并安装,然后 Tor 浏览器将自行重启。 您现在将运行最新版本。"
#: https//tb-manual.torproject.org/updating/
#: (content/updating/contents+en.lrtopic.body)
@@ -1670,6 +1683,9 @@ msgid ""
"control the JavaScript (and other scripts) that runs on individual web "
"pages, or block it entirely."
msgstr ""
+"Tor 浏览器包含一个名为 NoScript 的插件。 "
+"可以通过汉堡菜单(主菜单)上的“首选项”进行访问,然后选择“自定义”并将“S”图标拖到窗口的右上角。 NoScript "
+"允许您控制在单个网页上运行的JavaScript(和其他脚本),或完全阻止它。"
#: https//tb-manual.torproject.org/plugins/
#: (content/plugins/contents+en.lrtopic.body)
@@ -1681,6 +1697,9 @@ msgid ""
" displaying correctly, so Tor Browser’s default setting is to allow all "
"websites to run scripts in \"Standard\" mode."
msgstr ""
+"在网络浏览中需要高度安全性的用户应将 Tor 浏览器的[安全级别](../ security-settings /)设置为“更安全”(对非 HTTPS "
+"网站禁用 JavaScript)或“最安全”( 对于所有网站禁用 JavaScript)。 但是,禁用 JavaScript "
+"会阻止许多网站正确显示,因此 Tor 浏览器的默认设置是允许所有网站以“标准”模式运行脚本。"
#: https//tb-manual.torproject.org/plugins/
#: (content/plugins/contents+en.lrtopic.body)
@@ -1931,46 +1950,46 @@ msgstr ""
#: https//tb-manual.torproject.org/make-tor-portable/
#: (content/make-tor-portable/contents+en.lrtopic.title)
msgid "MAKE TOR BROWSER PORTABLE"
-msgstr ""
+msgstr "使 Tor 浏览器更便携"
#: https//tb-manual.torproject.org/make-tor-portable/
#: (content/make-tor-portable/contents+en.lrtopic.description)
msgid "How to install Tor Browser onto removable media"
-msgstr ""
+msgstr "如何在一个可移除的媒介上安装 Tor 浏览器"
#: https//tb-manual.torproject.org/make-tor-portable/
#: (content/make-tor-portable/contents+en.lrtopic.body)
msgid ""
"If preferred, Tor Browser may be made portable by extracting it from its "
"archive directly onto removable media such as a USB stick or SD card."
-msgstr ""
+msgstr "如果愿意,可以通过将 Tor 浏览器从其存档直接提取到可移动媒体(例如 USB 记忆棒或 SD 卡)上,从而使其具有便携性。"
#: https//tb-manual.torproject.org/make-tor-portable/
#: (content/make-tor-portable/contents+en.lrtopic.body)
msgid ""
"It is recommended to use writable media so that Tor Browser can be updated "
"as required."
-msgstr ""
+msgstr "建议使用可写媒体,以便可以根据需要更新 Tor 浏览器。"
#: https//tb-manual.torproject.org/make-tor-portable/
#: (content/make-tor-portable/contents+en.lrtopic.body)
msgid ""
"1. Plug in your removable media and format it. Any filesystem type will "
"work."
-msgstr ""
+msgstr "1. 插入您的可插拔存储器并格式化它。任何的文件系统都满足需求。"
#: https//tb-manual.torproject.org/make-tor-portable/
#: (content/make-tor-portable/contents+en.lrtopic.body)
msgid ""
"2. Navigate to the Tor Browser [download "
"page](https://torproject.org/download)."
-msgstr ""
+msgstr "2. 访问 Tor 浏览器[下载页面](https://torproject.org/download)。"
#: https//tb-manual.torproject.org/make-tor-portable/
#: (content/make-tor-portable/contents+en.lrtopic.body)
msgid ""
"3. Download the Windows `.exe` file and save it directly to your media."
-msgstr ""
+msgstr "3. 下载 Windows 的“.exe”文件并将其直接保存进您的储存器中。"
#: https//tb-manual.torproject.org/make-tor-portable/
#: (content/make-tor-portable/contents+en.lrtopic.body)
@@ -1978,57 +1997,58 @@ msgid ""
"4. (Recommended) Verify the [files "
"signature](https://support.torproject.org/tbb/how-to-verify-signature/)."
msgstr ""
+"4.(推荐)验证[文件签名](https://support.torproject.org/tbb/how-to-verify-signature/)。"
#: https//tb-manual.torproject.org/make-tor-portable/
#: (content/make-tor-portable/contents+en.lrtopic.body)
msgid ""
"5. When the download is complete, click the `.exe` file and begin the "
"installation process."
-msgstr ""
+msgstr "5. 当下载完成后,点击“.exe”文件并开始安装进程。"
#: https//tb-manual.torproject.org/make-tor-portable/
#: (content/make-tor-portable/contents+en.lrtopic.body)
msgid ""
"6. When the installer asks where to install Tor Browser, select your "
"removable media."
-msgstr ""
+msgstr "6. 当安装程序询问 Tor 浏览器的安装位置时,选择您的可插拔存储器。"
#: https//tb-manual.torproject.org/make-tor-portable/
#: (content/make-tor-portable/contents+en.lrtopic.body)
msgid ""
"1. Plug in your removable media and format it. You *must* use macOS Extended"
" (Journaled) format."
-msgstr ""
+msgstr "1. 插入可移动媒体并对其进行格式化。 您*必须*使用 macOS 扩展(日志式)格式。"
#: https//tb-manual.torproject.org/make-tor-portable/
#: (content/make-tor-portable/contents+en.lrtopic.body)
msgid "3. Download the macOS `.dmg` file and save it directly to your media."
-msgstr ""
+msgstr "3.下载 macOS 的.dmg文件并将其直接保存到您的媒体中。"
#: https//tb-manual.torproject.org/make-tor-portable/
#: (content/make-tor-portable/contents+en.lrtopic.body)
msgid ""
"5. When the download is complete, click the `.dmg` file and begin the "
"installation process."
-msgstr ""
+msgstr "5.下载完成后,单击`.dmg`文件并开始安装过程。"
#: https//tb-manual.torproject.org/make-tor-portable/
#: (content/make-tor-portable/contents+en.lrtopic.body)
msgid ""
"3. Download the Linux `.tar.xz` file and save it directly to your media."
-msgstr ""
+msgstr "3. 下载 Linux 的`.tar.xz`文件并将其直接保存到您的媒体中。"
#: https//tb-manual.torproject.org/make-tor-portable/
#: (content/make-tor-portable/contents+en.lrtopic.body)
msgid ""
"5. When the download is complete, extract the archive onto the media as "
"well."
-msgstr ""
+msgstr "5.下载完成后,也将存档解压缩到媒体上。"
#: lego/templates/banner.html:3 lego/templates/banner.html:5
#: templates/banner.html:3 templates/banner.html:5
msgid "Close banner"
-msgstr ""
+msgstr "关闭横幅"
#: lego/templates/banner.html:11 templates/banner.html:11
msgid "Tracking, surveillance, and censorship are widespread online."
1
0

[translation/tbmanual-contentspot] https://gitweb.torproject.org/translation.git/commit/?h=tbmanual-contentspot
by translation@torproject.org 06 Feb '20
by translation@torproject.org 06 Feb '20
06 Feb '20
commit dbd9df933516c23f4306e2c3df8494de8de81692
Author: Translation commit bot <translation(a)torproject.org>
Date: Thu Feb 6 05:50:10 2020 +0000
https://gitweb.torproject.org/translation.git/commit/?h=tbmanual-contentspot
---
contents+zh-CN.po | 101 +++++++++++++++++++++++++++---------------------------
1 file changed, 51 insertions(+), 50 deletions(-)
diff --git a/contents+zh-CN.po b/contents+zh-CN.po
index 83ccf5f5de..f37d63b17d 100644
--- a/contents+zh-CN.po
+++ b/contents+zh-CN.po
@@ -4,10 +4,10 @@
# erinm, 2019
# shenzhui007 <12231252(a)bjtu.edu.cn>, 2019
# YFdyh000 <yfdyh000(a)gmail.com>, 2019
-# ff98sha, 2019
# khi, 2020
-# Emma Peel, 2020
# Cloud P <heige.pcloud(a)outlook.com>, 2020
+# Emma Peel, 2020
+# ff98sha, 2020
#
msgid ""
msgstr ""
@@ -15,7 +15,7 @@ msgstr ""
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-01-15 15:58+CET\n"
"PO-Revision-Date: 2018-11-14 12:31+0000\n"
-"Last-Translator: Cloud P <heige.pcloud(a)outlook.com>, 2020\n"
+"Last-Translator: ff98sha, 2020\n"
"Language-Team: Chinese (China) (https://www.transifex.com/otf/teams/1519/zh_CN/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -376,7 +376,7 @@ msgstr "安装"
#: https//tb-manual.torproject.org/installation/
#: (content/installation/contents+en.lrtopic.description)
msgid "Installing Tor Browser"
-msgstr "正在安装Tor 浏览器"
+msgstr "正在安装 Tor 浏览器"
#: https//tb-manual.torproject.org/installation/
#: (content/installation/contents+en.lrtopic.body)
@@ -390,12 +390,12 @@ msgstr "Windows:"
msgid ""
"1. Navigate to the Tor Browser [download "
"page](https://www.torproject.org/download)."
-msgstr "1. 跳转至Tor 浏览器的[下载页](https://www.torproject.org/download)。"
+msgstr "1. 跳转至 Tor 浏览器的[下载页](https://www.torproject.org/download)。"
#: https//tb-manual.torproject.org/installation/
#: (content/installation/contents+en.lrtopic.body)
msgid "2. Download the Windows `.exe` file"
-msgstr "2. 下载Windows中的“.exe”可执行文件。"
+msgstr "2. 下载 Windows 中的“.exe”可执行文件。"
#: https//tb-manual.torproject.org/installation/
#: (content/installation/contents+en.lrtopic.body)
@@ -418,12 +418,12 @@ msgstr "4. 当下载完成后,双击“.exe”文件。完成安装向导。"
#: https//tb-manual.torproject.org/make-tor-portable/
#: (content/make-tor-portable/contents+en.lrtopic.body)
msgid "For macOS:"
-msgstr "对于macOS:"
+msgstr "对于 macOS:"
#: https//tb-manual.torproject.org/installation/
#: (content/installation/contents+en.lrtopic.body)
msgid "2. Download the macOS `.dmg` file"
-msgstr "2. 下载macOS的“.dmg”文件。"
+msgstr "2. 下载 macOS 的“.dmg”文件。"
#: https//tb-manual.torproject.org/installation/
#: (content/installation/contents+en.lrtopic.body)
@@ -442,7 +442,7 @@ msgstr "对于 GNU/Linux:"
#: https//tb-manual.torproject.org/installation/
#: (content/installation/contents+en.lrtopic.body)
msgid "2. Download the GNU/Linux `.tar.xz` file"
-msgstr "2. 下载GNU/Linux“.tar.xz”文件"
+msgstr "2. 下载 GNU/Linux 的“.tar.xz”文件"
#: https//tb-manual.torproject.org/installation/
#: (content/installation/contents+en.lrtopic.body)
@@ -456,12 +456,12 @@ msgstr "4. 当下载完成后,使用命令“tar -xf[TB archive]”解压文
msgid ""
"5. You'll need to tell your GNU/Linux that you want the ability to execute "
"shell scripts from the graphical interface."
-msgstr "5. 您将需要告诉您的GNU/Linux您想要从图形界面允许shell脚本。"
+msgstr "5. 您将需要告诉您的 NU/Linux 您想要从图形界面允许 shell 脚本。"
#: https//tb-manual.torproject.org/installation/
#: (content/installation/contents+en.lrtopic.body)
msgid "Navigate to the newly extracted Tor Browser directory."
-msgstr "导航至新解压出的Tor 浏览器的目录。"
+msgstr "导航至新解压出的 Tor 浏览器的目录。"
#: https//tb-manual.torproject.org/installation/
#: (content/installation/contents+en.lrtopic.body)
@@ -473,14 +473,14 @@ msgstr "右击 `start-tor-browser.desktop`,打开属性或优先级并更改
#: https//tb-manual.torproject.org/installation/
#: (content/installation/contents+en.lrtopic.body)
msgid "Double-click the icon to start up Tor Browser for the first time."
-msgstr "双击图标来第一次运行Tor 浏览器。"
+msgstr "双击图标来第一次运行 Tor 浏览器。"
#: https//tb-manual.torproject.org/installation/
#: (content/installation/contents+en.lrtopic.body)
msgid ""
"6. Alternatively, from inside the Tor Browser directory, you can also start "
"from the command line by running:"
-msgstr "6.或者,也可以从Tor 浏览器的目录中,通过运行以下命令从命令行启动:"
+msgstr "6.或者,也可以从 Tor 浏览器的目录中,通过运行以下命令从命令行启动:"
#: https//tb-manual.torproject.org/installation/
#: (content/installation/contents+en.lrtopic.body)
@@ -502,14 +502,14 @@ msgstr "了解如何初次使用 Tor 浏览器"
msgid ""
"When you run Tor Browser for the first time, you will see the Tor Network "
"Settings window."
-msgstr "首次运行Tor 浏览器时,您将看到Tor 网络设置窗口。"
+msgstr "首次运行 Tor 浏览器时,您将看到 Tor 网络设置窗口。"
#: https//tb-manual.torproject.org/running-tor-browser/
#: (content/running-tor-browser/contents+en.lrtopic.body)
msgid ""
"This offers you the option to connect directly to the Tor network, or to "
"configure Tor Browser for your connection."
-msgstr "这向您提供直接连接至Tor 网络,或为您的连接配置Tor 浏览器的选项。"
+msgstr "这向您提供直接连接至 Tor 网络,或为您的连接配置 Tor 浏览器的选项。"
#: https//tb-manual.torproject.org/running-tor-browser/
#: (content/running-tor-browser/contents+en.lrtopic.body)
@@ -528,13 +528,13 @@ msgstr "<img class=\"col-md-6\" src=\"../../static/images/connect.png\">"
msgid ""
"In most cases, choosing \"Connect\" will allow you to connect to the Tor "
"network without any further configuration."
-msgstr "在大多数情况下,选择“连接”将允许您无需其他配置直接连接至Tor 网络。"
+msgstr "在大多数情况下,选择“连接”将允许您无需其他配置直接连接至 Tor 网络。"
#: https//tb-manual.torproject.org/running-tor-browser/
#: (content/running-tor-browser/contents+en.lrtopic.body)
msgid ""
"Once clicked, a status bar will appear, showing Tor’s connection progress."
-msgstr "一当点击,一个状态栏会显示,展示Tor的连接状态。"
+msgstr "一当点击,一个状态栏会显示,展示 Tor 的连接状态。"
#: https//tb-manual.torproject.org/running-tor-browser/
#: (content/running-tor-browser/contents+en.lrtopic.body)
@@ -612,7 +612,7 @@ msgstr "Tor 网络被拦截该怎么做"
msgid ""
"Direct access to the Tor network may sometimes be blocked by your Internet "
"Service Provider or by a government."
-msgstr "您的Internet服务提供商或政府有时可能会阻止直接访问Tor 网络。"
+msgstr "您的互联网服务提供商或政府有时可能会阻止直接访问 Tor 网络。"
#: https//tb-manual.torproject.org/circumvention/
#: (content/circumvention/contents+en.lrtopic.body)
@@ -670,7 +670,8 @@ msgid ""
"bridges by Internet scanning. obfs4 bridges are less likely to be blocked "
"than its predecessor, obfs3 bridges."
msgstr ""
-"obfs4使Tor的流量看起来是随机的,并且还防止检查程序通过Internet扫描找到网桥。 与之前的obfs3桥相比,obfs4桥被阻塞的可能性较小。"
+"obfs4 使 Tor 的流量看起来是随机的,并且还防止检查程序通过互联网扫描找到网桥。 与之前的 obfs3 网桥相比,obfs4 "
+"网桥被阻塞的可能性较小。"
#: https//tb-manual.torproject.org/circumvention/
#: (content/circumvention/contents+en.lrtopic.body)
@@ -688,8 +689,7 @@ msgid ""
"meek transports all make it look like you are browsing a major web site "
"instead of using Tor. meek-azure makes it look like you are using a "
"Microsoft web site."
-msgstr ""
-"meek transports all使您看起来像在浏览主要网站,而不是使用Tor。 meek-azure使看起来像您在使用Microsoft网站。"
+msgstr "meek 方式使您看起来像在浏览主要网站,而不是使用 Tor。 meek-azure 使您看起来像在使用 Microsoft 网站。"
#: https//tb-manual.torproject.org/circumvention/
#: (content/circumvention/contents+en.lrtopic.body)
@@ -731,7 +731,7 @@ msgid ""
"To use a pluggable transport, click 'Configure' when starting Tor Browser "
"for the first time. In the window that appears, from the drop-down menu, "
"select whichever pluggable transport you'd like to use."
-msgstr "要使用可插拔传输,请在首次启动Tor 浏览器时单击“配置”。 在出现的窗口中,从下拉菜单中选择您要使用的任何可插拔传输器。"
+msgstr "要使用可插拔传输,请在首次启动 Tor 浏览器时单击“配置”。 在出现的窗口中,从下拉菜单中选择您要使用的任何可插拔传输器。"
#: https//tb-manual.torproject.org/circumvention/
#: (content/circumvention/contents+en.lrtopic.body)
@@ -741,7 +741,7 @@ msgid ""
"'Use a bridge', and from the drop-down menu 'Select a built-in bridge', "
"choose whichever pluggable transport you'd like to use."
msgstr ""
-"或者,如果您正在运行Tor 浏览器,请在汉堡菜单中单击“首选项”,然后在侧栏中单击“ Tor”。 "
+"或者,如果您正在运行 Tor 浏览器,请在汉堡菜单中单击“首选项”,然后在侧栏中单击“Tor”。 "
"在“网桥”部分中,选中“使用网桥”,然后从下拉菜单“选择内置网桥”中选择您要使用的可插拔传输工具。"
#: https//tb-manual.torproject.org/circumvention/
@@ -761,7 +761,7 @@ msgstr "### 我该使用哪种传输方式?"
msgid ""
"Each of the transports listed in Tor Launcher’s menu works in a different "
"way, and their effectiveness depends on your individual circumstances."
-msgstr "Tor Launcher菜单中列出的每种传输方式都以不同的方式工作,其有效性取决于您的具体情况。"
+msgstr "Tor 启动器的菜单中列出的每种传输方式都以不同的方式工作,其有效性取决于您的具体情况。"
#: https//tb-manual.torproject.org/circumvention/
#: (content/circumvention/contents+en.lrtopic.body)
@@ -801,7 +801,7 @@ msgstr "大多数可插拔传输,如 obfs4,依赖于使用“网桥”中继
msgid ""
"Most [Pluggable Transports](/circumvention), such as obfs4, rely on the use "
"of “bridge” relays."
-msgstr "大多数[可插拔传输](/circumvention),比如说obfs4,依赖于“网桥”中继。"
+msgstr "大多数[可插拔传输](/circumvention),比如 obfs4,依赖于“网桥”中继。"
#: https//tb-manual.torproject.org/bridges/
#: (content/bridges/contents+en.lrtopic.body)
@@ -817,7 +817,7 @@ msgid ""
"Using bridges in combination with pluggable transports helps to disguise the"
" fact that you are using Tor, but may slow down the connection compared to "
"using ordinary Tor relays."
-msgstr "结合使用桥和可插拔传输器有助于掩盖您正在使用Tor的事实,但与使用普通Tor中继相比,可能会减慢连接速度。"
+msgstr "结合使用网桥和可插拔传输器有助于掩盖您正在使用 Tor 的事实,但与使用普通 Tor 中继相比,可能会减慢连接速度。"
#: https//tb-manual.torproject.org/bridges/
#: (content/bridges/contents+en.lrtopic.body)
@@ -853,7 +853,7 @@ msgstr "* 使用 Gmail 或 Riseup 的邮箱服务发送电子邮件至 bridges@t
#: https//tb-manual.torproject.org/bridges/
#: (content/bridges/contents+en.lrtopic.body)
msgid "* Use MOAT to fetch bridges from within Tor Browser."
-msgstr "*使用MOAT从Tor 浏览器中获取网桥。"
+msgstr "*使用 MOAT 从 Tor 浏览器中获取网桥。"
#: https//tb-manual.torproject.org/bridges/
#: (content/bridges/contents+en.lrtopic.body)
@@ -872,7 +872,7 @@ msgstr "当您首次启动 Tor 浏览器时,点击“配置”来打开洋葱
msgid ""
"Otherwise, click on 'Preferences' in the hamburger menu (main menu) and then"
" on 'Tor' in the sidebar."
-msgstr "否则,请在汉堡菜单(主菜单)中单击“首选项”,然后在侧栏中单击“ Tor”。"
+msgstr "否则,请在菜单中单击“首选项”,然后在侧栏中单击“Tor”。"
#: https//tb-manual.torproject.org/bridges/
#: (content/bridges/contents+en.lrtopic.body)
@@ -885,7 +885,7 @@ msgstr "在洋葱网络设置窗口中,选择“Tor 在我的国家访问受
msgid ""
"Then, select 'Request a bridge from torproject.org' and click 'Request a "
"bridge...'"
-msgstr "然后选择“从torproject.org申请一个网桥”并点击“申请网桥...”"
+msgstr "然后选择“从 torproject.org 申请一个网桥”并点击“申请网桥...”"
#: https//tb-manual.torproject.org/bridges/
#: (content/bridges/contents+en.lrtopic.body)
@@ -921,8 +921,8 @@ msgid ""
"hamburger menu (main menu) and then on 'Tor' in the sidebar to access these "
"options."
msgstr ""
-"如果您是第一次启动Tor 浏览器,请单击“配置”以打开Tor网络设置窗口。 否则,请在汉堡菜单(主菜单)中单击“首选项”,然后在侧栏中单击“ "
-"Tor”以访问这些选项。"
+"如果您是第一次启动 Tor 浏览器,请单击“配置”以打开 Tor 网络设置窗口。 "
+"否则,请在主菜单中单击“首选项”,然后在侧栏中单击“Tor”以访问这些选项。"
#: https//tb-manual.torproject.org/bridges/
#: (content/bridges/contents+en.lrtopic.body)
@@ -1099,7 +1099,7 @@ msgstr "<img class=\"col-md-6\" src=\"../../static/images/new_identity.png\">"
msgid ""
"Tor Browser features “New Identity” and “New Tor Circuit for this Site” "
"options. There are also located in the main menu (hamburger menu)."
-msgstr "Tor 浏览器具有“新身份”和“此站点的新Tor线路”选项。 也位于主菜单(汉堡菜单)中。"
+msgstr "Tor 浏览器具有“新身份”和“此站点的新 Tor 线路”选项。 也位于主菜单中。"
#: https//tb-manual.torproject.org/managing-identities/
#: (content/managing-identities/contents+en.lrtopic.body)
@@ -1316,7 +1316,7 @@ msgstr "你可以禁用某些互联网功能来进一步提高安全性和匿名
msgid ""
"You can do this by increasing Tor Browser's Security Levels in the shield "
"menu."
-msgstr "您可以在通过在盾牌菜单里提高Tor 浏览器的安全等级来做到这一点。"
+msgstr "您可以在通过在盾牌菜单里提高 Tor 浏览器的安全等级来做到这一点。"
#: https//tb-manual.torproject.org/security-settings/
#: (content/security-settings/contents+en.lrtopic.body)
@@ -1484,7 +1484,7 @@ msgstr "<img width=\"400\" src=\"../../static/images/update1.png\" />"
msgid ""
"When you are prompted to update Tor Browser, click on hamburger menu (main "
"menu), then select “Restart to update Tor browser”."
-msgstr "当提示您更新Tor 浏览器时,单击汉堡菜单(主菜单),然后选择“重新启动以更新Tor 浏览器”。"
+msgstr "当提示您更新 Tor 浏览器时,单击主菜单,然后选择“重新启动以更新 Tor 浏览器”。"
#: https//tb-manual.torproject.org/updating/
#: (content/updating/contents+en.lrtopic.body)
@@ -1496,7 +1496,7 @@ msgstr "<img width=\"500\" src=\"../../static/images/update4.png\" />"
msgid ""
"Wait for the update to download and install, then Tor Browser will restart "
"itself. You will now be running the latest version."
-msgstr "等待更新下载并安装,然后Tor 浏览器将自行重启。 您现在将运行最新版本。"
+msgstr "等待更新下载并安装,然后 Tor 浏览器将自行重启。 您现在将运行最新版本。"
#: https//tb-manual.torproject.org/updating/
#: (content/updating/contents+en.lrtopic.body)
@@ -1683,8 +1683,9 @@ msgid ""
"control the JavaScript (and other scripts) that runs on individual web "
"pages, or block it entirely."
msgstr ""
-"Tor 浏览器包含一个名为NoScript的插件。 可以通过汉堡菜单(主菜单)上的“首选项”进行访问,然后选择“自定义”并将“ "
-"S”图标拖到窗口的右上角。 NoScript允许您控制在单个网页上运行的JavaScript(和其他脚本),或完全阻止它。"
+"Tor 浏览器包含一个名为 NoScript 的插件。 "
+"可以通过汉堡菜单(主菜单)上的“首选项”进行访问,然后选择“自定义”并将“S”图标拖到窗口的右上角。 NoScript "
+"允许您控制在单个网页上运行的JavaScript(和其他脚本),或完全阻止它。"
#: https//tb-manual.torproject.org/plugins/
#: (content/plugins/contents+en.lrtopic.body)
@@ -1696,9 +1697,9 @@ msgid ""
" displaying correctly, so Tor Browser’s default setting is to allow all "
"websites to run scripts in \"Standard\" mode."
msgstr ""
-"在网络浏览中需要高度安全性的用户应将Tor 浏览器的[安全级别](../ security-settings "
-"/)设置为“更安全”(对非HTTPS网站禁用JavaScript)或“最安全”( 对于所有网站禁用JavaScript)。 "
-"但是,禁用JavaScript会阻止许多网站正确显示,因此Tor 浏览器的默认设置是允许所有网站以“标准”模式运行脚本。"
+"在网络浏览中需要高度安全性的用户应将 Tor 浏览器的[安全级别](../ security-settings /)设置为“更安全”(对非 HTTPS "
+"网站禁用 JavaScript)或“最安全”( 对于所有网站禁用 JavaScript)。 但是,禁用 JavaScript "
+"会阻止许多网站正确显示,因此 Tor 浏览器的默认设置是允许所有网站以“标准”模式运行脚本。"
#: https//tb-manual.torproject.org/plugins/
#: (content/plugins/contents+en.lrtopic.body)
@@ -1949,26 +1950,26 @@ msgstr ""
#: https//tb-manual.torproject.org/make-tor-portable/
#: (content/make-tor-portable/contents+en.lrtopic.title)
msgid "MAKE TOR BROWSER PORTABLE"
-msgstr "使Tor 浏览器更便携"
+msgstr "使 Tor 浏览器更便携"
#: https//tb-manual.torproject.org/make-tor-portable/
#: (content/make-tor-portable/contents+en.lrtopic.description)
msgid "How to install Tor Browser onto removable media"
-msgstr "如何在一个可移除的媒介上安装Tor 浏览器"
+msgstr "如何在一个可移除的媒介上安装 Tor 浏览器"
#: https//tb-manual.torproject.org/make-tor-portable/
#: (content/make-tor-portable/contents+en.lrtopic.body)
msgid ""
"If preferred, Tor Browser may be made portable by extracting it from its "
"archive directly onto removable media such as a USB stick or SD card."
-msgstr "如果愿意,可以通过将Tor 浏览器从其存档直接提取到可移动媒体(例如USB记忆棒或SD卡)上,从而使其具有便携性。"
+msgstr "如果愿意,可以通过将 Tor 浏览器从其存档直接提取到可移动媒体(例如 USB 记忆棒或 SD 卡)上,从而使其具有便携性。"
#: https//tb-manual.torproject.org/make-tor-portable/
#: (content/make-tor-portable/contents+en.lrtopic.body)
msgid ""
"It is recommended to use writable media so that Tor Browser can be updated "
"as required."
-msgstr "建议使用可写媒体,以便可以根据需要更新Tor 浏览器。"
+msgstr "建议使用可写媒体,以便可以根据需要更新 Tor 浏览器。"
#: https//tb-manual.torproject.org/make-tor-portable/
#: (content/make-tor-portable/contents+en.lrtopic.body)
@@ -1982,13 +1983,13 @@ msgstr "1. 插入您的可插拔存储器并格式化它。任何的文件系统
msgid ""
"2. Navigate to the Tor Browser [download "
"page](https://torproject.org/download)."
-msgstr "2. 访问Tor 浏览器[下载页面](https://torproject.org/download)。"
+msgstr "2. 访问 Tor 浏览器[下载页面](https://torproject.org/download)。"
#: https//tb-manual.torproject.org/make-tor-portable/
#: (content/make-tor-portable/contents+en.lrtopic.body)
msgid ""
"3. Download the Windows `.exe` file and save it directly to your media."
-msgstr "3. 下载Windows的“.exe”文件并将其直接保存进您的储存器中。"
+msgstr "3. 下载 Windows 的“.exe”文件并将其直接保存进您的储存器中。"
#: https//tb-manual.torproject.org/make-tor-portable/
#: (content/make-tor-portable/contents+en.lrtopic.body)
@@ -2010,19 +2011,19 @@ msgstr "5. 当下载完成后,点击“.exe”文件并开始安装进程。"
msgid ""
"6. When the installer asks where to install Tor Browser, select your "
"removable media."
-msgstr "6. 当安装程序询问Tor 浏览器的安装位置时,选择您的可插拔存储器。"
+msgstr "6. 当安装程序询问 Tor 浏览器的安装位置时,选择您的可插拔存储器。"
#: https//tb-manual.torproject.org/make-tor-portable/
#: (content/make-tor-portable/contents+en.lrtopic.body)
msgid ""
"1. Plug in your removable media and format it. You *must* use macOS Extended"
" (Journaled) format."
-msgstr "1. 插入可移动媒体并对其进行格式化。 您*必须*使用macOS扩展(日志式)格式。"
+msgstr "1. 插入可移动媒体并对其进行格式化。 您*必须*使用 macOS 扩展(日志式)格式。"
#: https//tb-manual.torproject.org/make-tor-portable/
#: (content/make-tor-portable/contents+en.lrtopic.body)
msgid "3. Download the macOS `.dmg` file and save it directly to your media."
-msgstr "3.下载macOS .dmg文件并将其直接保存到您的媒体中。"
+msgstr "3.下载 macOS 的.dmg文件并将其直接保存到您的媒体中。"
#: https//tb-manual.torproject.org/make-tor-portable/
#: (content/make-tor-portable/contents+en.lrtopic.body)
@@ -2035,7 +2036,7 @@ msgstr "5.下载完成后,单击`.dmg`文件并开始安装过程。"
#: (content/make-tor-portable/contents+en.lrtopic.body)
msgid ""
"3. Download the Linux `.tar.xz` file and save it directly to your media."
-msgstr "3. 下载Linux`.tar.xz`文件并将其直接保存到您的媒体中。"
+msgstr "3. 下载 Linux 的`.tar.xz`文件并将其直接保存到您的媒体中。"
#: https//tb-manual.torproject.org/make-tor-portable/
#: (content/make-tor-portable/contents+en.lrtopic.body)
1
0

[translation/torbutton-torbuttonproperties_completed] https://gitweb.torproject.org/translation.git/commit/?h=torbutton-torbuttonproperties_completed
by translation@torproject.org 06 Feb '20
by translation@torproject.org 06 Feb '20
06 Feb '20
commit ff8dc36f95d4971c16d3028ad23e622b95faff36
Author: Translation commit bot <translation(a)torproject.org>
Date: Thu Feb 6 05:21:17 2020 +0000
https://gitweb.torproject.org/translation.git/commit/?h=torbutton-torbutton…
---
zh-CN/torbutton.properties | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/zh-CN/torbutton.properties b/zh-CN/torbutton.properties
index a7f7387040..72b5b3730c 100644
--- a/zh-CN/torbutton.properties
+++ b/zh-CN/torbutton.properties
@@ -61,10 +61,10 @@ pageInfo_OnionEncryption=连接已经被加密(洋葱服务)
# Onion services strings. Strings are kept here for ease of translation.
# LOCALIZATION NOTE: %S will be replaced with the .onion address.
-# onionServices.clientAuthMissing=Tor onion service missing client authorization
-# onionServices.authPrompt.description=%S is requesting your private key.
-# onionServices.authPrompt.keyPlaceholder=Enter your private key for this onion service
+onionServices.clientAuthMissing=Tor 洋葱服务客户端认证失败
+onionServices.authPrompt.description=%S 需要您的私钥
+onionServices.authPrompt.keyPlaceholder=输入您的私钥来使用此洋葱服务
onionServices.authPrompt.done=完成
onionServices.authPrompt.doneAccessKey=天
-# onionServices.authPrompt.invalidKey=Please enter a valid key (52 base32 characters or 44 base64 characters)
-# onionServices.authPrompt.failedToSetKey=Unable to configure Tor with your key
+onionServices.authPrompt.invalidKey=请输入一个合法的密钥(52位 base32 字符或44位 base64 字符)
+onionServices.authPrompt.failedToSetKey=无法使用您的密钥来配置 Tor
1
0

[translation/torbutton-torbuttonproperties] https://gitweb.torproject.org/translation.git/commit/?h=torbutton-torbuttonproperties
by translation@torproject.org 06 Feb '20
by translation@torproject.org 06 Feb '20
06 Feb '20
commit bb0a2db2e3a898566fbdec515c5b9c13489076f3
Author: Translation commit bot <translation(a)torproject.org>
Date: Thu Feb 6 05:21:11 2020 +0000
https://gitweb.torproject.org/translation.git/commit/?h=torbutton-torbutton…
---
zh-CN/torbutton.properties | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/zh-CN/torbutton.properties b/zh-CN/torbutton.properties
index ca45638797..72b5b3730c 100644
--- a/zh-CN/torbutton.properties
+++ b/zh-CN/torbutton.properties
@@ -63,8 +63,8 @@ pageInfo_OnionEncryption=连接已经被加密(洋葱服务)
# LOCALIZATION NOTE: %S will be replaced with the .onion address.
onionServices.clientAuthMissing=Tor 洋葱服务客户端认证失败
onionServices.authPrompt.description=%S 需要您的私钥
-onionServices.authPrompt.keyPlaceholder=键入您的私人密钥来使用此洋葱服务
+onionServices.authPrompt.keyPlaceholder=输入您的私钥来使用此洋葱服务
onionServices.authPrompt.done=完成
onionServices.authPrompt.doneAccessKey=天
-onionServices.authPrompt.invalidKey=请键入一个合法的密钥(52位base32字符或44位base64字符)
-onionServices.authPrompt.failedToSetKey=无法使用您的密钥来配置Tor
+onionServices.authPrompt.invalidKey=请输入一个合法的密钥(52位 base32 字符或44位 base64 字符)
+onionServices.authPrompt.failedToSetKey=无法使用您的密钥来配置 Tor
1
0

[tor-browser-build/maint-9.0] Bug 32891: Pick up new default bridge
by sysrqb@torproject.org 06 Feb '20
by sysrqb@torproject.org 06 Feb '20
06 Feb '20
commit 00fcc3970b4f0ebd924890cda54fa3ab347694a6
Author: Matthew Finkel <sysrqb(a)torproject.org>
Date: Wed Feb 5 00:30:06 2020 +0000
Bug 32891: Pick up new default bridge
---
projects/tor-android-service/config | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/projects/tor-android-service/config b/projects/tor-android-service/config
index b65c657..b0dc4b0 100644
--- a/projects/tor-android-service/config
+++ b/projects/tor-android-service/config
@@ -1,7 +1,7 @@
# vim: filetype=yaml sw=2
version: '[% c("abbrev") %]'
filename: '[% project %]-[% c("version") %]-[% c("var/build_id") %]'
-git_hash: 4a81e5806f36e7d0bf9492437d824599ecf4ff43
+git_hash: 18ba7d2780b1d5194cc5854d703655f6c9d3d196
git_url: https://git.torproject.org/tor-android-service.git
git_submodule: 1
1
0

[tor-browser-build/maint-9.0] Bug 32053: Fix LLVM reproducibility issues
by sysrqb@torproject.org 06 Feb '20
by sysrqb@torproject.org 06 Feb '20
06 Feb '20
commit 0fbb6fa8a942e8243130f8c68616a28d4181a090
Author: Georg Koppen <gk(a)torproject.org>
Date: Fri Dec 6 13:43:24 2019 +0000
Bug 32053: Fix LLVM reproducibility issues
This patch contains two backports for reproducibility issues found and
fixed in LLVM's optimization code.
The patch from bug 42574 might not be necessary in our context as I only
witnessed problems when compiling Stylo with an older Rust (1.32.0) and
then omptimizing with LLVM 8. However, it's hard to exclude any
mismatching builds we encountered so far from being affected by that
issue, so I think it is safer to backport that patch as well.
Bug 43909 is an issue we and Mozilla definitely hit and very likely
responsible for at least the vast majority of different builds we got
over the course of the last weeks and months. Many thanks to Alex
Crichton for the invaluable help in tracking this issue down.
---
projects/clang/42574.patch | 236 ++++++++++++++++++++++++++++++++++++++++++
projects/clang/43909.patch | 252 +++++++++++++++++++++++++++++++++++++++++++++
projects/clang/build | 4 +
projects/clang/config | 2 +
projects/rust/42574.patch | 236 ++++++++++++++++++++++++++++++++++++++++++
projects/rust/43909.patch | 252 +++++++++++++++++++++++++++++++++++++++++++++
projects/rust/build | 7 ++
projects/rust/config | 2 +
8 files changed, 991 insertions(+)
diff --git a/projects/clang/42574.patch b/projects/clang/42574.patch
new file mode 100644
index 0000000..285d254
--- /dev/null
+++ b/projects/clang/42574.patch
@@ -0,0 +1,236 @@
+From 3757213db371dcea53cae357cf9c56d1b0604f98 Mon Sep 17 00:00:00 2001
+From: Alina Sbirlea <asbirlea(a)google.com>
+Date: Fri, 12 Jul 2019 22:30:30 +0000
+Subject: [PATCH] [MemorySSA] Use SetVector to avoid nondeterminism.
+
+Summary:
+Use a SetVector for DeadBlockSet.
+Resolves PR42574.
+
+Reviewers: george.burgess.iv, uabelho, dblaikie
+
+Subscribers: jlebar, Prazek, mgrang, llvm-commits
+
+Tags: #llvm
+
+Differential Revision: https://reviews.llvm.org/D64601
+
+llvm-svn: 365970
+
+diff --git a/llvm/include/llvm/Analysis/MemorySSAUpdater.h b/llvm/include/llvm/Analysis/MemorySSAUpdater.h
+index 169d5bd9fa8..276620bd445 100644
+--- a/llvm/include/llvm/Analysis/MemorySSAUpdater.h
++++ b/llvm/include/llvm/Analysis/MemorySSAUpdater.h
+@@ -32,6 +32,7 @@
+ #ifndef LLVM_ANALYSIS_MEMORYSSAUPDATER_H
+ #define LLVM_ANALYSIS_MEMORYSSAUPDATER_H
+
++#include "llvm/ADT/SetVector.h"
+ #include "llvm/ADT/SmallPtrSet.h"
+ #include "llvm/ADT/SmallSet.h"
+ #include "llvm/ADT/SmallVector.h"
+@@ -239,7 +240,7 @@ public:
+ /// Deleted blocks still have successor info, but their predecessor edges and
+ /// Phi nodes may already be updated. Instructions in DeadBlocks should be
+ /// deleted after this call.
+- void removeBlocks(const SmallPtrSetImpl<BasicBlock *> &DeadBlocks);
++ void removeBlocks(const SmallSetVector<BasicBlock *, 8> &DeadBlocks);
+
+ /// Get handle on MemorySSA.
+ MemorySSA* getMemorySSA() const { return MSSA; }
+diff --git a/llvm/lib/Analysis/MemorySSAUpdater.cpp b/llvm/lib/Analysis/MemorySSAUpdater.cpp
+index 6c817d20368..a6c7142a697 100644
+--- a/llvm/lib/Analysis/MemorySSAUpdater.cpp
++++ b/llvm/lib/Analysis/MemorySSAUpdater.cpp
+@@ -1101,7 +1101,7 @@ void MemorySSAUpdater::removeMemoryAccess(MemoryAccess *MA) {
+ }
+
+ void MemorySSAUpdater::removeBlocks(
+- const SmallPtrSetImpl<BasicBlock *> &DeadBlocks) {
++ const SmallSetVector<BasicBlock *, 8> &DeadBlocks) {
+ // First delete all uses of BB in MemoryPhis.
+ for (BasicBlock *BB : DeadBlocks) {
+ Instruction *TI = BB->getTerminator();
+diff --git a/llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp b/llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp
+index 2e5927f9a06..f464df26a02 100644
+--- a/llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp
++++ b/llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp
+@@ -388,8 +388,8 @@ private:
+ void deleteDeadLoopBlocks() {
+ DomTreeUpdater DTU(DT, DomTreeUpdater::UpdateStrategy::Eager);
+ if (MSSAU) {
+- SmallPtrSet<BasicBlock *, 8> DeadLoopBlocksSet(DeadLoopBlocks.begin(),
+- DeadLoopBlocks.end());
++ SmallSetVector<BasicBlock *, 8> DeadLoopBlocksSet(DeadLoopBlocks.begin(),
++ DeadLoopBlocks.end());
+ MSSAU->removeBlocks(DeadLoopBlocksSet);
+ }
+ for (auto *BB : DeadLoopBlocks) {
+diff --git a/llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp b/llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp
+index 5a67178cef3..814cf814989 100644
+--- a/llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp
++++ b/llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp
+@@ -1436,8 +1436,8 @@ deleteDeadClonedBlocks(Loop &L, ArrayRef<BasicBlock *> ExitBlocks,
+
+ // Remove all MemorySSA in the dead blocks
+ if (MSSAU) {
+- SmallPtrSet<BasicBlock *, 16> DeadBlockSet(DeadBlocks.begin(),
+- DeadBlocks.end());
++ SmallSetVector<BasicBlock *, 8> DeadBlockSet(DeadBlocks.begin(),
++ DeadBlocks.end());
+ MSSAU->removeBlocks(DeadBlockSet);
+ }
+
+@@ -1455,7 +1455,7 @@ static void deleteDeadBlocksFromLoop(Loop &L,
+ MemorySSAUpdater *MSSAU) {
+ // Find all the dead blocks tied to this loop, and remove them from their
+ // successors.
+- SmallPtrSet<BasicBlock *, 16> DeadBlockSet;
++ SmallSetVector<BasicBlock *, 8> DeadBlockSet;
+
+ // Start with loop/exit blocks and get a transitive closure of reachable dead
+ // blocks.
+diff --git a/llvm/lib/Transforms/Utils/Local.cpp b/llvm/lib/Transforms/Utils/Local.cpp
+index 499e611acb5..83dabcd7952 100644
+--- a/llvm/lib/Transforms/Utils/Local.cpp
++++ b/llvm/lib/Transforms/Utils/Local.cpp
+@@ -2211,7 +2211,7 @@ bool llvm::removeUnreachableBlocks(Function &F, LazyValueInfo *LVI,
+ assert(Reachable.size() < F.size());
+ NumRemoved += F.size()-Reachable.size();
+
+- SmallPtrSet<BasicBlock *, 16> DeadBlockSet;
++ SmallSetVector<BasicBlock *, 8> DeadBlockSet;
+ for (Function::iterator I = ++F.begin(), E = F.end(); I != E; ++I) {
+ auto *BB = &*I;
+ if (Reachable.count(BB))
+diff --git a/llvm/test/Analysis/MemorySSA/nondeterminism.ll b/llvm/test/Analysis/MemorySSA/nondeterminism.ll
+new file mode 100644
+index 00000000000..0bb3df30b58
+--- /dev/null
++++ b/llvm/test/Analysis/MemorySSA/nondeterminism.ll
+@@ -0,0 +1,122 @@
++; RUN: opt -simplifycfg -enable-mssa-loop-dependency -S --preserve-ll-uselistorder %s | FileCheck %s
++; REQUIRES: x86-registered-target
++; CHECK-LABEL: @n
++; CHECK: uselistorder i16 0, { 3, 2, 4, 1, 5, 0, 6 }
++
++; Note: test was added in an effort to ensure determinism when updating memoryssa. See PR42574.
++; If the uselistorder check becomes no longer relevant, the test can be disabled or removed.
++
++%rec9 = type { i16, i32, i32 }
++
++@a = global [1 x [1 x %rec9]] zeroinitializer
++
++define i16 @n() {
++ br label %..split_crit_edge
++
++..split_crit_edge: ; preds = %0
++ br label %.split
++
++bb4.us4: ; preds = %bb2.split.us32, %bb6.us28
++ %i.4.01.us5 = phi i16 [ %_tmp49.us30, %bb6.us28 ]
++ br label %g.exit4.us21
++
++bb1.i.us14: ; preds = %bb4.us4
++ br label %g.exit4.us21
++
++g.exit4.us21: ; preds = %bb1.i.us14, %g.exit4.critedge.us9
++ %i.4.02.us22 = phi i16 [ %i.4.01.us5, %bb4.us4 ], [ %i.4.01.us5, %bb1.i.us14 ]
++ br label %bb6.us28
++
++bb5.us26: ; preds = %g.exit4.us21
++ br label %bb6.us28
++
++bb6.us28: ; preds = %bb5.us26, %g.exit4.us21
++ %i.4.03.us29 = phi i16 [ %i.4.02.us22, %bb5.us26 ], [ %i.4.02.us22, %g.exit4.us21 ]
++ %_tmp49.us30 = add nuw nsw i16 %i.4.03.us29, 1
++ br label %bb4.us4
++
++bb4.us.us: ; preds = %bb2.split.us.us, %bb6.us.us
++ %i.4.01.us.us = phi i16 [ %_tmp49.us.us, %bb6.us.us ]
++ br label %bb1.i.us.us
++
++bb1.i.us.us: ; preds = %bb4.us.us
++ br label %g.exit4.us.us
++
++g.exit4.us.us: ; preds = %bb1.i.us.us, %g.exit4.critedge.us.us
++ %i.4.02.us.us = phi i16 [ %i.4.01.us.us, %bb1.i.us.us ]
++ br label %bb5.us.us
++
++bb5.us.us: ; preds = %g.exit4.us.us
++ br label %bb6.us.us
++
++bb6.us.us: ; preds = %bb5.us.us, %g.exit4.us.us
++ %i.4.03.us.us = phi i16 [ %i.4.02.us.us, %bb5.us.us ]
++ %_tmp49.us.us = add nuw nsw i16 %i.4.03.us.us, 1
++ br label %bb4.us.us
++
++
++.split: ; preds = %..split_crit_edge
++ br label %bb2
++
++bb2: ; preds = %.split, %bb7
++ %h.3.0 = phi i16 [ undef, %.split ], [ %_tmp53, %bb7 ]
++ br label %bb2.bb2.split_crit_edge
++
++bb2.bb2.split_crit_edge: ; preds = %bb2
++ br label %bb2.split
++
++bb2.split.us: ; preds = %bb2
++ br label %bb4.us
++
++bb4.us: ; preds = %bb6.us, %bb2.split.us
++ %i.4.01.us = phi i16 [ 0, %bb2.split.us ]
++ br label %bb1.i.us
++
++g.exit4.critedge.us: ; preds = %bb4.us
++ br label %g.exit4.us
++
++bb1.i.us: ; preds = %bb4.us
++ br label %g.exit4.us
++
++g.exit4.us: ; preds = %bb1.i.us, %g.exit4.critedge.us
++ %i.4.02.us = phi i16 [ %i.4.01.us, %g.exit4.critedge.us ], [ %i.4.01.us, %bb1.i.us ]
++ br label %bb5.us
++
++bb5.us: ; preds = %g.exit4.us
++ br label %bb7
++
++bb2.split: ; preds = %bb2.bb2.split_crit_edge
++ br label %bb4
++
++bb4: ; preds = %bb2.split, %bb6
++ %i.4.01 = phi i16 [ 0, %bb2.split ]
++ %_tmp16 = getelementptr [1 x [1 x %rec9]], [1 x [1 x %rec9]]* @a, i16 0, i16 %h.3.0, i16 %i.4.01, i32 0
++ %_tmp17 = load i16, i16* %_tmp16, align 1
++ br label %g.exit4.critedge
++
++bb1.i: ; preds = %bb4
++ br label %g.exit4
++
++g.exit4.critedge: ; preds = %bb4
++ %_tmp28.c = getelementptr [1 x [1 x %rec9]], [1 x [1 x %rec9]]* @a, i16 0, i16 %h.3.0, i16 %i.4.01, i32 1
++ %_tmp29.c = load i32, i32* %_tmp28.c, align 1
++ %_tmp30.c = trunc i32 %_tmp29.c to i16
++ br label %g.exit4
++
++g.exit4: ; preds = %g.exit4.critedge, %bb1.i
++ %i.4.02 = phi i16 [ %i.4.01, %g.exit4.critedge ], [ %i.4.01, %bb1.i ]
++ %_tmp41 = getelementptr [1 x [1 x %rec9]], [1 x [1 x %rec9]]* @a, i16 0, i16 %h.3.0, i16 %i.4.02, i32 2
++ br label %bb6
++
++bb5: ; preds = %g.exit4
++ br label %bb6
++
++bb6: ; preds = %bb5, %g.exit4
++ %i.4.03 = phi i16 [ %i.4.02, %bb5 ], [ %i.4.02, %g.exit4 ]
++ %_tmp49 = add nuw nsw i16 %i.4.03, 1
++ br label %bb7
++
++bb7: ; preds = %bb7.us-lcssa.us, %bb7.us-lcssa
++ %_tmp53 = add nsw i16 %h.3.0, 1
++ br label %bb2
++}
+--
+2.24.0
+
diff --git a/projects/clang/43909.patch b/projects/clang/43909.patch
new file mode 100644
index 0000000..78d2a75
--- /dev/null
+++ b/projects/clang/43909.patch
@@ -0,0 +1,252 @@
+From c95310f2d4fd3c88241c3b5d6dbf6251d34a3256 Mon Sep 17 00:00:00 2001
+From: Nikita Popov <nikita.ppv(a)gmail.com>
+Date: Sat, 16 Nov 2019 16:22:18 +0100
+Subject: [PATCH] Restructure caching
+
+Variant on D70103. The caching is switched to always use a BB to
+cache entry map, which then contains per-value caches. A separate
+set contains value handles with a deletion callback. This allows us
+to properly invalidate overdefined values.
+
+A possible alternative would be to always cache by value first and
+have per-BB maps/sets in the each cache entry. In that case we could
+use a ValueMap and would avoid the separate value handle set. I went
+with the BB indexing at the top level to make it easier to integrate
+D69914, but possibly that's not the right choice.
+
+Differential Revision: https://reviews.llvm.org/D70376
+
+diff --git a/llvm/lib/Analysis/LazyValueInfo.cpp b/llvm/lib/Analysis/LazyValueInfo.cpp
+index 110c085d3f3..aa6862cb588 100644
+--- a/llvm/lib/Analysis/LazyValueInfo.cpp
++++ b/llvm/lib/Analysis/LazyValueInfo.cpp
+@@ -133,12 +133,9 @@ namespace {
+ /// A callback value handle updates the cache when values are erased.
+ class LazyValueInfoCache;
+ struct LVIValueHandle final : public CallbackVH {
+- // Needs to access getValPtr(), which is protected.
+- friend struct DenseMapInfo<LVIValueHandle>;
+-
+ LazyValueInfoCache *Parent;
+
+- LVIValueHandle(Value *V, LazyValueInfoCache *P)
++ LVIValueHandle(Value *V, LazyValueInfoCache *P = nullptr)
+ : CallbackVH(V), Parent(P) { }
+
+ void deleted() override;
+@@ -152,89 +149,63 @@ namespace {
+ /// This is the cache kept by LazyValueInfo which
+ /// maintains information about queries across the clients' queries.
+ class LazyValueInfoCache {
+- /// This is all of the cached block information for exactly one Value*.
+- /// The entries are sorted by the BasicBlock* of the
+- /// entries, allowing us to do a lookup with a binary search.
+- /// Over-defined lattice values are recorded in OverDefinedCache to reduce
+- /// memory overhead.
+- struct ValueCacheEntryTy {
+- ValueCacheEntryTy(Value *V, LazyValueInfoCache *P) : Handle(V, P) {}
+- LVIValueHandle Handle;
+- SmallDenseMap<PoisoningVH<BasicBlock>, ValueLatticeElement, 4> BlockVals;
++ /// This is all of the cached information for one basic block. It contains
++ /// the per-value lattice elements, as well as a separate set for
++ /// overdefined values to reduce memory usage.
++ struct BlockCacheEntryTy {
++ SmallDenseMap<AssertingVH<Value>, ValueLatticeElement, 4> LatticeElements;
++ SmallDenseSet<AssertingVH<Value>, 4> OverDefined;
+ };
+
+- /// This tracks, on a per-block basis, the set of values that are
+- /// over-defined at the end of that block.
+- typedef DenseMap<PoisoningVH<BasicBlock>, SmallPtrSet<Value *, 4>>
+- OverDefinedCacheTy;
+- /// Keep track of all blocks that we have ever seen, so we
+- /// don't spend time removing unused blocks from our caches.
+- DenseSet<PoisoningVH<BasicBlock> > SeenBlocks;
+-
+- /// This is all of the cached information for all values,
+- /// mapped from Value* to key information.
+- DenseMap<Value *, std::unique_ptr<ValueCacheEntryTy>> ValueCache;
+- OverDefinedCacheTy OverDefinedCache;
+-
++ /// Cached information per basic block.
++ DenseMap<PoisoningVH<BasicBlock>, BlockCacheEntryTy> BlockCache;
++ /// Set of value handles used to erase values from the cache on deletion.
++ DenseSet<LVIValueHandle, DenseMapInfo<Value *>> ValueHandles;
+
+ public:
+ void insertResult(Value *Val, BasicBlock *BB,
+ const ValueLatticeElement &Result) {
+- SeenBlocks.insert(BB);
+-
++ auto &CacheEntry = BlockCache.try_emplace(BB).first->second;
+ // Insert over-defined values into their own cache to reduce memory
+ // overhead.
+ if (Result.isOverdefined())
+- OverDefinedCache[BB].insert(Val);
+- else {
+- auto It = ValueCache.find_as(Val);
+- if (It == ValueCache.end()) {
+- ValueCache[Val] = make_unique<ValueCacheEntryTy>(Val, this);
+- It = ValueCache.find_as(Val);
+- assert(It != ValueCache.end() && "Val was just added to the map!");
+- }
+- It->second->BlockVals[BB] = Result;
+- }
+- }
+-
+- bool isOverdefined(Value *V, BasicBlock *BB) const {
+- auto ODI = OverDefinedCache.find(BB);
+-
+- if (ODI == OverDefinedCache.end())
+- return false;
++ CacheEntry.OverDefined.insert(Val);
++ else
++ CacheEntry.LatticeElements.insert({ Val, Result });
+
+- return ODI->second.count(V);
++ auto HandleIt = ValueHandles.find_as(Val);
++ if (HandleIt == ValueHandles.end())
++ ValueHandles.insert({ Val, this });
+ }
+
+ bool hasCachedValueInfo(Value *V, BasicBlock *BB) const {
+- if (isOverdefined(V, BB))
+- return true;
+-
+- auto I = ValueCache.find_as(V);
+- if (I == ValueCache.end())
++ auto It = BlockCache.find(BB);
++ if (It == BlockCache.end())
+ return false;
+
+- return I->second->BlockVals.count(BB);
++ return It->second.OverDefined.count(V) ||
++ It->second.LatticeElements.count(V);
+ }
+
+ ValueLatticeElement getCachedValueInfo(Value *V, BasicBlock *BB) const {
+- if (isOverdefined(V, BB))
++ auto It = BlockCache.find(BB);
++ if (It == BlockCache.end())
++ return ValueLatticeElement();
++
++ if (It->second.OverDefined.count(V))
+ return ValueLatticeElement::getOverdefined();
+
+- auto I = ValueCache.find_as(V);
+- if (I == ValueCache.end())
++ auto LatticeIt = It->second.LatticeElements.find(V);
++ if (LatticeIt == It->second.LatticeElements.end())
+ return ValueLatticeElement();
+- auto BBI = I->second->BlockVals.find(BB);
+- if (BBI == I->second->BlockVals.end())
+- return ValueLatticeElement();
+- return BBI->second;
++
++ return LatticeIt->second;
+ }
+
+ /// clear - Empty the cache.
+ void clear() {
+- SeenBlocks.clear();
+- ValueCache.clear();
+- OverDefinedCache.clear();
++ BlockCache.clear();
++ ValueHandles.clear();
+ }
+
+ /// Inform the cache that a given value has been deleted.
+@@ -248,23 +219,18 @@ namespace {
+ /// OldSucc might have (unless also overdefined in NewSucc). This just
+ /// flushes elements from the cache and does not add any.
+ void threadEdgeImpl(BasicBlock *OldSucc,BasicBlock *NewSucc);
+-
+- friend struct LVIValueHandle;
+ };
+ }
+
+ void LazyValueInfoCache::eraseValue(Value *V) {
+- for (auto I = OverDefinedCache.begin(), E = OverDefinedCache.end(); I != E;) {
+- // Copy and increment the iterator immediately so we can erase behind
+- // ourselves.
+- auto Iter = I++;
+- SmallPtrSetImpl<Value *> &ValueSet = Iter->second;
+- ValueSet.erase(V);
+- if (ValueSet.empty())
+- OverDefinedCache.erase(Iter);
++ for (auto &Pair : BlockCache) {
++ Pair.second.LatticeElements.erase(V);
++ Pair.second.OverDefined.erase(V);
+ }
+
+- ValueCache.erase(V);
++ auto HandleIt = ValueHandles.find_as(V);
++ if (HandleIt != ValueHandles.end())
++ ValueHandles.erase(HandleIt);
+ }
+
+ void LVIValueHandle::deleted() {
+@@ -274,18 +240,7 @@ void LVIValueHandle::deleted() {
+ }
+
+ void LazyValueInfoCache::eraseBlock(BasicBlock *BB) {
+- // Shortcut if we have never seen this block.
+- DenseSet<PoisoningVH<BasicBlock> >::iterator I = SeenBlocks.find(BB);
+- if (I == SeenBlocks.end())
+- return;
+- SeenBlocks.erase(I);
+-
+- auto ODI = OverDefinedCache.find(BB);
+- if (ODI != OverDefinedCache.end())
+- OverDefinedCache.erase(ODI);
+-
+- for (auto &I : ValueCache)
+- I.second->BlockVals.erase(BB);
++ BlockCache.erase(BB);
+ }
+
+ void LazyValueInfoCache::threadEdgeImpl(BasicBlock *OldSucc,
+@@ -303,10 +258,11 @@ void LazyValueInfoCache::threadEdgeImpl(BasicBlock *OldSucc,
+ std::vector<BasicBlock*> worklist;
+ worklist.push_back(OldSucc);
+
+- auto I = OverDefinedCache.find(OldSucc);
+- if (I == OverDefinedCache.end())
++ auto I = BlockCache.find(OldSucc);
++ if (I == BlockCache.end() || I->second.OverDefined.empty())
+ return; // Nothing to process here.
+- SmallVector<Value *, 4> ValsToClear(I->second.begin(), I->second.end());
++ SmallVector<Value *, 4> ValsToClear(I->second.OverDefined.begin(),
++ I->second.OverDefined.end());
+
+ // Use a worklist to perform a depth-first search of OldSucc's successors.
+ // NOTE: We do not need a visited list since any blocks we have already
+@@ -320,10 +276,10 @@ void LazyValueInfoCache::threadEdgeImpl(BasicBlock *OldSucc,
+ if (ToUpdate == NewSucc) continue;
+
+ // If a value was marked overdefined in OldSucc, and is here too...
+- auto OI = OverDefinedCache.find(ToUpdate);
+- if (OI == OverDefinedCache.end())
++ auto OI = BlockCache.find(ToUpdate);
++ if (OI == BlockCache.end() || OI->second.OverDefined.empty())
+ continue;
+- SmallPtrSetImpl<Value *> &ValueSet = OI->second;
++ auto &ValueSet = OI->second.OverDefined;
+
+ bool changed = false;
+ for (Value *V : ValsToClear) {
+@@ -333,11 +289,6 @@ void LazyValueInfoCache::threadEdgeImpl(BasicBlock *OldSucc,
+ // If we removed anything, then we potentially need to update
+ // blocks successors too.
+ changed = true;
+-
+- if (ValueSet.empty()) {
+- OverDefinedCache.erase(OI);
+- break;
+- }
+ }
+
+ if (!changed) continue;
+--
+2.24.0
+
diff --git a/projects/clang/build b/projects/clang/build
index c1afa6d..825b21e 100644
--- a/projects/clang/build
+++ b/projects/clang/build
@@ -20,6 +20,10 @@ tar -xf $rootdir/[% c('input_files_by_name/libcxxabi') %]
tar -xf $rootdir/[% c('input_files_by_name/lld') %]
tar -xf $rootdir/[% c('input_files_by_name/compiler-rt') %]
mv llvm-* llvm
+# LLVM has reproducibility issues when optimizing bitcode, which we need to
+# patch. See: #32053 for more details.
+patch -p1 < $rootdir/42574.patch
+patch -p1 < $rootdir/43909.patch
mv cfe-* llvm/tools/clang
mv libcxx-* llvm/projects/libcxx
mv libcxxabi-* llvm/projects/libcxxabi
diff --git a/projects/clang/config b/projects/clang/config
index 08231be..59a9102 100644
--- a/projects/clang/config
+++ b/projects/clang/config
@@ -45,3 +45,5 @@ input_files:
enable: '[% c("var/windows") %]'
- filename: timestamp.patch
enable: '[% c("var/windows") %]'
+ - filename: 42574.patch
+ - filename: 43909.patch
diff --git a/projects/rust/42574.patch b/projects/rust/42574.patch
new file mode 100644
index 0000000..285d254
--- /dev/null
+++ b/projects/rust/42574.patch
@@ -0,0 +1,236 @@
+From 3757213db371dcea53cae357cf9c56d1b0604f98 Mon Sep 17 00:00:00 2001
+From: Alina Sbirlea <asbirlea(a)google.com>
+Date: Fri, 12 Jul 2019 22:30:30 +0000
+Subject: [PATCH] [MemorySSA] Use SetVector to avoid nondeterminism.
+
+Summary:
+Use a SetVector for DeadBlockSet.
+Resolves PR42574.
+
+Reviewers: george.burgess.iv, uabelho, dblaikie
+
+Subscribers: jlebar, Prazek, mgrang, llvm-commits
+
+Tags: #llvm
+
+Differential Revision: https://reviews.llvm.org/D64601
+
+llvm-svn: 365970
+
+diff --git a/llvm/include/llvm/Analysis/MemorySSAUpdater.h b/llvm/include/llvm/Analysis/MemorySSAUpdater.h
+index 169d5bd9fa8..276620bd445 100644
+--- a/llvm/include/llvm/Analysis/MemorySSAUpdater.h
++++ b/llvm/include/llvm/Analysis/MemorySSAUpdater.h
+@@ -32,6 +32,7 @@
+ #ifndef LLVM_ANALYSIS_MEMORYSSAUPDATER_H
+ #define LLVM_ANALYSIS_MEMORYSSAUPDATER_H
+
++#include "llvm/ADT/SetVector.h"
+ #include "llvm/ADT/SmallPtrSet.h"
+ #include "llvm/ADT/SmallSet.h"
+ #include "llvm/ADT/SmallVector.h"
+@@ -239,7 +240,7 @@ public:
+ /// Deleted blocks still have successor info, but their predecessor edges and
+ /// Phi nodes may already be updated. Instructions in DeadBlocks should be
+ /// deleted after this call.
+- void removeBlocks(const SmallPtrSetImpl<BasicBlock *> &DeadBlocks);
++ void removeBlocks(const SmallSetVector<BasicBlock *, 8> &DeadBlocks);
+
+ /// Get handle on MemorySSA.
+ MemorySSA* getMemorySSA() const { return MSSA; }
+diff --git a/llvm/lib/Analysis/MemorySSAUpdater.cpp b/llvm/lib/Analysis/MemorySSAUpdater.cpp
+index 6c817d20368..a6c7142a697 100644
+--- a/llvm/lib/Analysis/MemorySSAUpdater.cpp
++++ b/llvm/lib/Analysis/MemorySSAUpdater.cpp
+@@ -1101,7 +1101,7 @@ void MemorySSAUpdater::removeMemoryAccess(MemoryAccess *MA) {
+ }
+
+ void MemorySSAUpdater::removeBlocks(
+- const SmallPtrSetImpl<BasicBlock *> &DeadBlocks) {
++ const SmallSetVector<BasicBlock *, 8> &DeadBlocks) {
+ // First delete all uses of BB in MemoryPhis.
+ for (BasicBlock *BB : DeadBlocks) {
+ Instruction *TI = BB->getTerminator();
+diff --git a/llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp b/llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp
+index 2e5927f9a06..f464df26a02 100644
+--- a/llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp
++++ b/llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp
+@@ -388,8 +388,8 @@ private:
+ void deleteDeadLoopBlocks() {
+ DomTreeUpdater DTU(DT, DomTreeUpdater::UpdateStrategy::Eager);
+ if (MSSAU) {
+- SmallPtrSet<BasicBlock *, 8> DeadLoopBlocksSet(DeadLoopBlocks.begin(),
+- DeadLoopBlocks.end());
++ SmallSetVector<BasicBlock *, 8> DeadLoopBlocksSet(DeadLoopBlocks.begin(),
++ DeadLoopBlocks.end());
+ MSSAU->removeBlocks(DeadLoopBlocksSet);
+ }
+ for (auto *BB : DeadLoopBlocks) {
+diff --git a/llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp b/llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp
+index 5a67178cef3..814cf814989 100644
+--- a/llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp
++++ b/llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp
+@@ -1436,8 +1436,8 @@ deleteDeadClonedBlocks(Loop &L, ArrayRef<BasicBlock *> ExitBlocks,
+
+ // Remove all MemorySSA in the dead blocks
+ if (MSSAU) {
+- SmallPtrSet<BasicBlock *, 16> DeadBlockSet(DeadBlocks.begin(),
+- DeadBlocks.end());
++ SmallSetVector<BasicBlock *, 8> DeadBlockSet(DeadBlocks.begin(),
++ DeadBlocks.end());
+ MSSAU->removeBlocks(DeadBlockSet);
+ }
+
+@@ -1455,7 +1455,7 @@ static void deleteDeadBlocksFromLoop(Loop &L,
+ MemorySSAUpdater *MSSAU) {
+ // Find all the dead blocks tied to this loop, and remove them from their
+ // successors.
+- SmallPtrSet<BasicBlock *, 16> DeadBlockSet;
++ SmallSetVector<BasicBlock *, 8> DeadBlockSet;
+
+ // Start with loop/exit blocks and get a transitive closure of reachable dead
+ // blocks.
+diff --git a/llvm/lib/Transforms/Utils/Local.cpp b/llvm/lib/Transforms/Utils/Local.cpp
+index 499e611acb5..83dabcd7952 100644
+--- a/llvm/lib/Transforms/Utils/Local.cpp
++++ b/llvm/lib/Transforms/Utils/Local.cpp
+@@ -2211,7 +2211,7 @@ bool llvm::removeUnreachableBlocks(Function &F, LazyValueInfo *LVI,
+ assert(Reachable.size() < F.size());
+ NumRemoved += F.size()-Reachable.size();
+
+- SmallPtrSet<BasicBlock *, 16> DeadBlockSet;
++ SmallSetVector<BasicBlock *, 8> DeadBlockSet;
+ for (Function::iterator I = ++F.begin(), E = F.end(); I != E; ++I) {
+ auto *BB = &*I;
+ if (Reachable.count(BB))
+diff --git a/llvm/test/Analysis/MemorySSA/nondeterminism.ll b/llvm/test/Analysis/MemorySSA/nondeterminism.ll
+new file mode 100644
+index 00000000000..0bb3df30b58
+--- /dev/null
++++ b/llvm/test/Analysis/MemorySSA/nondeterminism.ll
+@@ -0,0 +1,122 @@
++; RUN: opt -simplifycfg -enable-mssa-loop-dependency -S --preserve-ll-uselistorder %s | FileCheck %s
++; REQUIRES: x86-registered-target
++; CHECK-LABEL: @n
++; CHECK: uselistorder i16 0, { 3, 2, 4, 1, 5, 0, 6 }
++
++; Note: test was added in an effort to ensure determinism when updating memoryssa. See PR42574.
++; If the uselistorder check becomes no longer relevant, the test can be disabled or removed.
++
++%rec9 = type { i16, i32, i32 }
++
++@a = global [1 x [1 x %rec9]] zeroinitializer
++
++define i16 @n() {
++ br label %..split_crit_edge
++
++..split_crit_edge: ; preds = %0
++ br label %.split
++
++bb4.us4: ; preds = %bb2.split.us32, %bb6.us28
++ %i.4.01.us5 = phi i16 [ %_tmp49.us30, %bb6.us28 ]
++ br label %g.exit4.us21
++
++bb1.i.us14: ; preds = %bb4.us4
++ br label %g.exit4.us21
++
++g.exit4.us21: ; preds = %bb1.i.us14, %g.exit4.critedge.us9
++ %i.4.02.us22 = phi i16 [ %i.4.01.us5, %bb4.us4 ], [ %i.4.01.us5, %bb1.i.us14 ]
++ br label %bb6.us28
++
++bb5.us26: ; preds = %g.exit4.us21
++ br label %bb6.us28
++
++bb6.us28: ; preds = %bb5.us26, %g.exit4.us21
++ %i.4.03.us29 = phi i16 [ %i.4.02.us22, %bb5.us26 ], [ %i.4.02.us22, %g.exit4.us21 ]
++ %_tmp49.us30 = add nuw nsw i16 %i.4.03.us29, 1
++ br label %bb4.us4
++
++bb4.us.us: ; preds = %bb2.split.us.us, %bb6.us.us
++ %i.4.01.us.us = phi i16 [ %_tmp49.us.us, %bb6.us.us ]
++ br label %bb1.i.us.us
++
++bb1.i.us.us: ; preds = %bb4.us.us
++ br label %g.exit4.us.us
++
++g.exit4.us.us: ; preds = %bb1.i.us.us, %g.exit4.critedge.us.us
++ %i.4.02.us.us = phi i16 [ %i.4.01.us.us, %bb1.i.us.us ]
++ br label %bb5.us.us
++
++bb5.us.us: ; preds = %g.exit4.us.us
++ br label %bb6.us.us
++
++bb6.us.us: ; preds = %bb5.us.us, %g.exit4.us.us
++ %i.4.03.us.us = phi i16 [ %i.4.02.us.us, %bb5.us.us ]
++ %_tmp49.us.us = add nuw nsw i16 %i.4.03.us.us, 1
++ br label %bb4.us.us
++
++
++.split: ; preds = %..split_crit_edge
++ br label %bb2
++
++bb2: ; preds = %.split, %bb7
++ %h.3.0 = phi i16 [ undef, %.split ], [ %_tmp53, %bb7 ]
++ br label %bb2.bb2.split_crit_edge
++
++bb2.bb2.split_crit_edge: ; preds = %bb2
++ br label %bb2.split
++
++bb2.split.us: ; preds = %bb2
++ br label %bb4.us
++
++bb4.us: ; preds = %bb6.us, %bb2.split.us
++ %i.4.01.us = phi i16 [ 0, %bb2.split.us ]
++ br label %bb1.i.us
++
++g.exit4.critedge.us: ; preds = %bb4.us
++ br label %g.exit4.us
++
++bb1.i.us: ; preds = %bb4.us
++ br label %g.exit4.us
++
++g.exit4.us: ; preds = %bb1.i.us, %g.exit4.critedge.us
++ %i.4.02.us = phi i16 [ %i.4.01.us, %g.exit4.critedge.us ], [ %i.4.01.us, %bb1.i.us ]
++ br label %bb5.us
++
++bb5.us: ; preds = %g.exit4.us
++ br label %bb7
++
++bb2.split: ; preds = %bb2.bb2.split_crit_edge
++ br label %bb4
++
++bb4: ; preds = %bb2.split, %bb6
++ %i.4.01 = phi i16 [ 0, %bb2.split ]
++ %_tmp16 = getelementptr [1 x [1 x %rec9]], [1 x [1 x %rec9]]* @a, i16 0, i16 %h.3.0, i16 %i.4.01, i32 0
++ %_tmp17 = load i16, i16* %_tmp16, align 1
++ br label %g.exit4.critedge
++
++bb1.i: ; preds = %bb4
++ br label %g.exit4
++
++g.exit4.critedge: ; preds = %bb4
++ %_tmp28.c = getelementptr [1 x [1 x %rec9]], [1 x [1 x %rec9]]* @a, i16 0, i16 %h.3.0, i16 %i.4.01, i32 1
++ %_tmp29.c = load i32, i32* %_tmp28.c, align 1
++ %_tmp30.c = trunc i32 %_tmp29.c to i16
++ br label %g.exit4
++
++g.exit4: ; preds = %g.exit4.critedge, %bb1.i
++ %i.4.02 = phi i16 [ %i.4.01, %g.exit4.critedge ], [ %i.4.01, %bb1.i ]
++ %_tmp41 = getelementptr [1 x [1 x %rec9]], [1 x [1 x %rec9]]* @a, i16 0, i16 %h.3.0, i16 %i.4.02, i32 2
++ br label %bb6
++
++bb5: ; preds = %g.exit4
++ br label %bb6
++
++bb6: ; preds = %bb5, %g.exit4
++ %i.4.03 = phi i16 [ %i.4.02, %bb5 ], [ %i.4.02, %g.exit4 ]
++ %_tmp49 = add nuw nsw i16 %i.4.03, 1
++ br label %bb7
++
++bb7: ; preds = %bb7.us-lcssa.us, %bb7.us-lcssa
++ %_tmp53 = add nsw i16 %h.3.0, 1
++ br label %bb2
++}
+--
+2.24.0
+
diff --git a/projects/rust/43909.patch b/projects/rust/43909.patch
new file mode 100644
index 0000000..78d2a75
--- /dev/null
+++ b/projects/rust/43909.patch
@@ -0,0 +1,252 @@
+From c95310f2d4fd3c88241c3b5d6dbf6251d34a3256 Mon Sep 17 00:00:00 2001
+From: Nikita Popov <nikita.ppv(a)gmail.com>
+Date: Sat, 16 Nov 2019 16:22:18 +0100
+Subject: [PATCH] Restructure caching
+
+Variant on D70103. The caching is switched to always use a BB to
+cache entry map, which then contains per-value caches. A separate
+set contains value handles with a deletion callback. This allows us
+to properly invalidate overdefined values.
+
+A possible alternative would be to always cache by value first and
+have per-BB maps/sets in the each cache entry. In that case we could
+use a ValueMap and would avoid the separate value handle set. I went
+with the BB indexing at the top level to make it easier to integrate
+D69914, but possibly that's not the right choice.
+
+Differential Revision: https://reviews.llvm.org/D70376
+
+diff --git a/llvm/lib/Analysis/LazyValueInfo.cpp b/llvm/lib/Analysis/LazyValueInfo.cpp
+index 110c085d3f3..aa6862cb588 100644
+--- a/llvm/lib/Analysis/LazyValueInfo.cpp
++++ b/llvm/lib/Analysis/LazyValueInfo.cpp
+@@ -133,12 +133,9 @@ namespace {
+ /// A callback value handle updates the cache when values are erased.
+ class LazyValueInfoCache;
+ struct LVIValueHandle final : public CallbackVH {
+- // Needs to access getValPtr(), which is protected.
+- friend struct DenseMapInfo<LVIValueHandle>;
+-
+ LazyValueInfoCache *Parent;
+
+- LVIValueHandle(Value *V, LazyValueInfoCache *P)
++ LVIValueHandle(Value *V, LazyValueInfoCache *P = nullptr)
+ : CallbackVH(V), Parent(P) { }
+
+ void deleted() override;
+@@ -152,89 +149,63 @@ namespace {
+ /// This is the cache kept by LazyValueInfo which
+ /// maintains information about queries across the clients' queries.
+ class LazyValueInfoCache {
+- /// This is all of the cached block information for exactly one Value*.
+- /// The entries are sorted by the BasicBlock* of the
+- /// entries, allowing us to do a lookup with a binary search.
+- /// Over-defined lattice values are recorded in OverDefinedCache to reduce
+- /// memory overhead.
+- struct ValueCacheEntryTy {
+- ValueCacheEntryTy(Value *V, LazyValueInfoCache *P) : Handle(V, P) {}
+- LVIValueHandle Handle;
+- SmallDenseMap<PoisoningVH<BasicBlock>, ValueLatticeElement, 4> BlockVals;
++ /// This is all of the cached information for one basic block. It contains
++ /// the per-value lattice elements, as well as a separate set for
++ /// overdefined values to reduce memory usage.
++ struct BlockCacheEntryTy {
++ SmallDenseMap<AssertingVH<Value>, ValueLatticeElement, 4> LatticeElements;
++ SmallDenseSet<AssertingVH<Value>, 4> OverDefined;
+ };
+
+- /// This tracks, on a per-block basis, the set of values that are
+- /// over-defined at the end of that block.
+- typedef DenseMap<PoisoningVH<BasicBlock>, SmallPtrSet<Value *, 4>>
+- OverDefinedCacheTy;
+- /// Keep track of all blocks that we have ever seen, so we
+- /// don't spend time removing unused blocks from our caches.
+- DenseSet<PoisoningVH<BasicBlock> > SeenBlocks;
+-
+- /// This is all of the cached information for all values,
+- /// mapped from Value* to key information.
+- DenseMap<Value *, std::unique_ptr<ValueCacheEntryTy>> ValueCache;
+- OverDefinedCacheTy OverDefinedCache;
+-
++ /// Cached information per basic block.
++ DenseMap<PoisoningVH<BasicBlock>, BlockCacheEntryTy> BlockCache;
++ /// Set of value handles used to erase values from the cache on deletion.
++ DenseSet<LVIValueHandle, DenseMapInfo<Value *>> ValueHandles;
+
+ public:
+ void insertResult(Value *Val, BasicBlock *BB,
+ const ValueLatticeElement &Result) {
+- SeenBlocks.insert(BB);
+-
++ auto &CacheEntry = BlockCache.try_emplace(BB).first->second;
+ // Insert over-defined values into their own cache to reduce memory
+ // overhead.
+ if (Result.isOverdefined())
+- OverDefinedCache[BB].insert(Val);
+- else {
+- auto It = ValueCache.find_as(Val);
+- if (It == ValueCache.end()) {
+- ValueCache[Val] = make_unique<ValueCacheEntryTy>(Val, this);
+- It = ValueCache.find_as(Val);
+- assert(It != ValueCache.end() && "Val was just added to the map!");
+- }
+- It->second->BlockVals[BB] = Result;
+- }
+- }
+-
+- bool isOverdefined(Value *V, BasicBlock *BB) const {
+- auto ODI = OverDefinedCache.find(BB);
+-
+- if (ODI == OverDefinedCache.end())
+- return false;
++ CacheEntry.OverDefined.insert(Val);
++ else
++ CacheEntry.LatticeElements.insert({ Val, Result });
+
+- return ODI->second.count(V);
++ auto HandleIt = ValueHandles.find_as(Val);
++ if (HandleIt == ValueHandles.end())
++ ValueHandles.insert({ Val, this });
+ }
+
+ bool hasCachedValueInfo(Value *V, BasicBlock *BB) const {
+- if (isOverdefined(V, BB))
+- return true;
+-
+- auto I = ValueCache.find_as(V);
+- if (I == ValueCache.end())
++ auto It = BlockCache.find(BB);
++ if (It == BlockCache.end())
+ return false;
+
+- return I->second->BlockVals.count(BB);
++ return It->second.OverDefined.count(V) ||
++ It->second.LatticeElements.count(V);
+ }
+
+ ValueLatticeElement getCachedValueInfo(Value *V, BasicBlock *BB) const {
+- if (isOverdefined(V, BB))
++ auto It = BlockCache.find(BB);
++ if (It == BlockCache.end())
++ return ValueLatticeElement();
++
++ if (It->second.OverDefined.count(V))
+ return ValueLatticeElement::getOverdefined();
+
+- auto I = ValueCache.find_as(V);
+- if (I == ValueCache.end())
++ auto LatticeIt = It->second.LatticeElements.find(V);
++ if (LatticeIt == It->second.LatticeElements.end())
+ return ValueLatticeElement();
+- auto BBI = I->second->BlockVals.find(BB);
+- if (BBI == I->second->BlockVals.end())
+- return ValueLatticeElement();
+- return BBI->second;
++
++ return LatticeIt->second;
+ }
+
+ /// clear - Empty the cache.
+ void clear() {
+- SeenBlocks.clear();
+- ValueCache.clear();
+- OverDefinedCache.clear();
++ BlockCache.clear();
++ ValueHandles.clear();
+ }
+
+ /// Inform the cache that a given value has been deleted.
+@@ -248,23 +219,18 @@ namespace {
+ /// OldSucc might have (unless also overdefined in NewSucc). This just
+ /// flushes elements from the cache and does not add any.
+ void threadEdgeImpl(BasicBlock *OldSucc,BasicBlock *NewSucc);
+-
+- friend struct LVIValueHandle;
+ };
+ }
+
+ void LazyValueInfoCache::eraseValue(Value *V) {
+- for (auto I = OverDefinedCache.begin(), E = OverDefinedCache.end(); I != E;) {
+- // Copy and increment the iterator immediately so we can erase behind
+- // ourselves.
+- auto Iter = I++;
+- SmallPtrSetImpl<Value *> &ValueSet = Iter->second;
+- ValueSet.erase(V);
+- if (ValueSet.empty())
+- OverDefinedCache.erase(Iter);
++ for (auto &Pair : BlockCache) {
++ Pair.second.LatticeElements.erase(V);
++ Pair.second.OverDefined.erase(V);
+ }
+
+- ValueCache.erase(V);
++ auto HandleIt = ValueHandles.find_as(V);
++ if (HandleIt != ValueHandles.end())
++ ValueHandles.erase(HandleIt);
+ }
+
+ void LVIValueHandle::deleted() {
+@@ -274,18 +240,7 @@ void LVIValueHandle::deleted() {
+ }
+
+ void LazyValueInfoCache::eraseBlock(BasicBlock *BB) {
+- // Shortcut if we have never seen this block.
+- DenseSet<PoisoningVH<BasicBlock> >::iterator I = SeenBlocks.find(BB);
+- if (I == SeenBlocks.end())
+- return;
+- SeenBlocks.erase(I);
+-
+- auto ODI = OverDefinedCache.find(BB);
+- if (ODI != OverDefinedCache.end())
+- OverDefinedCache.erase(ODI);
+-
+- for (auto &I : ValueCache)
+- I.second->BlockVals.erase(BB);
++ BlockCache.erase(BB);
+ }
+
+ void LazyValueInfoCache::threadEdgeImpl(BasicBlock *OldSucc,
+@@ -303,10 +258,11 @@ void LazyValueInfoCache::threadEdgeImpl(BasicBlock *OldSucc,
+ std::vector<BasicBlock*> worklist;
+ worklist.push_back(OldSucc);
+
+- auto I = OverDefinedCache.find(OldSucc);
+- if (I == OverDefinedCache.end())
++ auto I = BlockCache.find(OldSucc);
++ if (I == BlockCache.end() || I->second.OverDefined.empty())
+ return; // Nothing to process here.
+- SmallVector<Value *, 4> ValsToClear(I->second.begin(), I->second.end());
++ SmallVector<Value *, 4> ValsToClear(I->second.OverDefined.begin(),
++ I->second.OverDefined.end());
+
+ // Use a worklist to perform a depth-first search of OldSucc's successors.
+ // NOTE: We do not need a visited list since any blocks we have already
+@@ -320,10 +276,10 @@ void LazyValueInfoCache::threadEdgeImpl(BasicBlock *OldSucc,
+ if (ToUpdate == NewSucc) continue;
+
+ // If a value was marked overdefined in OldSucc, and is here too...
+- auto OI = OverDefinedCache.find(ToUpdate);
+- if (OI == OverDefinedCache.end())
++ auto OI = BlockCache.find(ToUpdate);
++ if (OI == BlockCache.end() || OI->second.OverDefined.empty())
+ continue;
+- SmallPtrSetImpl<Value *> &ValueSet = OI->second;
++ auto &ValueSet = OI->second.OverDefined;
+
+ bool changed = false;
+ for (Value *V : ValsToClear) {
+@@ -333,11 +289,6 @@ void LazyValueInfoCache::threadEdgeImpl(BasicBlock *OldSucc,
+ // If we removed anything, then we potentially need to update
+ // blocks successors too.
+ changed = true;
+-
+- if (ValueSet.empty()) {
+- OverDefinedCache.erase(OI);
+- break;
+- }
+ }
+
+ if (!changed) continue;
+--
+2.24.0
+
diff --git a/projects/rust/build b/projects/rust/build
index 9a6b54a..8b45e3f 100644
--- a/projects/rust/build
+++ b/projects/rust/build
@@ -51,6 +51,13 @@ mkdir /var/tmp/build
tar -C /var/tmp/build -xf [% c('input_files_by_name/rust') %]
cd /var/tmp/build/rustc-[% c('version') %]-src
+# LLVM has reproducibility issues when optimizing bitcode, which we need to
+# patch. See: #32053 for more details.
+cd src/llvm-project
+patch -p1 < $rootdir/42574.patch
+patch -p1 < $rootdir/43909.patch
+cd ../../
+
[% IF c("var/windows-i686") %]
# Cross-compiling for Windows 32bit is currently not possible without any
# patches. The reason for that is libstd expecting DWARF unwinding while most
diff --git a/projects/rust/config b/projects/rust/config
index 03d7be0..848ccd0 100644
--- a/projects/rust/config
+++ b/projects/rust/config
@@ -106,3 +106,5 @@ input_files:
gpg_keyring: rust.gpg
- filename: unwind.patch
enable: '[% c("var/windows-i686") %]'
+ - filename: 42574.patch
+ - filename: 43909.patch
1
0

[tor-browser-build/maint-9.0] Bug 32132: Re-enable jemalloc for Windows users
by sysrqb@torproject.org 06 Feb '20
by sysrqb@torproject.org 06 Feb '20
06 Feb '20
commit 153b7d9b25f10f983f7577fb00d8e4c594e06738
Author: Georg Koppen <gk(a)torproject.org>
Date: Thu Oct 17 20:56:29 2019 +0000
Bug 32132: Re-enable jemalloc for Windows users
Now that https://bugzilla.mozilla.org/show_bug.cgi?id=1547519 got
backported (to esr68.2.0) we can re-enable jemalloc for Windows users.
---
projects/firefox/mozconfig-windows-i686 | 3 +--
projects/firefox/mozconfig-windows-x86_64 | 3 +--
2 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/projects/firefox/mozconfig-windows-i686 b/projects/firefox/mozconfig-windows-i686
index 685b294..fe3cc7d 100644
--- a/projects/firefox/mozconfig-windows-i686
+++ b/projects/firefox/mozconfig-windows-i686
@@ -38,8 +38,7 @@ ac_add_options --disable-maintenance-service
ac_add_options --enable-proxy-bypass-protection
ac_add_options --disable-webrtc # Bug 1393901
ac_add_options --disable-tests
-ac_add_options --disable-jemalloc # Bug 154751
ac_add_options --disable-geckodriver # Bug 1489320
# Disable telemetry
-ac_add_options MOZ_TELEMETRY_REPORTING=
\ No newline at end of file
+ac_add_options MOZ_TELEMETRY_REPORTING=
diff --git a/projects/firefox/mozconfig-windows-x86_64 b/projects/firefox/mozconfig-windows-x86_64
index 92c774c..ef28c9b 100644
--- a/projects/firefox/mozconfig-windows-x86_64
+++ b/projects/firefox/mozconfig-windows-x86_64
@@ -38,8 +38,7 @@ ac_add_options --disable-maintenance-service
ac_add_options --enable-proxy-bypass-protection
ac_add_options --disable-webrtc # Bug 1393901
ac_add_options --disable-tests
-ac_add_options --disable-jemalloc # Bug 1547519
ac_add_options --disable-geckodriver # Bug 1489320
# Disable telemetry
-ac_add_options MOZ_TELEMETRY_REPORTING=
\ No newline at end of file
+ac_add_options MOZ_TELEMETRY_REPORTING=
1
0

[tor-browser/tor-browser-68.4.1esr-9.0-1] Bug 1598647 - Set Origin to null with network.http.referer.hideOnionSource r=JuniorHsu
by sysrqb@torproject.org 06 Feb '20
by sysrqb@torproject.org 06 Feb '20
06 Feb '20
commit 5526a109e6266ce31f8014912d5b91b154736ef6
Author: Alex Catarineu <acat(a)torproject.org>
Date: Mon Nov 25 13:29:47 2019 +0000
Bug 1598647 - Set Origin to null with network.http.referer.hideOnionSource r=JuniorHsu
Differential Revision: https://phabricator.services.mozilla.com/D54303
--HG--
extra : moz-landing-system : lando
---
dom/security/ReferrerInfo.cpp | 3 ++-
dom/security/ReferrerInfo.h | 2 +-
netwerk/protocol/http/nsCORSListenerProxy.cpp | 2 +-
netwerk/protocol/http/nsHttpChannel.cpp | 17 +++++++----------
4 files changed, 11 insertions(+), 13 deletions(-)
diff --git a/dom/security/ReferrerInfo.cpp b/dom/security/ReferrerInfo.cpp
index 2d06d9b3d3d3..25d9cd3290c0 100644
--- a/dom/security/ReferrerInfo.cpp
+++ b/dom/security/ReferrerInfo.cpp
@@ -322,7 +322,8 @@ nsresult ReferrerInfo::HandleUserReferrerSendingPolicy(nsIHttpChannel* aChannel,
return NS_OK;
}
-bool ReferrerInfo::IsCrossOriginRequest(nsIHttpChannel* aChannel) const {
+/* static */
+bool ReferrerInfo::IsCrossOriginRequest(nsIHttpChannel* aChannel) {
nsCOMPtr<nsILoadInfo> loadInfo = aChannel->LoadInfo();
nsCOMPtr<nsIURI> triggeringURI;
diff --git a/dom/security/ReferrerInfo.h b/dom/security/ReferrerInfo.h
index bf21233a0510..5fa052f3f32d 100644
--- a/dom/security/ReferrerInfo.h
+++ b/dom/security/ReferrerInfo.h
@@ -155,7 +155,7 @@ class ReferrerInfo : public nsIReferrerInfo {
* Computing whether the request is cross-origin may be expensive, so please
* do that in cases where we're going to use this information later on.
*/
- bool IsCrossOriginRequest(nsIHttpChannel* aChannel) const;
+ static bool IsCrossOriginRequest(nsIHttpChannel* aChannel);
/*
* Check whether referrer is allowed to send in secure to insecure scenario.
diff --git a/netwerk/protocol/http/nsCORSListenerProxy.cpp b/netwerk/protocol/http/nsCORSListenerProxy.cpp
index 36b263ddf003..36027a5d2809 100644
--- a/netwerk/protocol/http/nsCORSListenerProxy.cpp
+++ b/netwerk/protocol/http/nsCORSListenerProxy.cpp
@@ -985,7 +985,7 @@ nsresult nsCORSListenerProxy::UpdateChannel(nsIChannel* aChannel,
if (!currentOrgin.EqualsIgnoreCase(origin.get()) &&
StringEndsWith(potentialOnionHost, NS_LITERAL_CSTRING(".onion"))) {
- origin.Truncate();
+ origin.AssignLiteral("null");
}
}
diff --git a/netwerk/protocol/http/nsHttpChannel.cpp b/netwerk/protocol/http/nsHttpChannel.cpp
index d9c750dff4b0..b2c0956d0b66 100644
--- a/netwerk/protocol/http/nsHttpChannel.cpp
+++ b/netwerk/protocol/http/nsHttpChannel.cpp
@@ -9634,8 +9634,7 @@ void nsHttpChannel::SetOriginHeader() {
nsContentUtils::GetASCIIOrigin(referrer, origin);
}
- // Restrict Origin to same-origin loads if requested by user or leaving from
- // .onion
+ // Restrict Origin to same-origin loads if requested by user
if (sSendOriginHeader == 1) {
nsAutoCString currentOrigin;
nsContentUtils::GetASCIIOrigin(mURI, currentOrigin);
@@ -9643,16 +9642,14 @@ void nsHttpChannel::SetOriginHeader() {
// Origin header suppressed by user setting
return;
}
- } else if (dom::ReferrerInfo::HideOnionReferrerSource()) {
+ }
+
+ if (dom::ReferrerInfo::HideOnionReferrerSource()) {
nsAutoCString host;
if (referrer && NS_SUCCEEDED(referrer->GetAsciiHost(host)) &&
- StringEndsWith(host, NS_LITERAL_CSTRING(".onion"))) {
- nsAutoCString currentOrigin;
- nsContentUtils::GetASCIIOrigin(mURI, currentOrigin);
- if (!origin.EqualsIgnoreCase(currentOrigin.get())) {
- // Origin header is suppressed by .onion
- return;
- }
+ StringEndsWith(host, NS_LITERAL_CSTRING(".onion")) &&
+ dom::ReferrerInfo::IsCrossOriginRequest(this)) {
+ origin.AssignLiteral("null");
}
}
1
0

[tor-browser/tor-browser-68.4.1esr-9.5-1] fixup! Omnibox: Add DDG, Startpage, Disconnect, Youtube, Twitter; remove Amazon, eBay, bing
by sysrqb@torproject.org 06 Feb '20
by sysrqb@torproject.org 06 Feb '20
06 Feb '20
commit bfe5efa2e8eaac36bc9930fa1437b1a70045532b
Author: Alex Catarineu <acat(a)torproject.org>
Date: Wed Feb 5 12:29:58 2020 +0100
fixup! Omnibox: Add DDG, Startpage, Disconnect, Youtube, Twitter; remove Amazon, eBay, bing
---
.../search/extensions/disconnect/favicon.ico | Bin 1150 -> 0 bytes
.../search/extensions/disconnect/manifest.json | 25 --------
browser/components/search/extensions/list.json | 68 ++++++++++-----------
3 files changed, 34 insertions(+), 59 deletions(-)
diff --git a/browser/components/search/extensions/disconnect/favicon.ico b/browser/components/search/extensions/disconnect/favicon.ico
deleted file mode 100644
index bffe0e17e698..000000000000
Binary files a/browser/components/search/extensions/disconnect/favicon.ico and /dev/null differ
diff --git a/browser/components/search/extensions/disconnect/manifest.json b/browser/components/search/extensions/disconnect/manifest.json
deleted file mode 100644
index 7f768579554f..000000000000
--- a/browser/components/search/extensions/disconnect/manifest.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "name": "Disconnect",
- "description": "Private searches using disconnect.me",
- "manifest_version": 2,
- "version": "1.0",
- "applications": {
- "gecko": {
- "id": "disconnect(a)search.mozilla.org"
- }
- },
- "hidden": true,
- "icons": {
- "16": "favicon.ico"
- },
- "web_accessible_resources": [
- "favicon.ico"
- ],
- "chrome_settings_overrides": {
- "search_provider": {
- "name": "Disconnect",
- "search_url": "https://search.disconnect.me/searchTerms/search?ses=Google&location_option=…",
- "search_url_post_params": "query={searchTerms}"
- }
- }
-}
\ No newline at end of file
diff --git a/browser/components/search/extensions/list.json b/browser/components/search/extensions/list.json
index 15504eacb70c..84428869d627 100644
--- a/browser/components/search/extensions/list.json
+++ b/browser/components/search/extensions/list.json
@@ -3,7 +3,7 @@
"searchDefault": "DuckDuckGo",
"searchOrder": ["DuckDuckGo", "YouTube", "Google"],
"visibleDefaultEngines": [
- "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "disconnect", "youtube", "startpage"
+ "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "youtube", "startpage"
]
},
"regionOverrides": {
@@ -12,7 +12,7 @@
"en-US": {
"default": {
"visibleDefaultEngines": [
- "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "disconnect", "youtube", "startpage"
+ "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "youtube", "startpage"
]
},
"experimental-hidden": {
@@ -45,7 +45,7 @@
"ar": {
"default": {
"visibleDefaultEngines": [
- "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "disconnect", "youtube", "startpage"
+ "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "youtube", "startpage"
]
}
},
@@ -134,7 +134,7 @@
"ca": {
"default": {
"visibleDefaultEngines": [
- "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "disconnect", "youtube", "startpage"
+ "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "youtube", "startpage"
]
}
},
@@ -155,7 +155,7 @@
"cs": {
"default": {
"visibleDefaultEngines": [
- "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "disconnect", "youtube", "startpage"
+ "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "youtube", "startpage"
]
}
},
@@ -169,14 +169,14 @@
"da": {
"default": {
"visibleDefaultEngines": [
- "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "disconnect", "youtube", "startpage"
+ "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "youtube", "startpage"
]
}
},
"de": {
"default": {
"visibleDefaultEngines": [
- "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "disconnect", "youtube", "startpage"
+ "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "youtube", "startpage"
]
}
},
@@ -190,7 +190,7 @@
"el": {
"default": {
"visibleDefaultEngines": [
- "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "disconnect", "youtube", "startpage"
+ "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "youtube", "startpage"
]
}
},
@@ -307,7 +307,7 @@
"es-AR": {
"default": {
"visibleDefaultEngines": [
- "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "disconnect", "youtube", "startpage"
+ "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "youtube", "startpage"
]
}
},
@@ -321,7 +321,7 @@
"es-ES": {
"default": {
"visibleDefaultEngines": [
- "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "disconnect", "youtube", "startpage"
+ "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "youtube", "startpage"
]
}
},
@@ -354,7 +354,7 @@
"fa": {
"default": {
"visibleDefaultEngines": [
- "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "disconnect", "youtube", "startpage"
+ "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "youtube", "startpage"
]
}
},
@@ -375,7 +375,7 @@
"fr": {
"default": {
"visibleDefaultEngines": [
- "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "disconnect", "youtube", "startpage"
+ "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "youtube", "startpage"
]
}
},
@@ -394,7 +394,7 @@
"ga-IE": {
"default": {
"visibleDefaultEngines": [
- "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "disconnect", "youtube", "startpage"
+ "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "youtube", "startpage"
]
}
},
@@ -429,7 +429,7 @@
"he": {
"default": {
"visibleDefaultEngines": [
- "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "disconnect", "youtube", "startpage"
+ "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "youtube", "startpage"
]
}
},
@@ -457,7 +457,7 @@
"hu": {
"default": {
"visibleDefaultEngines": [
- "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "disconnect", "youtube", "startpage"
+ "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "youtube", "startpage"
]
}
},
@@ -478,42 +478,42 @@
"id": {
"default": {
"visibleDefaultEngines": [
- "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "disconnect", "youtube", "startpage"
+ "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "youtube", "startpage"
]
}
},
"is": {
"default": {
"visibleDefaultEngines": [
- "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "disconnect", "youtube", "startpage"
+ "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "youtube", "startpage"
]
}
},
"it": {
"default": {
"visibleDefaultEngines": [
- "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "disconnect", "youtube", "startpage"
+ "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "youtube", "startpage"
]
}
},
"ja-JP-macos": {
"default": {
"visibleDefaultEngines": [
- "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "disconnect", "youtube", "startpage"
+ "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "youtube", "startpage"
]
}
},
"ja": {
"default": {
"visibleDefaultEngines": [
- "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "disconnect", "youtube", "startpage"
+ "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "youtube", "startpage"
]
}
},
"ka": {
"default": {
"visibleDefaultEngines": [
- "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "disconnect", "youtube", "startpage"
+ "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "youtube", "startpage"
]
}
},
@@ -560,7 +560,7 @@
"ko": {
"default": {
"visibleDefaultEngines": [
- "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "disconnect", "youtube", "startpage"
+ "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "youtube", "startpage"
]
}
},
@@ -609,7 +609,7 @@
"mk": {
"default": {
"visibleDefaultEngines": [
- "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "disconnect", "youtube", "startpage"
+ "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "youtube", "startpage"
]
}
},
@@ -644,7 +644,7 @@
"nb-NO": {
"default": {
"visibleDefaultEngines": [
- "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "disconnect", "youtube", "startpage"
+ "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "youtube", "startpage"
]
}
},
@@ -658,7 +658,7 @@
"nl": {
"default": {
"visibleDefaultEngines": [
- "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "disconnect", "youtube", "startpage"
+ "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "youtube", "startpage"
]
},
"experimental-hidden": {
@@ -698,14 +698,14 @@
"pl": {
"default": {
"visibleDefaultEngines": [
- "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "disconnect", "youtube", "startpage"
+ "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "youtube", "startpage"
]
}
},
"pt-BR": {
"default": {
"visibleDefaultEngines": [
- "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "disconnect", "youtube", "startpage"
+ "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "youtube", "startpage"
]
}
},
@@ -726,14 +726,14 @@
"ro": {
"default": {
"visibleDefaultEngines": [
- "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "disconnect", "youtube", "startpage"
+ "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "youtube", "startpage"
]
}
},
"ru": {
"default": {
"visibleDefaultEngines": [
- "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "disconnect", "youtube", "startpage"
+ "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "youtube", "startpage"
]
},
"RU": {
@@ -794,7 +794,7 @@
"sv-SE": {
"default": {
"visibleDefaultEngines": [
- "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "disconnect", "youtube", "startpage"
+ "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "youtube", "startpage"
]
}
},
@@ -829,7 +829,7 @@
"tr": {
"default": {
"visibleDefaultEngines": [
- "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "disconnect", "youtube", "startpage"
+ "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "youtube", "startpage"
]
},
"TR": {
@@ -876,7 +876,7 @@
"vi": {
"default": {
"visibleDefaultEngines": [
- "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "disconnect", "youtube", "startpage"
+ "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "youtube", "startpage"
]
}
},
@@ -897,7 +897,7 @@
"zh-CN": {
"default": {
"visibleDefaultEngines": [
- "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "disconnect", "youtube", "startpage"
+ "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "youtube", "startpage"
]
},
"CN": {
@@ -907,7 +907,7 @@
"zh-TW": {
"default": {
"visibleDefaultEngines": [
- "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "disconnect", "youtube", "startpage"
+ "ddg", "ddg-onion", "google", "yahoo", "twitter", "wikipedia", "youtube", "startpage"
]
}
}
1
0