crash near null in [@ nsPrintJob::InitPrintDocConstruction]
Categories
(Core :: Print Preview, defect)
Tracking
()
| Tracking | Status | |
|---|---|---|
| firefox-esr78 | --- | unaffected |
| firefox81 | --- | wontfix |
| firefox82 | --- | fixed |
| firefox83 | --- | fixed |
People
(Reporter: tsmith, Assigned: emilio)
References
(Blocks 2 open bugs)
Details
(Keywords: assertion, crash, testcase, Whiteboard: [print2020_v82] [old-ui?])
Attachments
(3 files)
|
228 bytes,
text/html
|
Details | |
|
47 bytes,
text/x-phabricator-request
|
jcristau
:
approval-mozilla-beta+
|
Details | Review |
|
9.05 KB,
application/x-javascript
|
Details |
Report from m-c 20200917-084477976b2d
==27030==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000020 (pc 0x7f1390842f2c bp 0x7ffc2bbd63b0 sp 0x7ffc2bbd62a0 T0)
==27030==The signal is caused by a READ memory access.
==27030==Hint: address points to the zero page.
#0 0x7f1390842f2c in get /builds/worker/workspace/obj-build/dist/include/mozilla/UniquePtr.h:287:32
#1 0x7f1390842f2c in operator-> /builds/worker/workspace/obj-build/dist/include/mozilla/UniquePtr.h:282:12
#2 0x7f1390842f2c in nsPrintJob::InitPrintDocConstruction(bool) /gecko/layout/printing/nsPrintJob.cpp:1494:25
#3 0x7f13908506d8 in nsPrintJob::Observe(nsISupports*, char const*, char16_t const*) /gecko/layout/printing/nsPrintJob.cpp:2622:17
#4 0x7f1393631678 in nsPrintProgress::DoneIniting() /gecko/toolkit/components/printingui/nsPrintProgress.cpp:165:17
#5 0x7f1387ab7431 in NS_InvokeByIndex /gecko/xpcom/reflect/xptcall/md/unix/xptcinvoke_asm_x86_64_unix.S:101
#6 0x7f1389b51948 in Invoke /gecko/js/xpconnect/src/XPCWrappedNative.cpp:1620:10
#7 0x7f1389b51948 in Call /gecko/js/xpconnect/src/XPCWrappedNative.cpp:1176:19
#8 0x7f1389b51948 in XPCWrappedNative::CallMethod(XPCCallContext&, XPCWrappedNative::CallMode) /gecko/js/xpconnect/src/XPCWrappedNative.cpp:1142:23
#9 0x7f1389b56f24 in XPC_WN_CallMethod(JSContext*, unsigned int, JS::Value*) /gecko/js/xpconnect/src/XPCWrappedNativeJSOps.cpp:947:10
#10 0x7f1393908068 in CallJSNative /gecko/js/src/vm/Interpreter.cpp:508:13
#11 0x7f1393908068 in js::InternalCallOrConstruct(JSContext*, JS::CallArgs const&, js::MaybeConstruct, js::CallReason) /gecko/js/src/vm/Interpreter.cpp:600:12
#12 0x7f139390a38b in InternalCall(JSContext*, js::AnyInvokeArgs const&, js::CallReason) /gecko/js/src/vm/Interpreter.cpp:665:10
#13 0x7f13938f1101 in CallFromStack /gecko/js/src/vm/Interpreter.cpp:669:10
#14 0x7f13938f1101 in Interpret(JSContext*, js::RunState&) /gecko/js/src/vm/Interpreter.cpp:3337:16
#15 0x7f13938d1cd0 in js::RunScript(JSContext*, js::RunState&) /gecko/js/src/vm/Interpreter.cpp:469:13
#16 0x7f13939081f9 in js::InternalCallOrConstruct(JSContext*, JS::CallArgs const&, js::MaybeConstruct, js::CallReason) /gecko/js/src/vm/Interpreter.cpp:637:13
#17 0x7f139390a38b in InternalCall(JSContext*, js::AnyInvokeArgs const&, js::CallReason) /gecko/js/src/vm/Interpreter.cpp:665:10
#18 0x7f139390a710 in js::Call(JSContext*, JS::Handle<JS::Value>, JS::Handle<JS::Value>, js::AnyInvokeArgs const&, JS::MutableHandle<JS::Value>, js::CallReason) /gecko/js/src/vm/Interpreter.cpp:682:8
#19 0x7f1393a99a32 in JS::Call(JSContext*, JS::Handle<JS::Value>, JS::Handle<JS::Value>, JS::HandleValueArray const&, JS::MutableHandle<JS::Value>) /gecko/js/src/jsapi.cpp:2821:10
#20 0x7f138cea7864 in mozilla::dom::Function::Call(mozilla::dom::BindingCallContext&, JS::Handle<JS::Value>, nsTArray<JS::Value> const&, JS::MutableHandle<JS::Value>, mozilla::ErrorResult&) /builds/worker/workspace/obj-build/dom/bindings/FunctionBinding.cpp:45:8
#21 0x7f138b609a2a in void mozilla::dom::Function::Call<nsCOMPtr<nsIGlobalObject> >(nsCOMPtr<nsIGlobalObject> const&, nsTArray<JS::Value> const&, JS::MutableHandle<JS::Value>, mozilla::ErrorResult&, char const*, mozilla::dom::CallbackObject::ExceptionHandling, JS::Realm*) /builds/worker/workspace/obj-build/dist/include/mozilla/dom/FunctionBinding.h:73:12
#22 0x7f138b609693 in mozilla::dom::CallbackTimeoutHandler::Call(char const*) /gecko/dom/base/TimeoutHandler.cpp:167:29
#23 0x7f138b23ea05 in nsGlobalWindowInner::RunTimeoutHandler(mozilla::dom::Timeout*, nsIScriptContext*) /gecko/dom/base/nsGlobalWindowInner.cpp:6094:38
#24 0x7f138b604b1a in mozilla::dom::TimeoutManager::RunTimeout(mozilla::TimeStamp const&, mozilla::TimeStamp const&, bool) /gecko/dom/base/TimeoutManager.cpp:916:44
#25 0x7f138b6036a5 in mozilla::dom::TimeoutExecutor::MaybeExecute() /gecko/dom/base/TimeoutExecutor.cpp:179:11
#26 0x7f138b6070fb in mozilla::dom::TimeoutExecutor::Run() /gecko/dom/base/TimeoutExecutor.cpp:234:5
#27 0x7f1387a943f3 in mozilla::ThrottledEventQueue::Inner::ExecuteRunnable() /gecko/xpcom/threads/ThrottledEventQueue.cpp:254:22
#28 0x7f1387a873ef in mozilla::ThrottledEventQueue::Inner::Executor::Run() /gecko/xpcom/threads/ThrottledEventQueue.cpp:81:15
#29 0x7f1387a88b59 in mozilla::RunnableTask::Run() /gecko/xpcom/threads/TaskController.cpp:244:16
#30 0x7f1387a479f3 in mozilla::TaskController::DoExecuteNextTaskOnlyMainThreadInternal(mozilla::detail::BaseAutoLock<mozilla::Mutex&> const&) /gecko/xpcom/threads/TaskController.cpp:514:26
#31 0x7f1387a453d7 in mozilla::TaskController::ExecuteNextTaskOnlyMainThreadInternal(mozilla::detail::BaseAutoLock<mozilla::Mutex&> const&) /gecko/xpcom/threads/TaskController.cpp:373:15
#32 0x7f1387a4582d in mozilla::TaskController::ProcessPendingMTTask(bool) /gecko/xpcom/threads/TaskController.cpp:170:36
#33 0x7f1387a966f1 in operator() /gecko/xpcom/threads/TaskController.cpp:84:37
#34 0x7f1387a966f1 in mozilla::detail::RunnableFunction<mozilla::TaskController::InitializeInternal()::$_0>::Run() /builds/worker/workspace/obj-build/dist/include/nsThreadUtils.h:577:5
#35 0x7f1387a6ae03 in nsThread::ProcessNextEvent(bool, bool*) /gecko/xpcom/threads/nsThread.cpp:1234:14
#36 0x7f1387a74efc in NS_ProcessNextEvent(nsIThread*, bool) /gecko/xpcom/threads/nsThreadUtils.cpp:513:10
#37 0x7f1388d4aa8f in mozilla::ipc::MessagePump::Run(base::MessagePump::Delegate*) /gecko/ipc/glue/MessagePump.cpp:87:21
#38 0x7f1388c4f281 in RunInternal /gecko/ipc/chromium/src/base/message_loop.cc:334:10
#39 0x7f1388c4f281 in RunHandler /gecko/ipc/chromium/src/base/message_loop.cc:327:3
#40 0x7f1388c4f281 in MessageLoop::Run() /gecko/ipc/chromium/src/base/message_loop.cc:309:3
#41 0x7f138f9b0ee7 in nsBaseAppShell::Run() /gecko/widget/nsBaseAppShell.cpp:137:27
#42 0x7f139348006a in nsAppStartup::Run() /gecko/toolkit/components/startup/nsAppStartup.cpp:270:30
#43 0x7f139369cec8 in XREMain::XRE_mainRun() /gecko/toolkit/xre/nsAppRunner.cpp:4753:22
#44 0x7f139369f23b in XREMain::XRE_main(int, char**, mozilla::BootstrapConfig const&) /gecko/toolkit/xre/nsAppRunner.cpp:4945:8
#45 0x7f139369fb43 in XRE_main(int, char**, mozilla::BootstrapConfig const&) /gecko/toolkit/xre/nsAppRunner.cpp:5002:21
#46 0x561be5654ab5 in do_main /gecko/browser/app/nsBrowserApp.cpp:218:22
#47 0x561be5654ab5 in main /gecko/browser/app/nsBrowserApp.cpp:336:16
Comment 1•5 years ago
|
||
Presumably it doesn't happen on the old print preview UI, but I am not 100% sure.
| Reporter | ||
Comment 2•5 years ago
|
||
Xvfb seems to be required which is used in automation.
The same test case also triggers:
Assertion failure: aSource->GetFormat() == gfx::SurfaceFormat::R8G8B8X8 || aSource->GetFormat() == gfx::SurfaceFormat::B8G8R8X8, at obj-build/dist/include/mozilla/layers/Effects.h:281
#0 0x7f149b18ee88 in mozilla::layers::CreateTexturedEffect(mozilla::layers::TextureSource*, mozilla::layers::TextureSource*, mozilla::gfx::SamplingFilter, bool) /builds/worker/workspace/obj-build/dist/include/mozilla/layers/Effects.h:280:5
#1 0x7f149b18d3d6 in mozilla::layers::ContentHostTexture::Composite(mozilla::layers::Compositor*, mozilla::layers::LayerComposite*, mozilla::layers::EffectChain&, float, mozilla::gfx::Matrix4x4Typed<mozilla::gfx::UnknownUnits, mozilla::gfx::UnknownUnits, float> const&, mozilla::gfx::SamplingFilter, mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&, mozilla::gfx::IntRegionTyped<mozilla::gfx::UnknownUnits> const*, mozilla::Maybe<mozilla::gfx::PolygonTyped<mozilla::gfx::UnknownUnits> > const&) src/gfx/layers/composite/ContentHost.cpp:56:35
#2 0x7f149b1b1f22 in operator() src/gfx/layers/composite/PaintedLayerComposite.cpp:111:18
#3 0x7f149b1b1f22 in RenderWithAllMasks<(lambda at src/gfx/layers/composite/PaintedLayerComposite.cpp:108:7)> src/gfx/layers/composite/LayerManagerComposite.h:747:5
#4 0x7f149b1b1f22 in mozilla::layers::PaintedLayerComposite::RenderLayer(mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&, mozilla::Maybe<mozilla::gfx::PolygonTyped<mozilla::gfx::UnknownUnits> > const&) src/gfx/layers/composite/PaintedLayerComposite.cpp:106:3
#5 0x7f149b1c5ff4 in void mozilla::layers::RenderLayers<mozilla::layers::ContainerLayerComposite>(mozilla::layers::ContainerLayerComposite*, mozilla::layers::LayerManagerComposite*, mozilla::gfx::IntRectTyped<mozilla::RenderTargetPixel> const&, mozilla::Maybe<mozilla::gfx::PolygonTyped<mozilla::gfx::UnknownUnits> > const&) src/gfx/layers/composite/ContainerLayerComposite.cpp:475:22
#6 0x7f149b1898d1 in void mozilla::layers::ContainerRender<mozilla::layers::ContainerLayerComposite>(mozilla::layers::ContainerLayerComposite*, mozilla::layers::LayerManagerComposite*, mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&, mozilla::Maybe<mozilla::gfx::PolygonTyped<mozilla::gfx::UnknownUnits> > const&) src/gfx/layers/composite/ContainerLayerComposite.cpp:647:5
#7 0x7f149b1ad6a7 in mozilla::layers::LayerManagerComposite::Render(mozilla::gfx::IntRegionTyped<mozilla::gfx::UnknownUnits> const&, mozilla::gfx::IntRegionTyped<mozilla::gfx::UnknownUnits> const&)::$_2::operator()(mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&) const src/gfx/layers/composite/LayerManagerComposite.cpp:1184:18
#8 0x7f149b1a7300 in mozilla::layers::LayerManagerComposite::Render(mozilla::gfx::IntRegionTyped<mozilla::gfx::UnknownUnits> const&, mozilla::gfx::IntRegionTyped<mozilla::gfx::UnknownUnits> const&) src/gfx/layers/composite/LayerManagerComposite.cpp:1242:7
#9 0x7f149b1a63fb in mozilla::layers::LayerManagerComposite::UpdateAndRender() src/gfx/layers/composite/LayerManagerComposite.cpp:662:19
#10 0x7f149b1a5d24 in mozilla::layers::LayerManagerComposite::EndTransaction(mozilla::TimeStamp const&, mozilla::layers::LayerManager::EndTransactionFlags) src/gfx/layers/composite/LayerManagerComposite.cpp:579:5
#11 0x7f149b1f149b in mozilla::layers::CompositorBridgeParent::CompositeToTarget(mozilla::layers::BaseTransactionId<mozilla::VsyncIdType>, mozilla::gfx::DrawTarget*, mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const*) src/gfx/layers/ipc/CompositorBridgeParent.cpp:1042:18
#12 0x7f149b2081e0 in mozilla::layers::CompositorVsyncScheduler::Composite(mozilla::VsyncEvent const&) src/gfx/layers/ipc/CompositorVsyncScheduler.cpp:256:27
#13 0x7f149b221c48 in applyImpl<mozilla::layers::CompositorVsyncScheduler, void (mozilla::layers::CompositorVsyncScheduler::*)(const mozilla::VsyncEvent &), StoreCopyPassByConstLRef<mozilla::VsyncEvent> , 0> /builds/worker/workspace/obj-build/dist/include/nsThreadUtils.h:1188:12
#14 0x7f149b221c48 in apply<mozilla::layers::CompositorVsyncScheduler, void (mozilla::layers::CompositorVsyncScheduler::*)(const mozilla::VsyncEvent &)> /builds/worker/workspace/obj-build/dist/include/nsThreadUtils.h:1194:12
#15 0x7f149b221c48 in mozilla::detail::RunnableMethodImpl<mozilla::layers::CompositorVsyncScheduler*, void (mozilla::layers::CompositorVsyncScheduler::*)(mozilla::VsyncEvent const&), true, (mozilla::RunnableKind)1, mozilla::VsyncEvent>::Run() /builds/worker/workspace/obj-build/dist/include/nsThreadUtils.h:1240:13
#16 0x7f149995a4a7 in nsThread::ProcessNextEvent(bool, bool*) src/xpcom/threads/nsThread.cpp:1234:14
#17 0x7f149995fcba in NS_ProcessNextEvent(nsIThread*, bool) src/xpcom/threads/nsThreadUtils.cpp:513:10
#18 0x7f149a25644d in mozilla::ipc::MessagePumpForNonMainThreads::Run(base::MessagePump::Delegate*) src/ipc/glue/MessagePump.cpp:302:20
#19 0x7f149a1c8063 in MessageLoop::RunInternal() src/ipc/chromium/src/base/message_loop.cc:334:10
#20 0x7f149a1c7f7d in RunHandler src/ipc/chromium/src/base/message_loop.cc:327:3
#21 0x7f149a1c7f7d in MessageLoop::Run() src/ipc/chromium/src/base/message_loop.cc:309:3
#22 0x7f1499956921 in nsThread::ThreadFunc(void*) src/xpcom/threads/nsThread.cpp:442:10
#23 0x7f14ae085abb in _pt_root src/nsprpub/pr/src/pthreads/ptthread.c:201:5
#24 0x7f14ae5ff608 in start_thread /build/glibc-YYA7BZ/glibc-2.31/nptl/pthread_create.c:477:8
#25 0x7f14ae1c8102 in clone /build/glibc-YYA7BZ/glibc-2.31/misc/../sysdeps/unix/sysv/linux/x86_64/clone.S:95
Comment 3•5 years ago
|
||
It looks like mPrintObject is null when we try to dereference it in InitPrintDocConstruction. I'm not sure how mPrt->mPrintObject can be null when mPrt must be non-null. We don't appear to null out mPrt->mPrintObject.
At any rate, it looks like nsPrintJob::Observe should be checking mIsDestroying before trying to call InitPrintDocConstruction. (I would have said it should check mPrt, but...)
Emilio, Bob, you were both involved it changing the lifetime of nsPrintJob. Any thoughts on this?
Comment 4•5 years ago
|
||
(In reply to Jonathan Watt [:jwatt] from comment #3)
It looks like
mPrintObjectis null when we try to dereference it in InitPrintDocConstruction. I'm not sure howmPrt->mPrintObjectcan be null whenmPrtmust be non-null. We don't appear to null outmPrt->mPrintObject.At any rate, it looks like
nsPrintJob::Observeshould be checkingmIsDestroyingbefore trying to callInitPrintDocConstruction. (I would have said it should checkmPrt, but...)Emilio, Bob, you were both involved it changing the lifetime of
nsPrintJob. Any thoughts on this?
Isn't it that mPrt is null?
| Assignee | ||
Comment 6•5 years ago
|
||
Actually, I lie... Tyson, is there any chance you can create a pernosco recording of this, or any pref that we may be missing?
| Assignee | ||
Comment 7•5 years ago
|
||
But yeah, I agree with bob that given the test-case this is just mPrt just being null, and a null-check is the right thing to do because the page is already gone due to the reload(true).
| Assignee | ||
Comment 8•5 years ago
|
||
| Reporter | ||
Comment 9•5 years ago
|
||
(In reply to Emilio Cobos Álvarez (:emilio) from comment #6)
Actually, I lie... Tyson, is there any chance you can create a pernosco recording of this, or any pref that we may be missing?
Sorry this one does not want to repro under rr. I'm not sure if it's rr or the -O0 -g builds.
| Reporter | ||
Comment 10•5 years ago
|
||
Here is the prefs.js file that was used. browser.tabs.remote.autostart=false also we were running under Xvfb.
Comment 11•5 years ago
|
||
Comment 12•5 years ago
|
||
| bugherder | ||
| Assignee | ||
Comment 14•5 years ago
|
||
Comment on attachment 9177221 [details]
Bug 1665779 - Null-check mPrt in nsPrintJob::InitPrintDocConstruction. r=bobowen
Beta/Release Uplift Approval Request
- User impact if declined: potential crashes
- Is this code covered by automated tests?: Yes
- Has the fix been verified in Nightly?: No
- Needs manual test from QE?: No
- If yes, steps to reproduce: I couldn't reproduce this locally, only fuzzers have hit this so far.
- List of other uplifts needed: none
- Risk to taking this patch: Low
- Why is the change risky/not risky? (and alternatives if risky): null-check
- String changes made/needed: none
Comment 15•5 years ago
|
||
Comment on attachment 9177221 [details]
Bug 1665779 - Null-check mPrt in nsPrintJob::InitPrintDocConstruction. r=bobowen
approved for 82.0b3
Comment 16•5 years ago
|
||
| bugherder uplift | ||
Updated•5 years ago
|
Updated•4 years ago
|
Description
•