diff -Nru firefox-41.0+build3/browser/app/blocklist.xml firefox-41.0.1+build2/browser/app/blocklist.xml --- firefox-41.0+build3/browser/app/blocklist.xml 2015-09-18 08:49:06.000000000 +0000 +++ firefox-41.0.1+build2/browser/app/blocklist.xml 2015-10-01 13:55:18.000000000 +0000 @@ -1,5 +1,5 @@ - + @@ -331,7 +331,7 @@ - + @@ -939,7 +939,7 @@ - + @@ -1560,6 +1560,12 @@ + + + + + + @@ -1855,6 +1861,12 @@ browser.search.defaultenginename + + + + + + @@ -2511,6 +2523,12 @@ + + + + + + @@ -3183,6 +3201,10 @@ + + + https://get.adobe.com/flashplayer/ + @@ -3298,6 +3320,9 @@ AN9bfYOvlR1t + + CrTHPEE6AZSfI3jysin2bA== + diff -Nru firefox-41.0+build3/browser/components/places/content/bookmarkProperties.js firefox-41.0.1+build2/browser/components/places/content/bookmarkProperties.js --- firefox-41.0+build3/browser/components/places/content/bookmarkProperties.js 2015-09-18 08:49:06.000000000 +0000 +++ firefox-41.0.1+build2/browser/components/places/content/bookmarkProperties.js 2015-10-01 13:55:19.000000000 +0000 @@ -607,7 +607,7 @@ let folderGuid = yield PlacesUtils.promiseItemGuid(container); let bm = yield PlacesUtils.bookmarks.fetch({ parentGuid: folderGuid, - index: PlacesUtils.bookmarks.DEFAULT_INDEX + index: index }); this._itemId = yield PlacesUtils.promiseItemId(bm.guid); diff -Nru firefox-41.0+build3/browser/config/version_display.txt firefox-41.0.1+build2/browser/config/version_display.txt --- firefox-41.0+build3/browser/config/version_display.txt 2015-09-18 08:49:07.000000000 +0000 +++ firefox-41.0.1+build2/browser/config/version_display.txt 2015-10-01 13:55:20.000000000 +0000 @@ -1 +1 @@ -41.0 +41.0.1 diff -Nru firefox-41.0+build3/browser/config/version.txt firefox-41.0.1+build2/browser/config/version.txt --- firefox-41.0+build3/browser/config/version.txt 2015-09-18 08:49:07.000000000 +0000 +++ firefox-41.0.1+build2/browser/config/version.txt 2015-10-01 13:55:20.000000000 +0000 @@ -1 +1 @@ -41.0 +41.0.1 diff -Nru firefox-41.0+build3/caps/nsNullPrincipal.cpp firefox-41.0.1+build2/caps/nsNullPrincipal.cpp --- firefox-41.0+build3/caps/nsNullPrincipal.cpp 2015-09-18 08:49:10.000000000 +0000 +++ firefox-41.0.1+build2/caps/nsNullPrincipal.cpp 2015-10-01 13:55:23.000000000 +0000 @@ -173,6 +173,9 @@ NS_IMETHODIMP nsNullPrincipal::Write(nsIObjectOutputStream* aStream) { + NS_ENSURE_TRUE(mOriginAttributes.mAppId != nsIScriptSecurityManager::UNKNOWN_APP_ID, + NS_ERROR_INVALID_ARG); + nsAutoCString suffix; OriginAttributesRef().CreateSuffix(suffix); diff -Nru firefox-41.0+build3/caps/nsPrincipal.cpp firefox-41.0.1+build2/caps/nsPrincipal.cpp --- firefox-41.0+build3/caps/nsPrincipal.cpp 2015-09-18 08:49:10.000000000 +0000 +++ firefox-41.0.1+build2/caps/nsPrincipal.cpp 2015-10-01 13:55:23.000000000 +0000 @@ -395,6 +395,8 @@ nsPrincipal::Write(nsIObjectOutputStream* aStream) { NS_ENSURE_STATE(mCodebase); + NS_ENSURE_TRUE(mOriginAttributes.mAppId != nsIScriptSecurityManager::UNKNOWN_APP_ID, + NS_ERROR_INVALID_ARG); nsresult rv = NS_WriteOptionalCompoundObject(aStream, mCodebase, NS_GET_IID(nsIURI), true); diff -Nru firefox-41.0+build3/caps/tests/unit/test_origin.js firefox-41.0.1+build2/caps/tests/unit/test_origin.js --- firefox-41.0+build3/caps/tests/unit/test_origin.js 2015-09-18 08:49:10.000000000 +0000 +++ firefox-41.0.1+build2/caps/tests/unit/test_origin.js 2015-10-01 13:55:23.000000000 +0000 @@ -94,6 +94,19 @@ var simplePrin = ssm.getSimpleCodebasePrincipal(makeURI('http://example.com')); try { simplePrin.origin; do_check_true(false); } catch (e) { do_check_true(true); } + // Make sure we don't crash when serializing them either. + try { + let binaryStream = Cc["@mozilla.org/binaryoutputstream;1"]. + createInstance(Ci.nsIObjectOutputStream); + let pipe = Cc["@mozilla.org/pipe;1"].createInstance(Ci.nsIPipe); + pipe.init(false, false, 0, 0xffffffff, null); + binaryStream.setOutputStream(pipe.outputStream); + binaryStream.writeCompoundObject(simplePrin, Ci.nsISupports, true); + binaryStream.close(); + } catch (e) { + do_check_true(true); + } + // Check that all of the above are cross-origin. checkCrossOrigin(exampleOrg_app, exampleOrg); checkCrossOrigin(exampleOrg_app, nullPrin_app); diff -Nru firefox-41.0+build3/config/milestone.txt firefox-41.0.1+build2/config/milestone.txt --- firefox-41.0+build3/config/milestone.txt 2015-09-18 08:49:10.000000000 +0000 +++ firefox-41.0.1+build2/config/milestone.txt 2015-10-01 13:55:23.000000000 +0000 @@ -10,4 +10,4 @@ # hardcoded milestones in the tree from these two files. #-------------------------------------------------------- -41.0 +41.0.1 diff -Nru firefox-41.0+build3/debian/changelog firefox-41.0.1+build2/debian/changelog --- firefox-41.0+build3/debian/changelog 2015-09-18 09:42:40.000000000 +0000 +++ firefox-41.0.1+build2/debian/changelog 2015-10-01 17:38:20.000000000 +0000 @@ -1,3 +1,13 @@ +firefox (41.0.1+build2-0ubuntu0.14.04.1) trusty-security; urgency=medium + + * New upstream stable release (FIREFOX_41_0_1_BUILD2) + - see USN-2743-4 and LP: #1501277 + + * Disable the crash reporter as symbol uploads are currently broken. This + means that Apport will be catching crashes for now + + -- Chris Coulson Thu, 01 Oct 2015 18:14:34 +0100 + firefox (41.0+build3-0ubuntu0.14.04.1) trusty-security; urgency=medium * New upstream stable release (FIREFOX_41_0_BUILD3) diff -Nru firefox-41.0+build3/debian/config/branch.mk firefox-41.0.1+build2/debian/config/branch.mk --- firefox-41.0+build3/debian/config/branch.mk 2015-09-18 09:42:40.000000000 +0000 +++ firefox-41.0.1+build2/debian/config/branch.mk 2015-10-01 17:38:20.000000000 +0000 @@ -1,6 +1,6 @@ CHANNEL = release MOZ_WANT_UNIT_TESTS = 0 -MOZ_ENABLE_BREAKPAD = 1 +MOZ_ENABLE_BREAKPAD = 0 MOZILLA_REPO = http://hg.mozilla.org/releases/mozilla-release L10N_REPO = http://hg.mozilla.org/releases/l10n/mozilla-release diff -Nru firefox-41.0+build3/gfx/gl/GLBlitHelper.cpp firefox-41.0.1+build2/gfx/gl/GLBlitHelper.cpp --- firefox-41.0+build3/gfx/gl/GLBlitHelper.cpp 2015-09-18 08:49:54.000000000 +0000 +++ firefox-41.0.1+build2/gfx/gl/GLBlitHelper.cpp 2015-10-01 13:55:55.000000000 +0000 @@ -899,10 +899,8 @@ OriginPos destOrigin) { ScopedFramebufferForTexture autoFBForTex(mGL, destTex, destTarget); - - if (!autoFBForTex.IsComplete()) { - MOZ_CRASH("ScopedFramebufferForTexture failed."); - } + if (!autoFBForTex.IsComplete()) + return false; return BlitImageToFramebuffer(srcImage, destSize, autoFBForTex.FB(), destOrigin); } diff -Nru firefox-41.0+build3/ipc/glue/MessageChannel.cpp firefox-41.0.1+build2/ipc/glue/MessageChannel.cpp --- firefox-41.0+build3/ipc/glue/MessageChannel.cpp 2015-09-18 08:49:09.000000000 +0000 +++ firefox-41.0.1+build2/ipc/glue/MessageChannel.cpp 2015-10-01 13:55:22.000000000 +0000 @@ -853,6 +853,7 @@ #ifdef OS_WIN SyncStackFrame frame(this, false); + NeuteredWindowRegion neuteredRgn(mFlags & REQUIRE_DEFERRED_MESSAGE_PROTECTION); #endif CxxStackFrame f(*this, OUT_MESSAGE, msg); @@ -1032,6 +1033,19 @@ return false; } +#ifdef OS_WIN + // We need to limit the scoped of neuteredRgn to this spot in the code. + // Window neutering can't be enabled during some plugin calls because + // we then risk the neutered window procedure being subclassed by a + // plugin. + { + NeuteredWindowRegion neuteredRgn(mFlags & REQUIRE_DEFERRED_MESSAGE_PROTECTION); + /* We should pump messages at this point to ensure that the IPC peer + does not become deadlocked on a pending inter-thread SendMessage() */ + neuteredRgn.PumpOnce(); + } +#endif + // Now might be the time to process a message deferred because of race // resolution. MaybeUndeferIncall(); @@ -1148,6 +1162,7 @@ { #ifdef OS_WIN SyncStackFrame frame(this, true); + NeuteredWindowRegion neuteredRgn(mFlags & REQUIRE_DEFERRED_MESSAGE_PROTECTION); #endif { // Scope for lock diff -Nru firefox-41.0+build3/ipc/glue/MessageChannel.h firefox-41.0.1+build2/ipc/glue/MessageChannel.h --- firefox-41.0+build3/ipc/glue/MessageChannel.h 2015-09-18 08:49:09.000000000 +0000 +++ firefox-41.0.1+build2/ipc/glue/MessageChannel.h 2015-10-01 13:55:22.000000000 +0000 @@ -15,6 +15,9 @@ #include "mozilla/Monitor.h" #include "mozilla/Vector.h" #include "mozilla/WeakPtr.h" +#if defined(OS_WIN) +#include "mozilla/ipc/Neutering.h" +#endif // defined(OS_WIN) #include "mozilla/ipc/Transport.h" #include "MessageLink.h" #include "nsAutoPtr.h" diff -Nru firefox-41.0+build3/ipc/glue/moz.build firefox-41.0.1+build2/ipc/glue/moz.build --- firefox-41.0+build3/ipc/glue/moz.build 2015-09-18 08:49:09.000000000 +0000 +++ firefox-41.0.1+build2/ipc/glue/moz.build 2015-10-01 13:55:22.000000000 +0000 @@ -25,6 +25,7 @@ 'IOThreadChild.h', 'MessageChannel.h', 'MessageLink.h', + 'Neutering.h', 'ProcessChild.h', 'ProtocolUtils.h', 'ScopedXREEmbed.h', diff -Nru firefox-41.0+build3/ipc/glue/Neutering.h firefox-41.0.1+build2/ipc/glue/Neutering.h --- firefox-41.0+build3/ipc/glue/Neutering.h 1970-01-01 00:00:00.000000000 +0000 +++ firefox-41.0.1+build2/ipc/glue/Neutering.h 2015-10-01 13:55:22.000000000 +0000 @@ -0,0 +1,64 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef mozilla_ipc_Neutering_h +#define mozilla_ipc_Neutering_h + +#include "mozilla/GuardObjects.h" + +/** + * This header declares RAII wrappers for Window neutering. See + * WindowsMessageLoop.cpp for more details. + */ + +namespace mozilla { +namespace ipc { + +/** + * This class is a RAII wrapper around Window neutering. As long as a + * NeuteredWindowRegion object is instantiated, Win32 windows belonging to the + * current thread will be neutered. It is safe to nest multiple instances of + * this class. + */ +class MOZ_STACK_CLASS NeuteredWindowRegion +{ +public: + explicit NeuteredWindowRegion(bool aDoNeuter MOZ_GUARD_OBJECT_NOTIFIER_PARAM); + ~NeuteredWindowRegion(); + + /** + * This function clears any backlog of nonqueued messages that are pending for + * the current thread. + */ + void PumpOnce(); + +private: + MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER + bool mNeuteredByThis; +}; + +/** + * This class is analagous to MutexAutoUnlock for Mutex; it is an RAII class + * that is to be instantiated within a NeuteredWindowRegion, thus temporarily + * disabling neutering for the remainder of its enclosing block. + * @see NeuteredWindowRegion + */ +class MOZ_STACK_CLASS DeneuteredWindowRegion +{ +public: + DeneuteredWindowRegion(MOZ_GUARD_OBJECT_NOTIFIER_ONLY_PARAM); + ~DeneuteredWindowRegion(); + +private: + MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER + bool mReneuter; +}; + +} // namespace ipc +} // namespace mozilla + +#endif // mozilla_ipc_Neutering_h + diff -Nru firefox-41.0+build3/ipc/glue/WindowsMessageLoop.cpp firefox-41.0.1+build2/ipc/glue/WindowsMessageLoop.cpp --- firefox-41.0+build3/ipc/glue/WindowsMessageLoop.cpp 2015-09-18 08:49:09.000000000 +0000 +++ firefox-41.0.1+build2/ipc/glue/WindowsMessageLoop.cpp 2015-10-01 13:55:22.000000000 +0000 @@ -8,6 +8,7 @@ #include "mozilla/DebugOnly.h" #include "WindowsMessageLoop.h" +#include "Neutering.h" #include "MessageChannel.h" #include "nsAutoPtr.h" @@ -862,6 +863,86 @@ (aTimeout <= (PR_IntervalNow() - aStart)); } +static HHOOK gWindowHook; + +static inline void +StartNeutering() +{ + MOZ_ASSERT(gUIThreadId); + MOZ_ASSERT(!gWindowHook); + NS_ASSERTION(!MessageChannel::IsPumpingMessages(), + "Shouldn't be pumping already!"); + MessageChannel::SetIsPumpingMessages(true); + gWindowHook = ::SetWindowsHookEx(WH_CALLWNDPROC, CallWindowProcedureHook, + nullptr, gUIThreadId); + NS_ASSERTION(gWindowHook, "Failed to set hook!"); +} + +static void +StopNeutering() +{ + MOZ_ASSERT(MessageChannel::IsPumpingMessages()); + ::UnhookWindowsHookEx(gWindowHook); + gWindowHook = NULL; + ::UnhookNeuteredWindows(); + // Before returning we need to set a hook to run any deferred messages that + // we received during the IPC call. The hook will unset itself as soon as + // someone else calls GetMessage, PeekMessage, or runs code that generates + // a "nonqueued" message. + ::ScheduleDeferredMessageRun(); + MessageChannel::SetIsPumpingMessages(false); +} + +NeuteredWindowRegion::NeuteredWindowRegion(bool aDoNeuter MOZ_GUARD_OBJECT_NOTIFIER_PARAM_IN_IMPL) + : mNeuteredByThis(!gWindowHook && aDoNeuter) +{ + MOZ_GUARD_OBJECT_NOTIFIER_INIT; + if (mNeuteredByThis) { + StartNeutering(); + } +} + +NeuteredWindowRegion::~NeuteredWindowRegion() +{ + if (gWindowHook && mNeuteredByThis) { + StopNeutering(); + } +} + +void +NeuteredWindowRegion::PumpOnce() +{ + if (!gWindowHook) { + // This should be a no-op if nothing has been neutered. + return; + } + + MSG msg = {0}; + // Pump any COM messages so that we don't hang due to STA marshaling. + if (gCOMWindow && ::PeekMessageW(&msg, gCOMWindow, 0, 0, PM_REMOVE)) { + ::TranslateMessage(&msg); + ::DispatchMessageW(&msg); + } + // Expunge any nonqueued messages on the current thread. + ::PeekMessageW(&msg, nullptr, 0, 0, PM_NOREMOVE); +} + +DeneuteredWindowRegion::DeneuteredWindowRegion(MOZ_GUARD_OBJECT_NOTIFIER_ONLY_PARAM_IN_IMPL) + : mReneuter(gWindowHook != NULL) +{ + MOZ_GUARD_OBJECT_NOTIFIER_INIT; + if (mReneuter) { + StopNeutering(); + } +} + +DeneuteredWindowRegion::~DeneuteredWindowRegion() +{ + if (mReneuter) { + StartNeutering(); + } +} + bool MessageChannel::WaitForSyncNotify() { @@ -916,15 +997,6 @@ NS_ASSERTION(timerId, "SetTimer failed!"); } - // Setup deferred processing of native events while we wait for a response. - NS_ASSERTION(!MessageChannel::IsPumpingMessages(), - "Shouldn't be pumping already!"); - - MessageChannel::SetIsPumpingMessages(true); - HHOOK windowHook = SetWindowsHookEx(WH_CALLWNDPROC, CallWindowProcedureHook, - nullptr, gUIThreadId); - NS_ASSERTION(windowHook, "Failed to set hook!"); - { while (1) { MSG msg = { 0 }; @@ -998,25 +1070,11 @@ } } - // Unhook the neutered window procedure hook. - UnhookWindowsHookEx(windowHook); - - // Unhook any neutered windows procedures so messages can be delivered - // normally. - UnhookNeuteredWindows(); - - // Before returning we need to set a hook to run any deferred messages that - // we received during the IPC call. The hook will unset itself as soon as - // someone else calls GetMessage, PeekMessage, or runs code that generates - // a "nonqueued" message. - ScheduleDeferredMessageRun(); - if (timerId) { KillTimer(nullptr, timerId); + timerId = 0; } - MessageChannel::SetIsPumpingMessages(false); - return WaitResponse(timedout); } @@ -1050,56 +1108,28 @@ UINT_PTR timerId = 0; TimeoutData timeoutData = { 0 }; - // windowHook is used as a flag variable for the loop below: if it is set + // gWindowHook is used as a flag variable for the loop below: if it is set // and we start to spin a nested event loop, we need to clear the hook and // process deferred/pending messages. - // If windowHook is nullptr, MessageChannel::IsPumpingMessages should be false. - HHOOK windowHook = nullptr; - while (1) { - NS_ASSERTION((!!windowHook) == MessageChannel::IsPumpingMessages(), - "windowHook out of sync with reality"); + NS_ASSERTION((!!gWindowHook) == MessageChannel::IsPumpingMessages(), + "gWindowHook out of sync with reality"); if (mTopFrame->mSpinNestedEvents) { - if (windowHook) { - UnhookWindowsHookEx(windowHook); - windowHook = nullptr; - - if (timerId) { - KillTimer(nullptr, timerId); - timerId = 0; - } - - // Used by widget to assert on incoming native events - MessageChannel::SetIsPumpingMessages(false); - - // Unhook any neutered windows procedures so messages can be delievered - // normally. - UnhookNeuteredWindows(); - - // Send all deferred "nonqueued" message to the intended receiver. - // We're dropping into SpinInternalEventLoop so we should be fairly - // certain these will get delivered soohn. - ScheduleDeferredMessageRun(); + if (gWindowHook && timerId) { + KillTimer(nullptr, timerId); + timerId = 0; } + DeneuteredWindowRegion deneuteredRgn; SpinInternalEventLoop(); ResetEvent(mEvent); return true; } - if (!windowHook) { - MessageChannel::SetIsPumpingMessages(true); - windowHook = SetWindowsHookEx(WH_CALLWNDPROC, CallWindowProcedureHook, - nullptr, gUIThreadId); - NS_ASSERTION(windowHook, "Failed to set hook!"); - - NS_ASSERTION(!timerId, "Timer already initialized?"); - - if (mTimeoutMs != kNoTimeout) { - InitTimeoutData(&timeoutData, mTimeoutMs); - timerId = SetTimer(nullptr, 0, mTimeoutMs, nullptr); - NS_ASSERTION(timerId, "SetTimer failed!"); - } + if (mTimeoutMs != kNoTimeout && !timerId) { + InitTimeoutData(&timeoutData, mTimeoutMs); + timerId = SetTimer(nullptr, 0, mTimeoutMs, nullptr); + NS_ASSERTION(timerId, "SetTimer failed!"); } MSG msg = { 0 }; @@ -1151,27 +1181,11 @@ } } - if (windowHook) { - // Unhook the neutered window procedure hook. - UnhookWindowsHookEx(windowHook); - - // Unhook any neutered windows procedures so messages can be delivered - // normally. - UnhookNeuteredWindows(); - - // Before returning we need to set a hook to run any deferred messages that - // we received during the IPC call. The hook will unset itself as soon as - // someone else calls GetMessage, PeekMessage, or runs code that generates - // a "nonqueued" message. - ScheduleDeferredMessageRun(); - - if (timerId) { - KillTimer(nullptr, timerId); - } + if (timerId) { + KillTimer(nullptr, timerId); + timerId = 0; } - MessageChannel::SetIsPumpingMessages(false); - return WaitResponse(timedout); } diff -Nru firefox-41.0+build3/l10n/changesets firefox-41.0.1+build2/l10n/changesets --- firefox-41.0+build3/l10n/changesets 2015-09-18 09:04:09.000000000 +0000 +++ firefox-41.0.1+build2/l10n/changesets 2015-10-01 14:10:12.000000000 +0000 @@ -1,89 +1,89 @@ -ach 497:45bac39b5492 -af 790:03bbbeb8d097 -an 514:7a500e1d8976 -ar 1717:60dcbb4f75b1 -as 812:1057cc3608d5 -ast 1424:60e5054b79c7 -az 399:8aad57bec692 -be 1869:84bb5969e3c8 -bg 1164:fd961f273e9c -bn-BD 1042:a97d2e7d4dd6 -bn-IN 1013:6a8fce46c761 -br 1374:c2871742bfd4 -bs 688:a02b19fe4822 -ca 2525:612be31d9610 -cs 3892:99e0b1815d11 -cy 1155:e61a9e985003 -da 2232:edcaa61a766f -de 4939:dcae0003e446 -dsb 382:5d10cd835b62 -el 1334:4ca019ef7e6e -en-GB 2040:8a9252df2564 -en-ZA 657:f5bbb90cc0c6 -eo 1110:3d7d0959e575 -es-AR 2686:8ddc2be6accd -es-CL 1187:255167a13d57 -es-ES 4213:24d1dbc73ec5 -es-MX 1195:40a7dc8face4 -et 1893:46ba88cd0b1c -eu 1663:37b53aed3303 -fa 1151:3c519ce49d00 -ff 649:88b417cca212 -fi 2319:2bc62dfd521b -fr 7147:50a7c1646e24 -fy-NL 2649:c380ace29d7f -ga-IE 1828:e2d9addfd92b -gd 1740:897eafd62a31 -gl 3135:e2106dad4470 -gu-IN 1302:f4c8a03daafe -he 1531:a3af066d3267 -hi-IN 1042:6d9cefe17687 -hr 1815:60be458b9631 -hsb 494:488f355ce59c -hu 2350:a1906a4ee153 -hy-AM 1259:97cc02291bb1 -id 1738:283f5a18100a -is 1435:8e04edb70e33 -it 5815:1803bad4c615 -ja 2465:657034d92495 -ja-JP-mac 2048:66ac21b49532 -kk 1066:29c371c0ee43 -km 713:1eab8c8bf442 -kn 1061:85f1fbc00968 -ko 2038:2dd5fbdc583c -lij 743:60e0efb50e5f -lt 3047:13420ad1defa -lv 1325:bc224c3bba41 -mai 862:a80d34cf9416 -mk 676:0a727d0b8d80 -ml 1022:517538cc4d66 -mr 980:9a6f90e8a7c9 -ms 497:22b71445082d -nb-NO 2764:d588d675cb22 -nl 5643:6466ed7c3a4d -nn-NO 1565:4a6c7a8e3e36 -or 896:fbb44d7996ff -pa-IN 1953:c88f9a9680c8 -pl 7513:8ea5b814994d -pt-BR 2197:ed23bf3847c3 -pt-PT 4748:41a660b733a5 -rm 1340:42241ea59cbd -ro 1766:16bceae09545 -ru 4181:12f2f72c977a -si 1341:50af6ac9dae4 -sk 2168:1da31eb68280 -sl 2425:6687e516f5cc -son 827:fa26595f90b8 -sq 1985:91c58797d521 -sr 1143:c161f1d98a44 -sv-SE 4813:daa4edd93b91 -ta 932:5b2d5f72b240 -te 937:f8c05c329507 -th 1235:3167c3474c78 -tr 2223:e2bcba49b41f -uk 3023:83fc36cce4f4 -uz 265:e28e7c482989 -vi 1037:a366a6be5b2e -xh 558:2e6e096a8707 -zh-CN 2444:1c731d4f1f14 -zh-TW 2756:ca4dfd2087b8 +ach 499:c2e3ae51522a +af 792:eebe788e746c +an 516:700e58d0394a +ar 1720:f40576f0adc2 +as 814:17cd0e16711b +ast 1427:b07e62ded3e6 +az 401:c5500ef2d808 +be 1874:250e8c1d3550 +bg 1167:80d40bf8fa36 +bn-BD 1045:34726e24ecaf +bn-IN 1015:786bff442544 +br 1377:b3c6bf7bdf90 +bs 690:e26d0770dac0 +ca 2530:d9e16b2cd7f0 +cs 3897:06ddf934ac30 +cy 1158:2f85050fc0c4 +da 2235:a0fc40385fd0 +de 4944:c6f6c963f592 +dsb 385:e77cc65e0e0b +el 1337:f355846514fe +en-GB 2045:04683a714d45 +en-ZA 659:d51ab806b491 +eo 1112:8507116d53de +es-AR 2691:3fa5386404d3 +es-CL 1189:04f01e583154 +es-ES 4218:797b1eeac492 +es-MX 1197:0440b543d0eb +et 1896:ba53e858472e +eu 1666:50330999c2f4 +fa 1153:ebc7fcfb4410 +ff 651:c4d745e3b28f +fi 2324:602f036908b0 +fr 7152:8199033f46ab +fy-NL 2652:3d483a04967e +ga-IE 1831:bafc701634d5 +gd 1743:67004c851142 +gl 3140:a405a3ebb01a +gu-IN 1304:027a84c5295c +he 1534:3ff9a5f97c38 +hi-IN 1044:37fe9dbc2bcd +hr 1818:62ec10be6377 +hsb 497:fa7516fb8f84 +hu 2355:a38948cb04f7 +hy-AM 1262:d12e83ab71c0 +id 1741:2b76cc24bac4 +is 1438:909239ccc1db +it 5820:9765471bd706 +ja 2470:31caee28ab54 +ja-JP-mac 2053:9bcc3f292982 +kk 1068:17e2cd114088 +km 715:c1ffaaae8dda +kn 1063:f34cfcf5634d +ko 2041:83a59efd7ea3 +lij 745:f447d732e142 +lt 3052:e2dd1e1651a5 +lv 1327:6734c9abf3f4 +mai 864:4c35fe34e74c +mk 678:dbf58f778e33 +ml 1024:1e2718452ef5 +mr 982:a53fa672d577 +ms 499:07c77aa4569c +nb-NO 2769:fd0af101ea1c +nl 5648:d40795fab087 +nn-NO 1568:d4c9c18da401 +or 898:c2034d3a0236 +pa-IN 1956:f5f385fbf3c2 +pl 7518:e59e406ffdbf +pt-BR 2200:fad093c92f0e +pt-PT 4753:8bdfbc49077e +rm 1343:5087c0601312 +ro 1769:8120d38af651 +ru 4186:6183f3e01ac2 +si 1344:f04ea3bcf2c0 +sk 2173:eabb132d1bc7 +sl 2428:e1f30db0ef2a +son 829:7b09c46efea4 +sq 1988:a6e1eba10830 +sr 1146:081b73b604fc +sv-SE 4821:c9448cd22ab3 +ta 934:d4c87ca873f7 +te 939:9957e217021c +th 1237:88fda224f835 +tr 2228:bb4cc5e56996 +uk 3028:5ef5f7da70d1 +uz 267:1e71adceb977 +vi 1040:567d0a8388fd +xh 560:ea25084b4c5f +zh-CN 2449:a563f1454972 +zh-TW 2761:923dcc02b540 diff -Nru firefox-41.0+build3/layout/style/nsStyleSet.cpp firefox-41.0.1+build2/layout/style/nsStyleSet.cpp --- firefox-41.0+build3/layout/style/nsStyleSet.cpp 2015-09-18 08:49:09.000000000 +0000 +++ firefox-41.0.1+build2/layout/style/nsStyleSet.cpp 2015-10-01 13:55:22.000000000 +0000 @@ -385,6 +385,8 @@ nsresult nsStyleSet::GatherRuleProcessors(sheetType aType) { + NS_ENSURE_FALSE(mInShutdown, NS_ERROR_FAILURE); + nsCOMPtr oldRuleProcessor(mRuleProcessors[aType]); nsTArray> oldScopedDocRuleProcessors; if (aType == eAgentSheet || aType == eUserSheet) { diff -Nru firefox-41.0+build3/widget/GfxDriverInfo.cpp firefox-41.0.1+build2/widget/GfxDriverInfo.cpp --- firefox-41.0+build3/widget/GfxDriverInfo.cpp 2015-09-18 08:49:36.000000000 +0000 +++ firefox-41.0.1+build2/widget/GfxDriverInfo.cpp 2015-10-01 13:55:32.000000000 +0000 @@ -266,6 +266,12 @@ case Bug1155608: APPEND_DEVICE(0x2e22); /* IntelG45_1 */ break; + case Bug1207665: + APPEND_DEVICE(0xa001); /* Intel Media Accelerator 3150 */ + APPEND_DEVICE(0xa002); + APPEND_DEVICE(0xa011); + APPEND_DEVICE(0xa012); + break; case AMDRadeonHD5800: APPEND_DEVICE(0x6899); break; diff -Nru firefox-41.0+build3/widget/GfxDriverInfo.h firefox-41.0.1+build2/widget/GfxDriverInfo.h --- firefox-41.0+build3/widget/GfxDriverInfo.h 2015-09-18 08:49:36.000000000 +0000 +++ firefox-41.0.1+build2/widget/GfxDriverInfo.h 2015-10-01 13:55:32.000000000 +0000 @@ -92,6 +92,7 @@ Bug1137716, Bug1116812, Bug1155608, + Bug1207665, DeviceFamilyMax }; diff -Nru firefox-41.0+build3/widget/windows/GfxInfo.cpp firefox-41.0.1+build2/widget/windows/GfxInfo.cpp --- firefox-41.0+build3/widget/windows/GfxInfo.cpp 2015-09-18 08:49:44.000000000 +0000 +++ firefox-41.0.1+build2/widget/windows/GfxInfo.cpp 2015-10-01 13:55:34.000000000 +0000 @@ -1084,6 +1084,18 @@ nsIGfxInfo::FEATURE_DIRECT3D_11_LAYERS, nsIGfxInfo::FEATURE_BLOCKED_DEVICE, DRIVER_LESS_THAN, GfxDriverInfo::allDriverVersions ); + /* Disable D3D11 layers on Intel GMA 3150 for failing to allocate a shared handle for textures. + * See bug 1207665. Additionally block D2D so we don't accidentally use WARP. + */ + APPEND_TO_DRIVER_BLOCKLIST2(DRIVER_OS_ALL, + (nsAString&) GfxDriverInfo::GetDeviceVendor(VendorIntel), (GfxDeviceFamily*) GfxDriverInfo::GetDeviceFamily(Bug1207665), + nsIGfxInfo::FEATURE_DIRECT3D_11_LAYERS, nsIGfxInfo::FEATURE_BLOCKED_DEVICE, + DRIVER_LESS_THAN, GfxDriverInfo::allDriverVersions ); + APPEND_TO_DRIVER_BLOCKLIST2(DRIVER_OS_ALL, + (nsAString&) GfxDriverInfo::GetDeviceVendor(VendorIntel), (GfxDeviceFamily*) GfxDriverInfo::GetDeviceFamily(Bug1207665), + nsIGfxInfo::FEATURE_DIRECT2D, nsIGfxInfo::FEATURE_BLOCKED_DEVICE, + DRIVER_LESS_THAN, GfxDriverInfo::allDriverVersions ); + /* Disable D2D on AMD Catalyst 14.4 until 14.6 * See bug 984488 */