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

Keyboard Shortcuts

Thread View

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

tbb-commits

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

May 2017

  • 2 participants
  • 101 discussions
[tor-browser/tor-browser-52.1.1esr-7.0-1] fixup! TB3: Tor Browser's official .mozconfigs.
by gk@torproject.org 22 May '17

22 May '17
commit 100fea0348ed02fd181080fbc2b131994adaab4b Author: Georg Koppen <gk(a)torproject.org> Date: Mon May 22 12:41:17 2017 +0000 fixup! TB3: Tor Browser's official .mozconfigs. Make EME comment clearer for ESR52. --- .mozconfig | 2 +- .mozconfig-mac | 3 +-- .mozconfig-mingw | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.mozconfig b/.mozconfig index cde5b49..4eeb339 100755 --- a/.mozconfig +++ b/.mozconfig @@ -23,7 +23,7 @@ ac_add_options --disable-debug ac_add_options --disable-maintenance-service ac_add_options --disable-crashreporter ac_add_options --disable-webrtc -# Let's not compile EME at least until we can enable ClearKey and only Clearkey. +# Let's make sure no preference is enabling either Adobe's or Google's CDM. ac_add_options --disable-eme #ac_add_options --disable-ctypes ac_add_options --enable-jemalloc=4 diff --git a/.mozconfig-mac b/.mozconfig-mac index 7088e48..844ee2e 100644 --- a/.mozconfig-mac +++ b/.mozconfig-mac @@ -49,7 +49,6 @@ ac_add_options --disable-crashreporter ac_add_options --disable-maintenance-service ac_add_options --disable-webrtc ac_add_options --disable-tests -# Let's not compile EME at least until we can enable ClearKey and only Clearkey. -# (Apart from that there is no Adobe CRM module for OS X right now) +# Let's make sure no preference is enabling either Adobe's or Google's CDM. ac_add_options --disable-eme # ac_add_options --disable-ctypes diff --git a/.mozconfig-mingw b/.mozconfig-mingw index de86c49b..af30573 100644 --- a/.mozconfig-mingw +++ b/.mozconfig-mingw @@ -21,7 +21,7 @@ ac_add_options --enable-verify-mar # We can't build the sandbox code with mingw-w64: # https://bugzilla.mozilla.org/show_bug.cgi?id=1042426 ac_add_options --disable-sandbox -# EME is not running without sandbox. Thus, don't compile it in the first place. +# Let's make sure no preference is enabling either Adobe's or Google's CDM. ac_add_options --disable-eme ac_add_options --disable-crashreporter ac_add_options --disable-maintenance-service
1 0
0 0
[tor-browser/tor-browser-52.1.1esr-7.0-1] Bug 16285: Exclude ClearKey system for now
by gk@torproject.org 22 May '17

22 May '17
commit e948ae5d404321a1ed0316ffb97baf45ee0163a5 Author: Georg Koppen <gk(a)torproject.org> Date: Mon May 22 12:44:40 2017 +0000 Bug 16285: Exclude ClearKey system for now In the past the ClearKey system had not been compiled when specifying --disable-eme. But that changed and it is even bundled nowadays (see: Mozilla's bug 1300654). We don't want to ship it right now as the use case for it is not really visible while the code had security vulnerabilities in the past. --- browser/installer/package-manifest.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/browser/installer/package-manifest.in b/browser/installer/package-manifest.in index 43c89a9..1233249 100644 --- a/browser/installer/package-manifest.in +++ b/browser/installer/package-manifest.in @@ -814,8 +814,8 @@ bin/libfreebl_32int64_3.so ; media -@RESPATH@/gmp-clearkey/0.1/@DLL_PREFIX@clearkey@DLL_SUFFIX@ -@RESPATH@/gmp-clearkey/0.1/clearkey.info +;@RESPATH@/gmp-clearkey/0.1/@DLL_PREFIX@clearkey@DLL_SUFFIX@ +;@RESPATH@/gmp-clearkey/0.1/clearkey.info ; gfx #ifdef XP_WIN
1 0
0 0
[tor-browser/tor-browser-52.1.1esr-7.0-1] fixup! TB4: Tor Browser's Firefox preference overrides.
by gk@torproject.org 22 May '17

22 May '17
commit ba7cbd186c5692267ba80eb6a998c7abab2a76a9 Author: Georg Koppen <gk(a)torproject.org> Date: Mon May 22 12:52:09 2017 +0000 fixup! TB4: Tor Browser's Firefox preference overrides. Adapt preferences to take new EME related ones into account. --- browser/app/profile/000-tor-browser.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/browser/app/profile/000-tor-browser.js b/browser/app/profile/000-tor-browser.js index 7b0ad71..53d1ac2 100644 --- a/browser/app/profile/000-tor-browser.js +++ b/browser/app/profile/000-tor-browser.js @@ -228,12 +228,15 @@ pref("media.gmp-manager.url.override", "data:text/plain,"); // server. There is a local fallback that must be blocked now as well. See: // https://bugzilla.mozilla.org/show_bug.cgi?id=1267495. pref("media.gmp-manager.updateEnabled", false); -// EME prefs: Strictly speaking these prefs don't need to be set as we are -// using the --disable-eme compile flag. However, in order to not confuse users, -// who might stumble upon them while looking into about:config, we set them to -// 'false' communicating that EME is really disabled. +// Mozilla is relying on preferences to make sure no DRM blob is downloaded and +// run. Even though those prefs should be set correctly by specifying +// --disable-eme (which we do), we disable all of them here as well for defense +// in depth. pref("browser.eme.ui.enabled", false); +pref("media.gmp-eme-adobe.visible", false); pref("media.gmp-eme-adobe.enabled", false); +pref("media.gmp-widevinecdm.visible", false); +pref("media.gmp-widevinecdm.enabled", false); pref("media.eme.enabled", false); pref("media.eme.apiVisible", false); // WebIDE can bypass proxy settings for remote debugging. It also downloads
1 0
0 0
[tor-browser-bundle/master] Bug 22324: Fix broken tab crash pages on higher security levels
by gk@torproject.org 22 May '17

22 May '17
commit 78de9734135f21077410d295b689751d60727592 Author: Georg Koppen <gk(a)torproject.org> Date: Mon May 22 09:30:33 2017 +0000 Bug 22324: Fix broken tab crash pages on higher security levels We need to allow JavaScript on `about:tabcrashed` pages explicitly. Otherwise are those pages broken on higher security levels. --- .../Data/Browser/profile.default/preferences/extension-overrides.js | 6 +++--- .../Data/Browser/profile.default/preferences/extension-overrides.js | 6 +++--- .../Data/Browser/profile.default/preferences/extension-overrides.js | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Bundle-Data/linux/Data/Browser/profile.default/preferences/extension-overrides.js b/Bundle-Data/linux/Data/Browser/profile.default/preferences/extension-overrides.js index 53c1a25..1465e29 100644 --- a/Bundle-Data/linux/Data/Browser/profile.default/preferences/extension-overrides.js +++ b/Bundle-Data/linux/Data/Browser/profile.default/preferences/extension-overrides.js @@ -8,9 +8,9 @@ pref("extensions.https_everywhere.toolbar_hint_shown", true); # NoScript Preferences: pref("capability.policy.maonoscript.javascript.enabled", "allAccess"); -pref("capability.policy.maonoscript.sites", "about: about:tbupdate chrome: resource: blob: mediasource: moz-safe-about: about:neterror about:certerror about:feeds"); -pref("noscript.default", "about: about:tbupdate chrome: resource: blob: mediasource: moz-safe-about: about:neterror about:certerror about:feeds"); -pref("noscript.mandatory", "about: about:tbupdate chrome: resource: blob: mediasource: moz-safe-about: about:neterror about:certerror about:feeds"); +pref("capability.policy.maonoscript.sites", "about: about:tbupdate chrome: resource: blob: mediasource: moz-safe-about: about:neterror about:certerror about:feeds about:tabcrashed"); +pref("noscript.default", "about: about:tbupdate chrome: resource: blob: mediasource: moz-safe-about: about:neterror about:certerror about:feeds about:tabcrashed"); +pref("noscript.mandatory", "about: about:tbupdate chrome: resource: blob: mediasource: moz-safe-about: about:neterror about:certerror about:feeds about:tabcrashed"); pref("noscript.ABE.enabled", false); pref("noscript.ABE.notify", false); pref("noscript.ABE.wanIpAsLocal", false); diff --git a/Bundle-Data/mac/TorBrowser/Data/Browser/profile.default/preferences/extension-overrides.js b/Bundle-Data/mac/TorBrowser/Data/Browser/profile.default/preferences/extension-overrides.js index 53c1a25..1465e29 100644 --- a/Bundle-Data/mac/TorBrowser/Data/Browser/profile.default/preferences/extension-overrides.js +++ b/Bundle-Data/mac/TorBrowser/Data/Browser/profile.default/preferences/extension-overrides.js @@ -8,9 +8,9 @@ pref("extensions.https_everywhere.toolbar_hint_shown", true); # NoScript Preferences: pref("capability.policy.maonoscript.javascript.enabled", "allAccess"); -pref("capability.policy.maonoscript.sites", "about: about:tbupdate chrome: resource: blob: mediasource: moz-safe-about: about:neterror about:certerror about:feeds"); -pref("noscript.default", "about: about:tbupdate chrome: resource: blob: mediasource: moz-safe-about: about:neterror about:certerror about:feeds"); -pref("noscript.mandatory", "about: about:tbupdate chrome: resource: blob: mediasource: moz-safe-about: about:neterror about:certerror about:feeds"); +pref("capability.policy.maonoscript.sites", "about: about:tbupdate chrome: resource: blob: mediasource: moz-safe-about: about:neterror about:certerror about:feeds about:tabcrashed"); +pref("noscript.default", "about: about:tbupdate chrome: resource: blob: mediasource: moz-safe-about: about:neterror about:certerror about:feeds about:tabcrashed"); +pref("noscript.mandatory", "about: about:tbupdate chrome: resource: blob: mediasource: moz-safe-about: about:neterror about:certerror about:feeds about:tabcrashed"); pref("noscript.ABE.enabled", false); pref("noscript.ABE.notify", false); pref("noscript.ABE.wanIpAsLocal", false); diff --git a/Bundle-Data/windows/Data/Browser/profile.default/preferences/extension-overrides.js b/Bundle-Data/windows/Data/Browser/profile.default/preferences/extension-overrides.js index 53c1a25..1465e29 100644 --- a/Bundle-Data/windows/Data/Browser/profile.default/preferences/extension-overrides.js +++ b/Bundle-Data/windows/Data/Browser/profile.default/preferences/extension-overrides.js @@ -8,9 +8,9 @@ pref("extensions.https_everywhere.toolbar_hint_shown", true); # NoScript Preferences: pref("capability.policy.maonoscript.javascript.enabled", "allAccess"); -pref("capability.policy.maonoscript.sites", "about: about:tbupdate chrome: resource: blob: mediasource: moz-safe-about: about:neterror about:certerror about:feeds"); -pref("noscript.default", "about: about:tbupdate chrome: resource: blob: mediasource: moz-safe-about: about:neterror about:certerror about:feeds"); -pref("noscript.mandatory", "about: about:tbupdate chrome: resource: blob: mediasource: moz-safe-about: about:neterror about:certerror about:feeds"); +pref("capability.policy.maonoscript.sites", "about: about:tbupdate chrome: resource: blob: mediasource: moz-safe-about: about:neterror about:certerror about:feeds about:tabcrashed"); +pref("noscript.default", "about: about:tbupdate chrome: resource: blob: mediasource: moz-safe-about: about:neterror about:certerror about:feeds about:tabcrashed"); +pref("noscript.mandatory", "about: about:tbupdate chrome: resource: blob: mediasource: moz-safe-about: about:neterror about:certerror about:feeds about:tabcrashed"); pref("noscript.ABE.enabled", false); pref("noscript.ABE.notify", false); pref("noscript.ABE.wanIpAsLocal", false);
1 0
0 0
[tor-browser/tor-browser-52.1.1esr-7.0-1] fixup! TB4: Tor Browser's Firefox preference overrides.
by gk@torproject.org 22 May '17

22 May '17
commit 886808dc4e21eef3595fa1042f792927bb898193 Author: Georg Koppen <gk(a)torproject.org> Date: Mon May 22 08:36:35 2017 +0000 fixup! TB4: Tor Browser's Firefox preference overrides. The Battery API is not available to content anymore since Firefox 52. Thus, we don't need to set `dom.battery.enabled` anymore. Fixes bug 5293. --- browser/app/profile/000-tor-browser.js | 1 - 1 file changed, 1 deletion(-) diff --git a/browser/app/profile/000-tor-browser.js b/browser/app/profile/000-tor-browser.js index fb7b078..7b0ad71 100644 --- a/browser/app/profile/000-tor-browser.js +++ b/browser/app/profile/000-tor-browser.js @@ -137,7 +137,6 @@ pref("social.whitelist", ""); pref("webgl.min_capability_mode", true); pref("webgl.disable-extensions", true); pref("webgl.disable-fail-if-major-performance-caveat", true); -pref("dom.battery.enabled", false); // fingerprinting due to differing OS implementations pref("dom.network.enabled",false); // fingerprinting due to differing OS implementations pref("gfx.downloadable_fonts.fallback_delay", -1); pref("general.appname.override", "Netscape");
1 0
0 0
[tor-browser/tor-browser-52.1.0esr-7.0-2] fixup! TB4: Tor Browser's Firefox preference overrides.
by gk@torproject.org 22 May '17

22 May '17
commit 885479878d591ce61fa573912eae4ea062dc54c6 Author: Georg Koppen <gk(a)torproject.org> Date: Mon May 22 08:36:35 2017 +0000 fixup! TB4: Tor Browser's Firefox preference overrides. The Battery API is not available to content anymore since Firefox 52. Thus, we don't need to set `dom.battery.enabled` anymore. Fixes bug 5293. --- browser/app/profile/000-tor-browser.js | 1 - 1 file changed, 1 deletion(-) diff --git a/browser/app/profile/000-tor-browser.js b/browser/app/profile/000-tor-browser.js index fb7b078..7b0ad71 100644 --- a/browser/app/profile/000-tor-browser.js +++ b/browser/app/profile/000-tor-browser.js @@ -137,7 +137,6 @@ pref("social.whitelist", ""); pref("webgl.min_capability_mode", true); pref("webgl.disable-extensions", true); pref("webgl.disable-fail-if-major-performance-caveat", true); -pref("dom.battery.enabled", false); // fingerprinting due to differing OS implementations pref("dom.network.enabled",false); // fingerprinting due to differing OS implementations pref("gfx.downloadable_fonts.fallback_delay", -1); pref("general.appname.override", "Netscape");
1 0
0 0
[tor-browser/tor-browser-52.1.0esr-7.0-2] fixup! Bug 19273: Avoid JavaScript patching of the external app helper dialog.
by gk@torproject.org 22 May '17

22 May '17
commit 1d1fdea85218586354a1294cb94026279e74a0e3 Author: Kathy Brade <brade(a)pearlcrescent.com> Date: Fri May 19 11:25:31 2017 -0400 fixup! Bug 19273: Avoid JavaScript patching of the external app helper dialog. For e10s compatibility, send the "external-app-requested" observer notification later in the download process, and suspend active requests while doing so. Fixes bug 21766. This change also fixes a problem in the esr52-based browser where downloads stalled when e10s was disabled. Fixes bug 21886. --- netwerk/protocol/http/HttpBaseChannel.cpp | 7 ++++ netwerk/protocol/http/HttpBaseChannel.h | 1 + netwerk/protocol/http/NullHttpChannel.cpp | 6 ++++ netwerk/protocol/http/nsIHttpChannel.idl | 9 ++++- .../protocol/viewsource/nsViewSourceChannel.cpp | 11 ++++++ .../exthandler/nsExternalHelperAppService.cpp | 41 +++++++++++++++++----- 6 files changed, 66 insertions(+), 9 deletions(-) diff --git a/netwerk/protocol/http/HttpBaseChannel.cpp b/netwerk/protocol/http/HttpBaseChannel.cpp index e0f7ede..5ea6a00 100644 --- a/netwerk/protocol/http/HttpBaseChannel.cpp +++ b/netwerk/protocol/http/HttpBaseChannel.cpp @@ -1233,6 +1233,13 @@ NS_IMETHODIMP HttpBaseChannel::SetTopLevelContentWindowId(uint64_t aWindowId) return NS_OK; } +NS_IMETHODIMP HttpBaseChannel::IsPendingUnforced(bool *aIsPendingUnforced) +{ + NS_ENSURE_ARG_POINTER(aIsPendingUnforced); + *aIsPendingUnforced = mIsPending; + return NS_OK; +} + NS_IMETHODIMP HttpBaseChannel::GetTransferSize(uint64_t *aTransferSize) { diff --git a/netwerk/protocol/http/HttpBaseChannel.h b/netwerk/protocol/http/HttpBaseChannel.h index c8184a6..3a1a8ba 100644 --- a/netwerk/protocol/http/HttpBaseChannel.h +++ b/netwerk/protocol/http/HttpBaseChannel.h @@ -190,6 +190,7 @@ public: NS_IMETHOD SetChannelId(const nsACString& aChannelId) override; NS_IMETHOD GetTopLevelContentWindowId(uint64_t *aContentWindowId) override; NS_IMETHOD SetTopLevelContentWindowId(uint64_t aContentWindowId) override; + NS_IMETHOD IsPendingUnforced(bool *aIsPendingUnforced) override; // nsIHttpChannelInternal NS_IMETHOD GetDocumentURI(nsIURI **aDocumentURI) override; diff --git a/netwerk/protocol/http/NullHttpChannel.cpp b/netwerk/protocol/http/NullHttpChannel.cpp index 8c048a6..8b362cb 100644 --- a/netwerk/protocol/http/NullHttpChannel.cpp +++ b/netwerk/protocol/http/NullHttpChannel.cpp @@ -82,6 +82,12 @@ NullHttpChannel::SetTopLevelContentWindowId(uint64_t aWindowId) } NS_IMETHODIMP +NullHttpChannel::IsPendingUnforced(bool *_retval) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP NullHttpChannel::GetTransferSize(uint64_t *aTransferSize) { return NS_ERROR_NOT_IMPLEMENTED; diff --git a/netwerk/protocol/http/nsIHttpChannel.idl b/netwerk/protocol/http/nsIHttpChannel.idl index 75ec2c7..0de0676 100644 --- a/netwerk/protocol/http/nsIHttpChannel.idl +++ b/netwerk/protocol/http/nsIHttpChannel.idl @@ -14,7 +14,7 @@ interface nsIHttpHeaderVisitor; * the inspection of the resulting HTTP response status and headers when they * become available. */ -[builtinclass, scriptable, uuid(c5a4a073-4539-49c7-a3f2-cec3f0619c6c)] +[builtinclass, scriptable, uuid(e0d8071b-5389-48c2-92c7-6708c968044d)] interface nsIHttpChannel : nsIChannel { /************************************************************************** @@ -469,4 +469,11 @@ interface nsIHttpChannel : nsIChannel * this channels is being load in. */ attribute uint64_t topLevelContentWindowId; + + /** + * Returns true if a request is pending due to "natural" causes and + * not just because ForcePending() has been called. See isPending() + * in nsIRequest.idl for more details about pending requests. + */ + boolean isPendingUnforced(); }; diff --git a/netwerk/protocol/viewsource/nsViewSourceChannel.cpp b/netwerk/protocol/viewsource/nsViewSourceChannel.cpp index 9ed71c4..9f9b894 100644 --- a/netwerk/protocol/viewsource/nsViewSourceChannel.cpp +++ b/netwerk/protocol/viewsource/nsViewSourceChannel.cpp @@ -740,6 +740,17 @@ nsViewSourceChannel::SetTopLevelContentWindowId(uint64_t aWindowId) } NS_IMETHODIMP +nsViewSourceChannel::IsPendingUnforced(bool *result) +{ + if (mHttpChannel) { + return mHttpChannel->IsPendingUnforced(result); + } + + NS_ENSURE_TRUE(mChannel, NS_ERROR_FAILURE); + return mChannel->IsPending(result); +} + +NS_IMETHODIMP nsViewSourceChannel::GetRequestMethod(nsACString & aRequestMethod) { return !mHttpChannel ? NS_ERROR_NULL_POINTER : diff --git a/uriloader/exthandler/nsExternalHelperAppService.cpp b/uriloader/exthandler/nsExternalHelperAppService.cpp index dfaa218..4c25ae2 100644 --- a/uriloader/exthandler/nsExternalHelperAppService.cpp +++ b/uriloader/exthandler/nsExternalHelperAppService.cpp @@ -106,6 +106,7 @@ #include "mozilla/Preferences.h" #include "mozilla/ipc/URIUtils.h" +#include "mozilla/Unused.h" using namespace mozilla; using namespace mozilla::ipc; @@ -731,14 +732,6 @@ NS_IMETHODIMP nsExternalHelperAppService::DoContent(const nsACString& aMimeConte aForceSave, aWindowContext, aStreamListener); } - // Give other modules, including extensions, a chance to cancel. - bool doCancel = false; - nsresult rv = shouldCancel(&doCancel); - NS_ENSURE_SUCCESS(rv, rv); - if (doCancel) { - return NS_ERROR_FAILURE; - } - nsAutoString fileName; nsAutoCString fileExtension; uint32_t reason = nsIHelperAppLauncherDialog::REASON_CANTHANDLE; @@ -775,6 +768,7 @@ NS_IMETHODIMP nsExternalHelperAppService::DoContent(const nsACString& aMimeConte nsAutoCString query; // We only care about the query for HTTP and HTTPS URLs + nsresult rv; bool isHTTP, isHTTPS; rv = uri->SchemeIs("http", &isHTTP); if (NS_FAILED(rv)) { @@ -1675,6 +1669,37 @@ NS_IMETHODIMP nsExternalAppHandler::OnStartRequest(nsIRequest *request, nsISuppo return NS_OK; } + // Give other modules, including extensions, a chance to cancel. + // To avoid a problem where OnDataAvailable fires but is not handled + // correctly while a modal dialog displayed by Torbutton is open, we + // suspend and then we either cancel or resume active requests. + // See bugs 21766 and 21886. + bool isPending = false; + nsCOMPtr<nsIHttpChannel> httpChan = do_QueryInterface(request); + if (httpChan) { + rv = httpChan->IsPendingUnforced(&isPending); + } else { + rv = request->IsPending(&isPending); + } + NS_ENSURE_SUCCESS(rv, rv); + + if (isPending) { + Unused << request->Suspend(); // Best effort: ignore failures. + } + + bool doCancel = false; + rv = shouldCancel(&doCancel); + NS_ENSURE_SUCCESS(rv, rv); + if (doCancel) { + mCanceled = true; + request->Cancel(NS_BINDING_ABORTED); + return NS_OK; + } + + if (isPending) { + Unused << request->Resume(); // Best effort: ignore failures. + } + rv = SetUpTempFile(aChannel); if (NS_FAILED(rv)) { nsresult transferError = rv;
1 0
0 0
[tor-browser/tor-browser-52.1.1esr-7.0-1] fixup! Bug 19273: Avoid JavaScript patching of the external app helper dialog.
by gk@torproject.org 22 May '17

22 May '17
commit 4a4285cbd06a825e5f2277d12a2e5165eab59837 Author: Kathy Brade <brade(a)pearlcrescent.com> Date: Fri May 19 11:25:31 2017 -0400 fixup! Bug 19273: Avoid JavaScript patching of the external app helper dialog. For e10s compatibility, send the "external-app-requested" observer notification later in the download process, and suspend active requests while doing so. Fixes bug 21766. This change also fixes a problem in the esr52-based browser where downloads stalled when e10s was disabled. Fixes bug 21886. --- netwerk/protocol/http/HttpBaseChannel.cpp | 7 ++++ netwerk/protocol/http/HttpBaseChannel.h | 1 + netwerk/protocol/http/NullHttpChannel.cpp | 6 ++++ netwerk/protocol/http/nsIHttpChannel.idl | 9 ++++- .../protocol/viewsource/nsViewSourceChannel.cpp | 11 ++++++ .../exthandler/nsExternalHelperAppService.cpp | 41 +++++++++++++++++----- 6 files changed, 66 insertions(+), 9 deletions(-) diff --git a/netwerk/protocol/http/HttpBaseChannel.cpp b/netwerk/protocol/http/HttpBaseChannel.cpp index e0f7ede..5ea6a00 100644 --- a/netwerk/protocol/http/HttpBaseChannel.cpp +++ b/netwerk/protocol/http/HttpBaseChannel.cpp @@ -1233,6 +1233,13 @@ NS_IMETHODIMP HttpBaseChannel::SetTopLevelContentWindowId(uint64_t aWindowId) return NS_OK; } +NS_IMETHODIMP HttpBaseChannel::IsPendingUnforced(bool *aIsPendingUnforced) +{ + NS_ENSURE_ARG_POINTER(aIsPendingUnforced); + *aIsPendingUnforced = mIsPending; + return NS_OK; +} + NS_IMETHODIMP HttpBaseChannel::GetTransferSize(uint64_t *aTransferSize) { diff --git a/netwerk/protocol/http/HttpBaseChannel.h b/netwerk/protocol/http/HttpBaseChannel.h index c8184a6..3a1a8ba 100644 --- a/netwerk/protocol/http/HttpBaseChannel.h +++ b/netwerk/protocol/http/HttpBaseChannel.h @@ -190,6 +190,7 @@ public: NS_IMETHOD SetChannelId(const nsACString& aChannelId) override; NS_IMETHOD GetTopLevelContentWindowId(uint64_t *aContentWindowId) override; NS_IMETHOD SetTopLevelContentWindowId(uint64_t aContentWindowId) override; + NS_IMETHOD IsPendingUnforced(bool *aIsPendingUnforced) override; // nsIHttpChannelInternal NS_IMETHOD GetDocumentURI(nsIURI **aDocumentURI) override; diff --git a/netwerk/protocol/http/NullHttpChannel.cpp b/netwerk/protocol/http/NullHttpChannel.cpp index 8c048a6..8b362cb 100644 --- a/netwerk/protocol/http/NullHttpChannel.cpp +++ b/netwerk/protocol/http/NullHttpChannel.cpp @@ -82,6 +82,12 @@ NullHttpChannel::SetTopLevelContentWindowId(uint64_t aWindowId) } NS_IMETHODIMP +NullHttpChannel::IsPendingUnforced(bool *_retval) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP NullHttpChannel::GetTransferSize(uint64_t *aTransferSize) { return NS_ERROR_NOT_IMPLEMENTED; diff --git a/netwerk/protocol/http/nsIHttpChannel.idl b/netwerk/protocol/http/nsIHttpChannel.idl index 75ec2c7..0de0676 100644 --- a/netwerk/protocol/http/nsIHttpChannel.idl +++ b/netwerk/protocol/http/nsIHttpChannel.idl @@ -14,7 +14,7 @@ interface nsIHttpHeaderVisitor; * the inspection of the resulting HTTP response status and headers when they * become available. */ -[builtinclass, scriptable, uuid(c5a4a073-4539-49c7-a3f2-cec3f0619c6c)] +[builtinclass, scriptable, uuid(e0d8071b-5389-48c2-92c7-6708c968044d)] interface nsIHttpChannel : nsIChannel { /************************************************************************** @@ -469,4 +469,11 @@ interface nsIHttpChannel : nsIChannel * this channels is being load in. */ attribute uint64_t topLevelContentWindowId; + + /** + * Returns true if a request is pending due to "natural" causes and + * not just because ForcePending() has been called. See isPending() + * in nsIRequest.idl for more details about pending requests. + */ + boolean isPendingUnforced(); }; diff --git a/netwerk/protocol/viewsource/nsViewSourceChannel.cpp b/netwerk/protocol/viewsource/nsViewSourceChannel.cpp index 9ed71c4..9f9b894 100644 --- a/netwerk/protocol/viewsource/nsViewSourceChannel.cpp +++ b/netwerk/protocol/viewsource/nsViewSourceChannel.cpp @@ -740,6 +740,17 @@ nsViewSourceChannel::SetTopLevelContentWindowId(uint64_t aWindowId) } NS_IMETHODIMP +nsViewSourceChannel::IsPendingUnforced(bool *result) +{ + if (mHttpChannel) { + return mHttpChannel->IsPendingUnforced(result); + } + + NS_ENSURE_TRUE(mChannel, NS_ERROR_FAILURE); + return mChannel->IsPending(result); +} + +NS_IMETHODIMP nsViewSourceChannel::GetRequestMethod(nsACString & aRequestMethod) { return !mHttpChannel ? NS_ERROR_NULL_POINTER : diff --git a/uriloader/exthandler/nsExternalHelperAppService.cpp b/uriloader/exthandler/nsExternalHelperAppService.cpp index dfaa218..4c25ae2 100644 --- a/uriloader/exthandler/nsExternalHelperAppService.cpp +++ b/uriloader/exthandler/nsExternalHelperAppService.cpp @@ -106,6 +106,7 @@ #include "mozilla/Preferences.h" #include "mozilla/ipc/URIUtils.h" +#include "mozilla/Unused.h" using namespace mozilla; using namespace mozilla::ipc; @@ -731,14 +732,6 @@ NS_IMETHODIMP nsExternalHelperAppService::DoContent(const nsACString& aMimeConte aForceSave, aWindowContext, aStreamListener); } - // Give other modules, including extensions, a chance to cancel. - bool doCancel = false; - nsresult rv = shouldCancel(&doCancel); - NS_ENSURE_SUCCESS(rv, rv); - if (doCancel) { - return NS_ERROR_FAILURE; - } - nsAutoString fileName; nsAutoCString fileExtension; uint32_t reason = nsIHelperAppLauncherDialog::REASON_CANTHANDLE; @@ -775,6 +768,7 @@ NS_IMETHODIMP nsExternalHelperAppService::DoContent(const nsACString& aMimeConte nsAutoCString query; // We only care about the query for HTTP and HTTPS URLs + nsresult rv; bool isHTTP, isHTTPS; rv = uri->SchemeIs("http", &isHTTP); if (NS_FAILED(rv)) { @@ -1675,6 +1669,37 @@ NS_IMETHODIMP nsExternalAppHandler::OnStartRequest(nsIRequest *request, nsISuppo return NS_OK; } + // Give other modules, including extensions, a chance to cancel. + // To avoid a problem where OnDataAvailable fires but is not handled + // correctly while a modal dialog displayed by Torbutton is open, we + // suspend and then we either cancel or resume active requests. + // See bugs 21766 and 21886. + bool isPending = false; + nsCOMPtr<nsIHttpChannel> httpChan = do_QueryInterface(request); + if (httpChan) { + rv = httpChan->IsPendingUnforced(&isPending); + } else { + rv = request->IsPending(&isPending); + } + NS_ENSURE_SUCCESS(rv, rv); + + if (isPending) { + Unused << request->Suspend(); // Best effort: ignore failures. + } + + bool doCancel = false; + rv = shouldCancel(&doCancel); + NS_ENSURE_SUCCESS(rv, rv); + if (doCancel) { + mCanceled = true; + request->Cancel(NS_BINDING_ABORTED); + return NS_OK; + } + + if (isPending) { + Unused << request->Resume(); // Best effort: ignore failures. + } + rv = SetUpTempFile(aChannel); if (NS_FAILED(rv)) { nsresult transferError = rv;
1 0
0 0
[tor-browser-bundle/master] Bug 22267: fix setup of hardened mingw wrappers
by gk@torproject.org 21 May '17

21 May '17
commit 2db406eba4657e5876994002070f92ace6d2dcc3 Author: Nicolas Vigier <boklm(a)torproject.org> Date: Fri May 19 23:33:12 2017 +0200 Bug 22267: fix setup of hardened mingw wrappers Add the hardened wrappers to the PATH before running the firefox configure script. It seems that the wrappers are not used in the build if they were not in the PATH during the configure step. --- gitian/descriptors/windows/gitian-firefox.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/gitian/descriptors/windows/gitian-firefox.yml b/gitian/descriptors/windows/gitian-firefox.yml index a83ad5b..f3738eb 100644 --- a/gitian/descriptors/windows/gitian-firefox.yml +++ b/gitian/descriptors/windows/gitian-firefox.yml @@ -79,15 +79,16 @@ script: | find -type f -print0 | xargs -0 touch --date="$REFERENCE_DATETIME" # Make sure widl is not inserting random timestamps, see #21837. export WIDL_TIME_OVERRIDE="0" - rm -f configure - rm -f js/src/configure - make -f client.mk configure CONFIGURE_ARGS="--with-tor-browser-version=${TORBROWSER_VERSION} --with-distribution-id=org.torproject --enable-update-channel=${TORBROWSER_UPDATE_CHANNEL} --enable-bundled-fonts" - find -type f -print0 | xargs -0 touch --date="$REFERENCE_DATETIME" # mkdir -p ~/build/bin/ cp ~/build/i686* ~/build/bin/ export PATH=~/build/bin:$PATH # + rm -f configure + rm -f js/src/configure + make -f client.mk configure CONFIGURE_ARGS="--with-tor-browser-version=${TORBROWSER_VERSION} --with-distribution-id=org.torproject --enable-update-channel=${TORBROWSER_UPDATE_CHANNEL} --enable-bundled-fonts" + find -type f -print0 | xargs -0 touch --date="$REFERENCE_DATETIME" + # make $MAKEOPTS -f client.mk build # make -C obj-* package INNER_MAKE_PACKAGE=true
1 0
0 0
[tor-browser-build/master] Bug 22194/20683: Integrate Selfrando into alpha Linux builds
by boklm@torproject.org 17 May '17

17 May '17
commit 16d87451179ed55fd6422cd09988a99f5ee886b7 Author: Nicolas Vigier <boklm(a)torproject.org> Date: Thu May 18 00:10:16 2017 +0200 Bug 22194/20683: Integrate Selfrando into alpha Linux builds Selfrando is a new defense against code reuse attacks developed by the Redactor and Readactor++ people. We should give it a wider testing audience by including it in the alpha series. This is currently only available for 64bit Linux builds, though. Supporting other platforms and architectures is work in progress. tor-browser-bundle.git author: Georg Koppen <gk(a)torproject.org> tor-browser-bundle.git commit: 332c5b6c16f1b0915f537a4ad5af48295f80c733 tor-browser-bundle.git commit: 8fe0e322b950efa2456502428bee66dde8b4948a tor-browser-bundle.git commit: 3e752843dfa39beec844822c9f6c3dd1f80355ea --- keyring/elfutils.gpg | Bin 0 -> 10483 bytes keyring/selfrando.gpg | Bin 0 -> 2759 bytes projects/binutils/binutils-224-gold.patch | 98 +++++++++++++++++++++ projects/binutils/build | 6 ++ projects/binutils/config | 2 + projects/elfutils/build | 23 +++++ projects/elfutils/config | 22 +++++ projects/firefox/build | 9 ++ projects/firefox/config | 4 + projects/selfrando/build | 25 ++++++ projects/selfrando/config | 23 +++++ .../tor-browser/RelativeLink/start-tor-browser | 1 + 12 files changed, 213 insertions(+) diff --git a/keyring/elfutils.gpg b/keyring/elfutils.gpg new file mode 100644 index 0000000..f1cd4b3 Binary files /dev/null and b/keyring/elfutils.gpg differ diff --git a/keyring/selfrando.gpg b/keyring/selfrando.gpg new file mode 100644 index 0000000..276955d Binary files /dev/null and b/keyring/selfrando.gpg differ diff --git a/projects/binutils/binutils-224-gold.patch b/projects/binutils/binutils-224-gold.patch new file mode 100644 index 0000000..a45e49c --- /dev/null +++ b/projects/binutils/binutils-224-gold.patch @@ -0,0 +1,98 @@ +From f984741df04cd68bb116073fdfa9405808810ab4 Mon Sep 17 00:00:00 2001 +From: Cary Coutant <ccoutant(a)google.com> +Date: Wed, 5 Feb 2014 22:59:02 -0800 +Subject: [PATCH] Fix issues with gold undefined symbol diagnostics. + +PR binutils/15435 complains that gold issues a visibility error for an +weak undefined symbol with hidden visibility. The message should be +suppressed if the symbol is a weak undef. + +An earlier patch to add an extra note about key functions when a class's +vtable symbol is undefined missed a case where the reference to the +vtable came from a shared library. This patch moves the check to a +lower-level routine that catches both cases. + +gold/ + +2014-02-05 Cary Coutant <ccoutant(a)google.com> + + * errors.cc (Errors::undefined_symbol): Move undef vtable symbol + check to here. + * target-reloc.h (is_strong_undefined): New function. + (relocate_section): Move undef vtable symbol check from here. + Check for is_strong_undefined. + +diff --git a/gold/ChangeLog b/gold/ChangeLog +index dcf7ed41f8..dd7ef72980 100644 +--- a/gold/ChangeLog ++++ b/gold/ChangeLog +@@ -1,3 +1,14 @@ ++2014-02-05 Cary Coutant <ccoutant(a)google.com> ++ ++ Fix issues with gold undefined symbol diagnostics. ++ ++ PR binutils/15435 ++ * errors.cc (Errors::undefined_symbol): Move undef vtable symbol ++ check to here. ++ * target-reloc.h (is_strong_undefined): New function. ++ (relocate_section): Move undef vtable symbol check from here. ++ Check for is_strong_undefined. ++ + 2013-11-22 Cary Coutant <ccoutant(a)google.com> + + * testsuite/Makefile.am (exception_x86_64_bnd_test): Use in-tree +diff --git a/gold/errors.cc b/gold/errors.cc +index b79764bd1d..98db0fdd86 100644 +--- a/gold/errors.cc ++++ b/gold/errors.cc +@@ -193,6 +193,11 @@ Errors::undefined_symbol(const Symbol* sym, const std::string& location) + fprintf(stderr, + _("%s: %s: undefined reference to '%s', version '%s'\n"), + location.c_str(), zmsg, sym->demangled_name().c_str(), version); ++ ++ if (sym->is_cxx_vtable()) ++ gold_info(_("%s: the vtable symbol may be undefined because " ++ "the class is missing its key function"), ++ program_name); + } + + // Issue a debugging message. +diff --git a/gold/target-reloc.h b/gold/target-reloc.h +index b544c78f37..d609bcbaa8 100644 +--- a/gold/target-reloc.h ++++ b/gold/target-reloc.h +@@ -144,6 +144,12 @@ class Default_comdat_behavior + } + }; + ++inline bool ++is_strong_undefined(const Symbol* sym) ++{ ++ return sym->is_undefined() && sym->binding() != elfcpp::STB_WEAK; ++} ++ + // Give an error for a symbol with non-default visibility which is not + // defined locally. + +@@ -411,16 +417,10 @@ relocate_section( + } + + if (issue_undefined_symbol_error(sym)) +- { +- gold_undefined_symbol_at_location(sym, relinfo, i, offset); +- if (sym->is_cxx_vtable()) +- gold_info(_("%s: the vtable symbol may be undefined because " +- "the class is missing its key function"), +- program_name); +- } ++ gold_undefined_symbol_at_location(sym, relinfo, i, offset); + else if (sym != NULL + && sym->visibility() != elfcpp::STV_DEFAULT +- && (sym->is_undefined() || sym->is_from_dynobj())) ++ && (is_strong_undefined(sym) || sym->is_from_dynobj())) + visibility_error(sym); + + if (sym != NULL && sym->has_warning()) +-- +2.11.0 + diff --git a/projects/binutils/build b/projects/binutils/build index bd949a5..baef68f 100644 --- a/projects/binutils/build +++ b/projects/binutils/build @@ -26,6 +26,12 @@ cd [% project %]-[% c("version") %] # Zeroing timestamps in PE headers reliably, see bug 12753. patch -p1 < ../peXXigen.patch [% END -%] +[% IF c("var/linux-x86_64") -%] + # We need to work around a gold linker bug in 2.24 to get selfrando working, + # see bug 20683. + # XXX: 64bits only for now :(, see #20683. + patch -p1 < $rootdir/binutils-224-gold.patch +[% END -%] ./configure --prefix=$distdir [% c('var/configure_opt') %] make -j4 make install diff --git a/projects/binutils/config b/projects/binutils/config index 0cb2088..88640f8 100644 --- a/projects/binutils/config +++ b/projects/binutils/config @@ -21,3 +21,5 @@ input_files: enable: '[% c("var/windows") %]' - filename: peXXigen.patch enable: '[% c("var/windows") %]' + - filename: binutils-224-gold.patch + enable: '[% c("var/linux-x86_64") %]' diff --git a/projects/elfutils/build b/projects/elfutils/build new file mode 100644 index 0000000..8fdd013 --- /dev/null +++ b/projects/elfutils/build @@ -0,0 +1,23 @@ +#!/bin/bash +[% c("var/set_default_env") -%] +distdir=/var/tmp/dist/[% project %] +[% pc(c('var/compiler'), 'var/setup', { compiler_tarfile => c('input_files_by_name/' _ c('var/compiler')) }) %] + +mkdir -p /var/tmp/dist + +tar -C /var/tmp/dist -xf $rootdir/[% c('input_files_by_name/binutils') %] +export PATH="/var/tmp/dist/binutils/bin:$PATH" + +mkdir -p /var/tmp/build +tar -C /var/tmp/build -xf $rootdir/[% c('input_files_by_name/elfutils') %] + +cd /var/tmp/build/[% project %]-[% c("version") %] +./configure --prefix="$distdir" +make -j4 +make install + +cd /var/tmp/dist +[% c('tar', { + tar_src => [ project ], + tar_args => '-czf ' _ dest_dir _ '/' _ c('filename'), + }) %] diff --git a/projects/elfutils/config b/projects/elfutils/config new file mode 100644 index 0000000..2c21cf2 --- /dev/null +++ b/projects/elfutils/config @@ -0,0 +1,22 @@ +# vim: filetype=yaml sw=2 +version: '0.166' +filename: 'elfutils-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz' +tag_gpg_id: 1 + +var: + container: + use_container: 1 + arch_deps: + - zlib1g-dev + +input_files: + - project: container-image + - name: elfutils + URL: 'https://sourceware.org/elfutils/ftp/[% c("version") %]/elfutils-[% c("version") %].tar.bz2' + file_gpg_id: 1 + gpg_keyring: elfutils.gpg + sig_ext: sig + - name: '[% c("var/compiler") %]' + project: '[% c("var/compiler") %]' + - project: binutils + name: binutils diff --git a/projects/firefox/build b/projects/firefox/build index f445454..afb11bb 100644 --- a/projects/firefox/build +++ b/projects/firefox/build @@ -27,6 +27,15 @@ mkdir -p /var/tmp/build export PATH="/var/tmp/dist/binutils/bin:$PATH" [% END -%] +[% IF c("var/linux-x86_64") -%] + # XXX: 64bits only for now :(, see #20683. + tar -C /var/tmp/dist -xf $rootdir/[% c('input_files_by_name/selfrando') %] + # Selfrando wrapper + export PATH="/var/tmp/dist/selfrando/Tools/TorBrowser/tc-wrapper/:$PATH" + # We need to avoid the shuffling while building as this breaks compilation + export SELFRANDO_skip_shuffle= +[% END -%] + tar -C /var/tmp/build -xf [% project %]-[% c('version') %].tar.gz [% IF c("var/osx") %] diff --git a/projects/firefox/config b/projects/firefox/config index 9c807ad..1cd986f 100644 --- a/projects/firefox/config +++ b/projects/firefox/config @@ -71,6 +71,10 @@ input_files: - project: binutils name: binutils enable: '[% c("var/linux") %]' + - project: selfrando + name: selfrando + # XXX: 64bits only for now :(, see #20683. + enable: '[% c("var/linux-x86_64") %]' - filename: fix-info-plist.py enable: '[% c("var/osx") %]' - URL: https://people.torproject.org/~mikeperry/mirrors/sources/msvcr100.dll diff --git a/projects/selfrando/build b/projects/selfrando/build new file mode 100644 index 0000000..8bbd63e --- /dev/null +++ b/projects/selfrando/build @@ -0,0 +1,25 @@ +#!/bin/bash +[% c("var/set_default_env") -%] +distdir=/var/tmp/dist/[% project %] +[% pc(c('var/compiler'), 'var/setup', { compiler_tarfile => c('input_files_by_name/' _ c('var/compiler')) }) %] + +mkdir -p /var/tmp/dist + +tar -C /var/tmp/dist -xf $rootdir/[% c('input_files_by_name/elfutils') %] +tar -C /var/tmp/dist -xf $rootdir/[% c('input_files_by_name/binutils') %] +export PATH="/var/tmp/dist/binutils/bin:$PATH" + +tar -C /var/tmp/dist -xf $rootdir/[% project %]-[% c("version") %].tar.gz + +cd /var/tmp/dist +mv [% project %]-[% c("version") %] [% project %] +cd [% project %] +scons -Q arch=x86_64 LIBELF_PATH="/var/tmp/dist/elfutils" FORCE_INPLACE=1 DEBUG_LEVEL=env WRITE_LAYOUTS=env LOG=console +# Fix the path where we install selfrando +sed -i 's|^SR_PATH=.*|SR_PATH=/var/tmp/dist/selfrando/out/x86_64/bin|' Tools/TorBrowser/tc-wrapper/ld + +cd /var/tmp/dist +[% c('tar', { + tar_src => [ project ], + tar_args => '-czf ' _ dest_dir _ '/' _ c('filename'), + }) %] diff --git a/projects/selfrando/config b/projects/selfrando/config new file mode 100644 index 0000000..8b73080 --- /dev/null +++ b/projects/selfrando/config @@ -0,0 +1,23 @@ +# vim: filetype=yaml sw=2 +filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz' +version: 0.2 +git_hash: 'tb-v[% c("version") %]' +git_url: https://github.com/immunant/selfrando.git +gpg_keyring: selfrando.gpg +tag_gpg_id: 1 + +var: + container: + use_container: 1 + arch_deps: + - scons + - zlib1g-dev + +input_files: + - project: container-image + - name: binutils + project: binutils + - name: elfutils + project: elfutils + - name: '[% c("var/compiler") %]' + project: '[% c("var/compiler") %]' diff --git a/projects/tor-browser/RelativeLink/start-tor-browser b/projects/tor-browser/RelativeLink/start-tor-browser index a78b367..2dd40fc 100755 --- a/projects/tor-browser/RelativeLink/start-tor-browser +++ b/projects/tor-browser/RelativeLink/start-tor-browser @@ -270,6 +270,7 @@ fi LD_LIBRARY_PATH="${HOME}/TorBrowser/Tor/" export LD_LIBRARY_PATH +export SELFRANDO_write_layout_file= function setControlPortPasswd() { local ctrlPasswd=$1
1 0
0 0
  • ← Newer
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • ...
  • 11
  • Older →

HyperKitty Powered by HyperKitty version 1.3.12.