Assertion failure: GetGlyphCount() == 0 (Glyph count already set), at src/gfx/thebes/gfxFont.h:918
Categories
(Core :: Graphics: Text, defect, P2)
Tracking
()
Tracking | Status | |
---|---|---|
firefox-esr78 | --- | unaffected |
firefox82 | --- | wontfix |
firefox83 | --- | fixed |
People
(Reporter: tsmith, Assigned: jfkthame)
References
(Blocks 1 open bug)
Details
(Keywords: assertion, testcase)
Attachments
(2 files, 2 obsolete files)
Assertion failure: GetGlyphCount() == 0 (Glyph count already set), at src/gfx/thebes/gfxFont.h:918
#0 0x7fb04f8103f7 in gfxShapedText::CompressedGlyph::SetGlyphCount(unsigned int) /builds/worker/workspace/obj-build/dist/include/gfxFont.h:918:7
#1 0x7fb0528d7091 in MergeCharactersInTextRun(gfxTextRun*, gfxTextRun*, bool const*, bool const*) src/layout/generic/nsTextRunTransformations.cpp:190:18
#2 0x7fb0528d8eb5 in nsCaseTransformTextRunFactory::RebuildTextRun(nsTransformedTextRun*, mozilla::gfx::DrawTarget*, gfxMissingFontRecorder*) src/layout/generic/nsTextRunTransformations.cpp:870:5
#3 0x7fb0528b25d4 in FinishSettingProperties src/layout/generic/nsTextRunTransformations.h:163:17
#4 0x7fb0528b25d4 in BuildTextRunsScanner::BreakSink::Finish(gfxMissingFontRecorder*) src/layout/generic/nsTextFrame.cpp:1115:29
#5 0x7fb0528b2402 in BuildTextRunsScanner::FlushLineBreaks(gfxTextRun*) src/layout/generic/nsTextFrame.cpp:1687:21
#6 0x7fb0528af63e in BuildTextRunsScanner::FlushFrames(bool, bool) src/layout/generic/nsTextFrame.cpp:1662:5
#7 0x7fb0528b5b92 in BuildTextRuns src/layout/generic/nsTextFrame.cpp:1581:11
#8 0x7fb0528b5b92 in nsTextFrame::EnsureTextRun(nsTextFrame::TextRunType, mozilla::gfx::DrawTarget*, nsIFrame*, nsLineList_iterator const*, unsigned int*) src/layout/generic/nsTextFrame.cpp:2998:7
#9 0x7fb0528bb847 in nsTextFrame::GetRenderedText(unsigned int, unsigned int, nsIFrame::TextOffsetType, nsIFrame::TrailingWhitespace) src/layout/generic/nsTextFrame.cpp:9801:20
#10 0x7fb05374639c in mozilla::a11y::NotificationController::WillRefresh(mozilla::TimeStamp) src/accessible/base/NotificationController.cpp:678:46
#11 0x7fb05264f7aa in nsRefreshDriver::Tick(mozilla::layers::BaseTransactionId<mozilla::VsyncIdType>, mozilla::TimeStamp) src/layout/base/nsRefreshDriver.cpp:2054:12
#12 0x7fb0526572a1 in TickDriver src/layout/base/nsRefreshDriver.cpp:372:13
#13 0x7fb0526572a1 in mozilla::RefreshDriverTimer::TickRefreshDrivers(mozilla::layers::BaseTransactionId<mozilla::VsyncIdType>, mozilla::TimeStamp, nsTArray<RefPtr<nsRefreshDriver> >&) src/layout/base/nsRefreshDriver.cpp:351:7
#14 0x7fb05265718c in mozilla::RefreshDriverTimer::Tick(mozilla::layers::BaseTransactionId<mozilla::VsyncIdType>, mozilla::TimeStamp) src/layout/base/nsRefreshDriver.cpp:366:5
#15 0x7fb05265c998 in RunRefreshDrivers src/layout/base/nsRefreshDriver.cpp:818:5
#16 0x7fb05265c998 in mozilla::VsyncRefreshDriverTimer::RefreshDriverVsyncObserver::TickRefreshDriver(mozilla::layers::BaseTransactionId<mozilla::VsyncIdType>, mozilla::TimeStamp) src/layout/base/nsRefreshDriver.cpp:736:16
#17 0x7fb05265c291 in mozilla::VsyncRefreshDriverTimer::RefreshDriverVsyncObserver::NotifyParentProcessVsync() src/layout/base/nsRefreshDriver.cpp:638:7
#18 0x7fb05265550d in mozilla::VsyncRefreshDriverTimer::RefreshDriverVsyncObserver::ParentProcessVsyncNotifier::Run() src/layout/base/nsRefreshDriver.cpp:537:20
#19 0x7fb04deac9ff in mozilla::RunnableTask::Run() src/xpcom/threads/TaskController.cpp:242:16
#20 0x7fb04deaaa7a in mozilla::TaskController::DoExecuteNextTaskOnlyMainThreadInternal(mozilla::detail::BaseAutoLock<mozilla::Mutex&> const&) src/xpcom/threads/TaskController.cpp:512:26
#21 0x7fb04dea9bd4 in mozilla::TaskController::ExecuteNextTaskOnlyMainThreadInternal(mozilla::detail::BaseAutoLock<mozilla::Mutex&> const&) src/xpcom/threads/TaskController.cpp:371:15
#22 0x7fb04dea9d87 in mozilla::TaskController::ProcessPendingMTTask(bool) src/xpcom/threads/TaskController.cpp:168:36
#23 0x7fb04deb1736 in operator() src/xpcom/threads/TaskController.cpp:83:37
#24 0x7fb04deb1736 in mozilla::detail::RunnableFunction<mozilla::TaskController::InitializeInternal()::$_4>::Run() /builds/worker/workspace/obj-build/dist/include/nsThreadUtils.h:577:5
#25 0x7fb04dec4b3f in nsThread::ProcessNextEvent(bool, bool*) src/xpcom/threads/nsThread.cpp:1234:14
#26 0x7fb04deca4ea in NS_ProcessNextEvent(nsIThread*, bool) src/xpcom/threads/nsThreadUtils.cpp:513:10
#27 0x7fb04e7c6de6 in mozilla::ipc::MessagePump::Run(base::MessagePump::Delegate*) src/ipc/glue/MessagePump.cpp:87:21
#28 0x7fb04e739ad3 in MessageLoop::RunInternal() src/ipc/chromium/src/base/message_loop.cc:334:10
#29 0x7fb04e7399ed in RunHandler src/ipc/chromium/src/base/message_loop.cc:327:3
#30 0x7fb04e7399ed in MessageLoop::Run() src/ipc/chromium/src/base/message_loop.cc:309:3
#31 0x7fb0523b5d48 in nsBaseAppShell::Run() src/widget/nsBaseAppShell.cpp:137:27
#32 0x7fb053b96713 in XRE_RunAppShell() src/toolkit/xre/nsEmbedFunctions.cpp:913:20
#33 0x7fb04e7c7ba9 in mozilla::ipc::MessagePumpForChildProcess::Run(base::MessagePump::Delegate*) src/ipc/glue/MessagePump.cpp:237:9
#34 0x7fb04e739ad3 in MessageLoop::RunInternal() src/ipc/chromium/src/base/message_loop.cc:334:10
#35 0x7fb04e7399ed in RunHandler src/ipc/chromium/src/base/message_loop.cc:327:3
#36 0x7fb04e7399ed in MessageLoop::Run() src/ipc/chromium/src/base/message_loop.cc:309:3
#37 0x7fb053b962f8 in XRE_InitChildProcess(int, char**, XREChildData const*) src/toolkit/xre/nsEmbedFunctions.cpp:744:34
#38 0x56247c5bb917 in content_process_main src/browser/app/../../ipc/contentproc/plugin-container.cpp:56:28
#39 0x56247c5bb917 in main src/browser/app/nsBrowserApp.cpp:303:18
Reporter | ||
Comment 1•4 years ago
|
||
Reporter | ||
Comment 2•4 years ago
|
||
Reporter | ||
Comment 3•4 years ago
|
||
A Pernosco session is available here: https://pernos.co/debug/bLLq8JbjJ2KhJ5KVCtK3wQ/index.html
Assignee | ||
Comment 4•4 years ago
|
||
Ah, I see -- this is basically a followup to bug 1663230, where the patch wasn't quite right. Since the change there, CompressedGlyph::SetComplex shouldn't be setting the glyphCount field, as that's the responsibility of gfxShapedText::SetDetailedGlyphs.
This is harmless -- the field just ends up being reset to the same value twice -- but it's misusing the API and hence it asserts to tell us so.
It looks like every other caller of SetComplex currently just passes zero for the glyph count, and that's what we should be doing here as well. Which means we can remove that parameter altogether. Patch coming.
Assignee | ||
Updated•4 years ago
|
Assignee | ||
Comment 5•4 years ago
|
||
And similarly, CompressedGlyph::SetMissing shouldn't be responsible for the glyphCount; it should only set the flags to indicate a missing-glyph, and leave SetDetailedGlyphs to manage the glyphCount field.
Assignee | ||
Comment 6•4 years ago
|
||
Updated•4 years ago
|
Comment 8•4 years ago
|
||
bugherder |
Updated•4 years ago
|
Assignee | ||
Comment 9•4 years ago
|
||
Tyson, I tried to use your testcase here as a crashtest, but it didn't seem to work for me on tryserver; even when included in the /accessible/tests/crashtests
, as it seemed to depend on having a11y support enabled, it still didn't hit the assertion in my try runs (without the patch, obviously).
If you happen to have any other examples that also hit this assertion, it'd be good to have tests for it in CI, but at the moment I'm not sure how to achieve that.
Updated•4 years ago
|
Description
•