Skip to content

Claude/paperless odf phase 1 rnyzcu - #63

Closed
theolivenbaum wants to merge 312 commits into
LibreOffice:masterfrom
curiosity-ai:claude/paperless-odf-phase-1-rnyzcu
Closed

theolivenbaum wants to merge 312 commits into
LibreOffice:masterfrom
curiosity-ai:claude/paperless-odf-phase-1-rnyzcu

Conversation

@theolivenbaum

Copy link
Copy Markdown

No description provided.

claude and others added 30 commits July 31, 2026 10:13
… them

Read from ODF, drawn, and compared against LibreOffice's own strokes -- axis,
position, both ends and thickness, every one within a tenth of a point. This is
the item the master plan said needed the rasteriser first; it needed a PdfStrokes
reader instead.

The consolidation is the part that had to be right. LibreOffice writes one stroke
per grid line across the whole table -- five horizontals for a four-row table and
one vertical per column boundary -- not four round each cell. So the cells' edges
are grouped onto the line they sit on and the runs that touch are merged. Drawing
twelve short segments instead would be right on the page and incomparable against
the reference, which is exactly the kind of difference a pixel comparison would
have hidden and a stroke comparison shows.

A vertical stops where its boundary stops: the corpus table's last row spans two
columns, so that column's stroke is shorter than the rest -- and that falls out
of the merge rather than being special-cased.

Three pieces of measured geometry. A grid line runs through the centre of its
border, and each stroke overshoots by half its own width at both ends, which is
what makes two perpendicular borders meet rather than leaving a notch. A row owns
half of each of the two grid lines it sits between, so a row 18.95 pt tall gains
0.5 pt from two 0.5 pt borders. And the table's *first* grid line sits half a
border below its top edge -- one shift of the whole table, and the last 0.25 pt
of disagreement.

Width and colour, no style: a style is a rasteriser's problem and no two formats
agree on the set, while a dashed border at the right width in the right place is
far closer than none -- and the width is the half that moves text.

DOCX, RTF and DOC still need their own reads; the model, the consolidation and
the comparison are done and format-independent. The ODF read shows the shape,
including its one trap: `none` is a value meaning there is no border, so it has
to beat the fo:border shorthand rather than falling through to it.
The model, the consolidation and the comparison were already format-independent,
so this is three reads -- and two of them hid something worth writing down.

DOCX writes w:start and w:end, not w:left and w:right. OOXML has both spellings,
the logical pair being ISO's and the physical pair the legacy one, and
LibreOffice's export uses the logical names. So a reader that knew only w:left
finds no vertical borders at all and draws five strokes where the reference draws
nine -- which the stroke comparison catches immediately and a pixel comparison
would have shown as a vaguely wrong-looking table. w:sz is also in eighths of a
point, the one OOXML measurement that is neither twips nor half-points.

RTF states a border in two halves: \clbrdrl and friends *select* a side, and the
\brdrw, \brdrcf and \brdrnone words that follow describe whichever was last
selected. So the selection is state carried between control words rather than an
argument to one, and \brdrnone has to beat a width stated before it. \brdrw is in
twips -- three formats, three units for the same quantity.

Both read their borders correctly and neither is in the stroke comparison, for a
smaller reason that is still real: each export writes the table's own left edge
differently relative to the border, so the whole grid is offset. Measured on the
first vertical -- 56.70 pt in ODF, 56.70 in the DOCX render against 56.45 laid
out, and 57.00 in the RTF render against 56.70. A quarter and a third of a point,
in the origin rather than in the borders, and recorded as its own item.

Both TODO files are brought up to date, including a correction that matters for
whoever picks this up: the master plan said the rasteriser had to be built before
borders, shading or frame outlines could be verified. That is no longer true, and
was never quite right -- a word-position comparison cannot see them, but
LibreOffice's PDF states every one as an explicit path, and PdfFills and
PdfStrokes read those.
…-qel74y

Paperless: footnotes, endnotes, and everything a table draws that is not text
A two-page document with eight footnotes, four to a page, asking for the count
to begin again on every page — the ground truth the restart rules need before
any of them is written.

Measured rather than assumed, and it settled two questions at once. All four
formats keep the rule through LibreOffice's own export, each in its own
spelling (text:start-numbering-at, w:numRestart, \ftnrstpg, the DOP's
rncFootnote), and all four then render identically: page one cites 1, 2, 3, 4
and page two cites 1, 2, 3, 4 again, at the anchor in the sentence and at the
head of the note alike. So the restart is comparable in every format, which it
did not have to be.

Four notes per page rather than ten, deliberately: every citation stays one
digit wide, so the numbering can be got right before the width feedback a
restart also causes — a page's tenth note going from 10 to 1 rebreaks its line.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PCFkGZ2rzTHM5gqrwG1P7U
The rule half of note-numbering restarts: NoteRestart, read from
text:start-numbering-at, w:numRestart, the \ftnrst* family and the DOP's
rncFootnote/rncEdn, and carried on PageNote beside Placement — the same kind of
thing, a property of the note's class that only pagination can act on.

Three findings, each of which would otherwise have been a wrong guess.

There are three restart kinds, not four. Writer's SwFootnoteNum is exactly
FTNNUM_DOC/FTNNUM_CHAPTER/FTNNUM_PAGE, and every importer folds a per-section
restart onto the chapter one: WW8 through its mapping array at ww8par.cxx:5064,
OOXML's eachSect, and RTF's \ftnrestart. A fourth member would model something
no reference implementation round-trips.

WW8's own comment contradicts its own code. ww8scan.hxx documents rncFootnote as
"1 section, 2 page"; the array reads 1 as chapter. The comment describes Word's
field and the array what Writer does with it. The bits cost nothing to read:
they are the two the DOP reader was already shifting past to reach the start
value, in the same word at 0x02 and at 0x34.

RTF's endnote set is one word short rather than a mirror. \ftnrstcont,
\ftnrestart and \ftnrstpg have a-prefixed twins for only the first two — there
is no \aftnrstpg, because an endnote does not restart per page.

The application half stays open and its note now records Writer's answer to the
circularity, which is damping rather than a fixed point: number per page over
already-finished pages, and break the oscillation instead of iterating.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PCFkGZ2rzTHM5gqrwG1P7U
…lines the same way

DOCX and RTF read their cell borders correctly and were still out of the stroke
comparison, because each stated the table's origin differently relative to the
border. Two rules were missing, and only the first is the one that was expected.

Writer positions a table by the *centre* of its left border; Word positions it by
the border's outer edge. So both readers now add half the first cell's left
border to the stated indent -- DomainMapperTableHandler::endTableGetTableStyle,
"Writer starts a table in the middle of the border, Word starts a table at the
left edge of the border, so emulate that by adding the half the width". The
corpus table states w:tblInd w:w="-5" with a 0.5 pt border and renders at 56.70
pt where it had been laid out at 56.45; the RTF states \trleft0 and renders at
57.00 where it had been laid out at 56.70. The two look like different constants
and are the same half-border: \trleft becomes w:tblInd in rtfdocumentimpl.cxx and
the two formats share dmapper from there.

Word 2007 to 2010 measured that indent to the cell's text instead and subtracted
a whole cell padding rather than adding half a border, so the reader now reads
compatibilityMode -- a w:compatSetting in Microsoft's namespace, not w:. An
absent setting means the *old* rule, following GetWordCompatibilityMode, which
returns -1 for a file that does not say. The corpus table rewritten to mode 12
renders three points further left, so this is not a rounding.

The second rule was found by measuring rather than expected: a Word table joins
its grid lines differently. An interior line meeting the table's outer frame
stops at the frame's inner edge rather than overshooting its centre, leaving the
frame to cover the join -- SwTabFramePainter::FindStylesForLine, guarded by
bWordTableCell, which is the document setting TableRowKeep that every Word-family
importer switches on and the ODF one never does. The same table renders its
middle horizontals 56.95 to 538.35 from DOCX and 56.45 to 538.85 from ODF: half a
point, invisible on paper, and four failing assertions. PageTable now carries
HasWordBorderJoins for it, which is the one place a table's original format still
shows after it has been read; DOC will want it when its borders arrive.

table-borders.docx and table-borders.rtf join the stroke comparison, every one of
their nine strokes within 0.05 pt of LibreOffice's. Checked past the corpus too,
since a fix that was really "subtract a quarter point" would pass one document
and fail the next: a table indented 567 twips and a bordered table nested in a
cell agree to the same 0.05 pt in both formats.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PCFkGZ2rzTHM5gqrwG1P7U
…h has

Every one of the four structures is stated twice over in a document any recent
producer wrote, and in every case the newer form wins: a BRC carries a palette
index in its 80 form and full RGB in its 90 one, and the SHD array likewise. The
older forms are not merely coarser — Word's palette rounds the corpus document's
#CCCCCC to #C0C0C0 — so both are read and the newer applied over the older.

A border reaches a cell three ways, all of which matter: the twenty-byte cell
descriptor inside sprmTDefTable carries four BRCs, sprmTSetBrc restates them for
a *range* of cells and a mask of sides, and sprmTTableBorders states six defaults
that fill in any side no cell mentioned — which is what Word itself writes, so a
reader without it finds no borders at all in most Word-authored files. The width
is eighths of a point, the third unit in four formats for one quantity, and the
type is not only a style: a triple line occupies five times its nominal width.

Shading is a *pattern* rather than a colour, and what shows is the background,
not the foreground. That is the same trap DOCX's w:color and RTF's \clcfpat set,
and it is worth the whole SetShade blend to get right: a clear pattern over an
automatic background is no shading at all, while a solid one is the foreground
outright.
Writer runs every grid line the full width of the table and lets the ends
overlap by half a pen; Word shortens an *inner* line by the whole width of the
outer line it meets, so the outline owns the corner outright. LibreOffice keeps
the difference as a document setting its DOC, DOCX and RTF filters all set and
its ODF filter does not, and reads it in SwTabFramePainter::FindStylesForLine.

Measured on the corpus table's half-point borders: the reference's inner
horizontals run 56.95 to 538.35 where the same table in ODF runs 56.45 to 538.85
— a whole point end to end, and five of the nine strokes. So it is not a rounding
to absorb but a rule to apply, and it belongs to the file's provenance rather
than to anything the document says.

Only the DOC reader sets it so far. DOCX and RTF are drawn the same way by
LibreOffice and need it too, but their own left edge is out by a quarter of a
point first, which is what keeps them out of the comparison.
`table-shading.doc` joins the fill comparison and `table-borders.doc` the stroke
one, and both were held out for the reads rather than for the drawing: the nine
strokes agree on axis, position, both ends, width and colour within 0.06 pt, and
the three fills within a twentieth of a point.

What neither comparison can see is the colour, and in DOC the colour is where the
two spellings of a shade disagree — the newer sprm says the #CCCCCC the document
was written with and the older can only say Word's nearest palette entry. So two
unit tests assert it, along with the border's half a point of palette red: eighths
of a point read as twips or half-points would still lay the table out plausibly
and would put every stroke a point out.
All four readers already resolved a tracked change — an insertion is
content and a deletion is not — and threw away the account of it. The
model now keeps that account beside the text rather than instead of it:
WritingChange carries the kind, the range, the author, the date and, for
a deletion, the words themselves, since extraction deliberately drops
those and the record is the only place they survive.

Nothing extracted changes. TrackedChangeTests still pins all four
readers agreeing on what the document says.

Two traps paid for:

- WW8's DTTM is not packed tight. Six bits of minute and five of hour do
  end at bit 11, but the month starts at 16 and the year at 20 —
  LibreOffice's own comment gives masks rather than widths for that
  reason. Shifting by the widths reads a bit of the day as the month's
  low bit, and revisions.doc's 1970-01-01 comes back 2040-02-01.

- The FIB's index for a table is its read order, not the byte offsets
  ww8scan.hxx's comments carry: those describe the Word 6 layout, where
  fcSttbfRMark's documented 0x1fa works out at index 44 against the 51
  Word 97 gives.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PCFkGZ2rzTHM5gqrwG1P7U
…wn ICU

UAX #9 in full — the paragraph level, the explicit levels and isolates, the
isolating run sequences, the weak, neutral and implicit resolutions, and the
reordering — written in the standard's order rule by rule, for the same reason
the line breaker is: when a level comes out wrong the only useful question is
which rule decided it.

The property tables come from ICU rather than from a Python package, because
ICU is what LibreOffice resolves bidi with (ubidi_setPara in
vcl/source/text/ImplLayoutArgs.cxx). That also makes a much stronger
differential possible than the line breaker's: 7,944 generated cases checked
against ICU's own answers, which is agreement with Writer rather than with a
defensible reading of the specification.

Two behaviours were measured out of ICU rather than read out of the standard.
The levels of the characters X9 removes propagate backwards, not forwards —
ICU reports "a RLE b PDF c" as 0 2 2 0 0, giving each control the level of the
text it opens or returns to — and a paragraph with nothing right-to-left in it
is reported flat rather than raising its Arabic numbers two levels by I1, which
is the difference between one portion and two.

The one bug worth naming: a sequence's sos and eos have to be read off the
explicit levels before any sequence is resolved. Computing them inside the loop
lets a sequence the implicit rules have already raised answer for the one after
it, and a space at the boundary then takes the paragraph's direction instead of
the embedding's — one character wrong, every later pen position with it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PCFkGZ2rzTHM5gqrwG1P7U
DOC was the last of the four formats without either, and the largest read:
it is the only one that states a shade as a pattern rather than a colour.
A foreground, a background and an index saying how much of the cell the
foreground covers, so the grey a document asks for has to be blended out
of black over white at Word's own twenty per cent — from the percentages
in SwWW8Shade::SetShade's eMSGrayScale table, which are neither linear in
the index nor evenly spaced. A reader taking the foreground fills the cell
black and is still in exactly the right place.

Both spellings are read, because LibreOffice's own export writes both, and
the newer wins per cell rather than whole. The newer one is split across
three sprms whose second and third start at cells 22 and 44; taking all
three from zero shades the first columns three times and the rest never.

Borders arrive twice too: four BRC80 codes in each 20-byte cell descriptor
of sprmTDefTable, then sprmTSetBrc overwriting a range of cells on the
sides a flag byte names — the only border sprm in any of the four formats
that is not per cell. Type 0 and the nil code are kept apart, since only
"never stated" may be filled in by a default. A border's drawn width is
not its stated width either: the eighths of a point go through
DetermineBorderProperties and then the style's own multiplier.

Comparing the result turned up two rules that were not about DOC at all.

Writer measures a table's left edge from the middle of its left border and
Word from the border's outer edge, so a DOCX or RTF indent is half a
border too small — which is why LibreOffice's export writes tblInd="-5"
for a table at the margin with a half-point border. That was recorded here
as two separate offsets, a quarter of a point in DOCX and a third in RTF;
it is one rule, and DOC must not have it because WW8's column boundaries
are grid lines already.

And the same table is drawn differently depending on which family it came
from: an interior grid line stops at the inner edge of the table's outline
for a Word-family document and crosses to the outer edge for an ODF one,
half a point at each end. It hangs off TABLE_ROW_KEEP and is applied in
SwTabFramePainter::FindStylesForLine. Only an outline pushes a line in —
an interior line crossing another passes straight through, which is why
the corpus table's short vertical is inset at its top and overshoots at
its bottom.

So all five border documents and all five shading documents now compare
stroke for stroke and fill for fill, and TableDecorationTests pins what
each format's reader made of the file without needing LibreOffice.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HpEp7GXHTj6bffAHm5Aou4
A column need not say how wide it is, and taking that as zero left it
nothing to break its text in. Both of LibreOffice's answers are now
reproduced, and they differ by more than rounding: two documents with the
same three width-less columns come out evenly divided when the table
states no width of its own, and 3212 / 2142 / 4284 twips when it states
17 cm — a ratio of 3 : 2 : 4 out of three columns declared identically.

The second is not content-based sizing, which is what the note here used
to claim, and it is not a rounding artefact either. SwXMLTableContext's
conversion of a relative column to an absolute one divides the space
*remaining* after each column by the full sum of the weights, so each
column takes a third of what is left rather than a third of the whole.
That correction shrinks the item from "port Writer's CSS-like table
auto-layout, which needs every cell measured before the grid exists" to
an arithmetic rule in one reader.

Also read: a missing width is a relative weight of MINLAY rather than an
absolute zero, style:rel-column-width as the explicit spelling of the
same thing, and style:rel-width on the table as a share of the text area.
The other three formats need none of it — all three always write a grid.

Two corpus documents, deliberately a pair differing in one attribute, and
deliberately flat ODF with no siblings: exporting them to any other format
resolves the grid on the way out and so removes the thing under test.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HpEp7GXHTj6bffAHm5Aou4
Two agents working on different formats independently discovered the same rule
and each added a property for it: LibreOffice joins a *Word* table's grid lines
by Word's rule rather than Writer's, shortening an inner line by the whole width
of the outer line it meets instead of overshooting it by half. Measured the same
way from both sides — all three Word formats run their middle horizontals 56.95
to 538.35 where ODF runs them 56.45 to 538.85.

Being found twice, independently, from DOCX/RTF and from DOC, is the strongest
evidence available that it is the rule and not a coincidence of one export.

Resolved to one implementation and one name, PageTable.JoinsBordersLikeWord, set
by all three Word-family readers and left false for ODF. The kept implementation
derives outer-ness from FirstRow/RowEnd and the column indices rather than from
the placed cells' extremes, which is what makes it right for a table split
across a page break and for a row that is short of the grid.

All five border documents are now in the stroke comparison and the last
exclusion comment is gone. 782 tests pass, 0 skipped.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PCFkGZ2rzTHM5gqrwG1P7U
Both were already resolved and thrown away by all four readers. A
bookmark is now a WritingBookmark over the model's own node-plus-offset
range, and a field a WritingField carrying the instruction beside the
cached result — the result stays preferred, because it is what a
reference renderer draws and nothing headless can recompute PAGE before
it has paginated.

Verified over one new corpus document in four formats: the same two
bookmarks and three fields at the same offsets in the same paragraphs,
with one difference that is in the file rather than in the reading of
it — LibreOffice's ODF export caches a page number of 0 where the other
three cache 1.

The trap, in WW8, is not the one the structure advertises. That
PlcfBkf's record indexes PlcfBkl rather than pairing with it by ordinal
is documented and easy once known. What is not is that firing starts and
ends as an ordered stream needs an order and no order works: two
adjacent bookmarks want the first's end before the second's start, a
zero-length bookmark wants its own start before its own end, and both
pairs sit at the same character position. LibreOffice hits the same wall
("the case of ][ ... ][ is not solved yet"). So the walk remembers where
each position landed and the ranges are built afterwards.

Also resolves the tracked-changes open question by measurement:
LibreOffice shows change marks by default in all four formats — the
deleted phrase struck through, the insertion underlined, and a change
bar 7.05 pt left of the text margin — so AcceptTrackedChanges defaulting
to false is right. Nothing reads the flag yet, which is now its own item.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PCFkGZ2rzTHM5gqrwG1P7U
Proof that recording a mark changed no extracted text, and one named
difference rather than a tolerance: LibreOffice's text filter expands
PAGE to 0 because it runs without a layout, while its rendering of the
same four files says "Page 1 of 1". Paperless reports the result the
file caches, so it agrees with the page in three of the four — and with
the filter in the ODT, where LibreOffice's own export cached 0.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PCFkGZ2rzTHM5gqrwG1P7U
One pass, not three. MeasuredParagraph resolves the bidi algorithm over the whole
paragraph — never per formatting run, since a run boundary is a change of font
and not of direction — then intersects the level runs with the UAX LibreOffice#24 script
runs and with what the run's face can actually draw.

Script itemisation is ported from vcl/source/gdi/scrptrun.cxx, ICU's ScriptRun
sample as LibreOffice vendored it, with both of LibreOffice's adjustments baked
into the generated table rather than left to the itemiser to remember. The
bracket stack in it looks like an accident and is not: a closing bracket has to
take its opener's script, or "(Ελληνικά) English" shapes its two halves in
different faces.

Glyph fallback closes the half the TODO called missing. The candidate order is
LibreOffice's own generic list (ImplInitGenericGlyphFallback,
vcl/source/font/PhysicalFontCollection.cxx:113) rather than an invented one,
because the face that draws a missing character decides its advance width and
therefore where the line holding it breaks. Every fallback is reported, the
unresolved ones included: a fallback face is chosen for coverage rather than
metrics, so it is almost never metric-compatible, and without the list there is
nothing to tell that apart from a layout bug.

The no-op case is a genuine no-op and is measured as one. A Latin paragraph
produces exactly one sub-run and reaches HarfBuzz in the identical call, with
the caller's own ShapingOptions and no script or direction override, and the
test asserts the glyphs come back glyph for glyph equal to shaping the whole
run. A paragraph split into runs it does not need loses the shaping context at
each boundary and measures very slightly wide — enough to move a line break.

Verified against LibreOffice as well as against ICU. It emits one BT…ET block
per portion in logical order with an absolute pen, so one reference PDF gives
both halves of the answer: the glyph counts read cumulatively are the portion
boundaries as character offsets, and the pens are the visual order. Every
level-run boundary is one of LibreOffice's, and the leftmost pen of each
sub-run rises strictly along the order the reordering puts them in.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PCFkGZ2rzTHM5gqrwG1P7U
A DOCX declares a bookmark at block level when it brackets a table, so
the position falls between two paragraphs. The builder took the last
paragraph it had *materialised*, which is however far back the previous
mark was; it now keeps the last one that closed, text and all, and
materialises it retrospectively.

Two RTF details found reading it back: \deleted is a toggle, so
\deleted0 must not send the following text to the collector; and the
outer {\*\revtbl} group closes with nothing collected and must not add
an author of its own, since the indexes are positional.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PCFkGZ2rzTHM5gqrwG1P7U
The first feature here where a line's available width is not a property of
its paragraph. A frame occupies a rectangle; whether a line runs into it
depends on where the line is. That makes it structural rather than
additive, and two seams had to move.

Paperless.Text gained a LineRoom delegate: how much room a line has, asked
once per line and answered from the line's own position. It is
deliberately ignorant of what is in the way — the text library has no
notion of a frame, an anchor or a wrap mode and should not acquire one. The
single-face path is exact, because every line of such a paragraph is the
same height and a line's top is therefore its index times that height,
knowable before the lines exist. The mixed-run path cannot be exact: its
heights depend on which runs each line covers, so it fills once against a
uniform pitch and again against the real tops. One refinement, not a loop
to convergence.

The paginator is the part that is easy to underestimate. It lays every
block out once up front, because within a section the width never varies —
and a frame breaks exactly that, since its position is relative to its
anchor and the room therefore depends on where the paragraph landed on a
page, which is a pagination result. So a paragraph beside a frame is laid
out again at the point of use, and the result is kept: a paragraph split
across a page break must not be re-broken half way, for the same reason a
section change mid-paragraph is not honoured.

Three things were measured rather than chosen. A line is obstructed when
its box overlaps the frame's region *inclusively* — a line whose bottom
exactly meets a frame's top wraps, because Writer tests with
SwRect::Overlaps and its comparisons are <= and >=. The widest free run
wins rather than the first, which sends text down whichever side has more
room and makes two frames narrowing one line compose with no special case.
And the wrap margins belong to the region text avoids rather than to the
frame, so both rectangles are carried.

It also fixes a silent pre-existing bug: a draw:frame was walked *into*, so
a text box's words were spliced into the middle of the sentence anchoring
it.

The corpus document puts both edges of the frame's reach inside the page —
three lines above at full width, seven beside, one below back at full width
— because the cheap wrong answers are edge answers. Its frame sits a
centimetre below its anchor rather than at it, since at zero the paragraph
above ends exactly where the frame begins and that counts as an overlap; a
test on that boundary is fragile whichever way it is read.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HpEp7GXHTj6bffAHm5Aou4
A frame is a rectangle of content anchored somewhere in the text that body
text has to flow round, and the wrap is the half that changes layout: a line
beside a frame breaks earlier than the same line above it.

The line filler now asks per line what horizontal stretch it may use, which
is Writer's `SwTextFormatter::CalcFlyWidth` asking `SwTextFly::GetFrame` the
same question once per line. `ILineObstacles` keeps the page-dependent half
out of `Paperless.Text`: the layouter knows a line's top and height within
its paragraph and nothing about which frames are anchored where.

Three rules are ported rather than guessed, each measured against
LibreOffice's rendering of a 4 x 3 cm frame on an A4 page with 2 cm margins:

- The wrap side *widens* the rectangle rather than choosing between two of
  them. `AnchoredObjToRect` calls `CalcRightMargin` for a left wrap, so "text
  on the left only" is a frame that reaches the end margin; top-and-bottom
  does both, which is what leaves a line nowhere to go and drops it below.
- A line whose box merely *touches* the frame's top edge is already narrowed.
  Measured: a frame anchored at the top of paragraph two narrows the last
  line of paragraph one, whose box bottom is exactly the frame's top. Writer's
  rectangles are inclusive and the fly-portion arithmetic adds a twip back, so
  the hole is one twip larger than the geometry on every side — which is also
  why text resumes 3402 rather than 3401 twips along from a frame 2268 twips
  wide at 1134.
- The optimal wrap is decided per frame from the room on each side, per
  `GetSurroundForTextWrap`: under 2 cm of room is not wrapped on at all, and a
  frame wider than 1.5 cm gets only its roomier side.

Pagination becomes a bounded loop rather than one pass, because a frame's
position depends on where its anchor paragraph landed and that paragraph's
lines depend on the hole the frame makes in them. It converges when both the
frame rectangles *and* the obstructed paragraphs' own tops stop moving — the
frames can settle while the text has not, since a paragraph below one that
grew by wrapping starts lower than the previous pass believed.

ODF reading is complete: `draw:frame`'s geometry and anchor, the graphic
style's `style:wrap`, the two -pos/-rel pairs, the margins that widen the hole
without moving the frame, and the frame's own text through `FlowLayouter` —
the same walk a header takes. Two ODF spellings are traps and are written
down where they are read: `style:wrap="none"` means no text *beside* the
frame rather than no wrapping (its word for that is `run-through`), and
`style:horizontal-pos="from-left"` is the only value that uses `svg:x` at all.

`FrameComparisonTests` pins it against LibreOffice for `frame-wrap.fodt` and
`frame-wrap.odt`: every body line's start pen and baseline within a tenth of a
point, the narrowed lines a contiguous run indented by the frame's own 4 cm,
and the frame's own two lines at LibreOffice's own baselines.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PCFkGZ2rzTHM5gqrwG1P7U
… per stretch

The comparison gained a third assertion, and it earned its place immediately.
The gap between one portion's pen and the next one to its right is that
portion's width, so a reference PDF measures the shaping of each sub-run and not
only its boundaries — which is the one assertion that notices a run given the
right boundaries and the wrong face. It found two things about the corpus
document itself.

ODF's style:letter-kerning defaults to *false*, so a document that does not
state it is a reference for the unkerned widths: 33.13 pt against 33.30 for the
six characters of "Start ". And a paragraph style that inherited its text
properties through style:parent-style-name lost them — LibreOffice set the three
right-to-left paragraphs in FreeSans and Liberation Serif instead of DejaVu
Sans, which showed up as portions 5.1 pt out against a face the test never
loaded. Both are now stated explicitly in the document and written down in the
corpus README.

With both fixed the widths agree to within 0.221 pt over twenty-two portions,
the worst case being those same six characters. That residual is VCL rounding
each portion through its reference device; it does not accumulate, because every
portion's pen is absolute, which is why the boundary and ordering assertions can
be exact while this one cannot.

Glyph fallback now reports once per contiguous stretch rather than once per
character, so a paragraph in a script nothing installed covers leaves one line in
the list instead of a thousand.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PCFkGZ2rzTHM5gqrwG1P7U
`wp:anchor` states the same two facts per axis ODF does — an origin and either
an offset in EMUs or an edge to align against — and the wrap in a way that
needs saying out loud: it is which of five sibling *elements* is present, and
two of the five are named the opposite of what they do. `wp:wrapNone` is the
mode where text runs *through* the frame, and `wp:wrapTopAndBottom` is what
ODF spells `none`. Only `wp:wrapSquare` carries a side, in `wrapText`.

`wp:wrapTight` and `wp:wrapThrough` ask for a contour wrap, which is a later
item; they are read as the square wrap their `wrapText` names — the same hole
with straight sides, which is much closer than ignoring the frame.

`wp:inline` is read as an as-character frame with no wrap, so an inline
picture is recorded rather than misplaced.

The comparison runs at three twips for the DOCX rather than the ODF files'
two, and the extra one is measured rather than slack: LibreOffice resumes text
3404 twips along where the frame's geometry ends at 3401. One twip of that is
the inclusive rectangle every format shows; the other two come from the wrap
margin its OOXML import derives from `wp:effectExtent` (`GraphicImport.cxx`,
the `WrapTextMode_PARALLEL` branch). Reading that extent is deliberately not
done, because it is only half right: added horizontally it moves the wrapped
lines the right way, and added vertically it raises the hole's top edge so
that the line above the frame touches it and one line more is narrowed than
LibreOffice narrows. A whole line in the wrong place is a worse error than a
twip.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PCFkGZ2rzTHM5gqrwG1P7U
The status block, the test count and the "start here" note had all drifted far
enough to mislead someone picking the project up: 280 tests against 852, cell
borders recorded as done in two formats when they are done in four, and a list
of remaining work naming items that have since landed.

The correction worth keeping is the one about the rasteriser. The note said
borders could not be verified without it and that it therefore had to be built
first. That was the wrong conclusion from a true premise — a word-position
comparison genuinely cannot see a border, but LibreOffice's PDF content stream
states every one as an explicit path, and PdfFills/PdfStrokes read them. Both
borders and shading were verified that way, in all four formats, with no
rasteriser.

The wrong inference is left in place rather than quietly deleted, because it
generalises past borders: before concluding a feature cannot be compared, check
what the reference actually writes rather than what pdftotext can report.

Also records the two pieces of shared infrastructure worth building
deliberately rather than per format, since each buys three formats at once —
DrawingML text bodies in Paperless.Ooxml and Escher in Paperless.MsBinary.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PCFkGZ2rzTHM5gqrwG1P7U
A frame holds a flow, and it is the same flow a table cell holds — lines
that break at the frame's width and are positioned from the frame's own
top. So the layout needed no new machinery, only wiring: the blocks are
read from draw:text-box through the walk a cell's content takes, laid out
at the frame's bounds less its padding, and drawn after the body beside
them, which is Writer's order for a frame that is not behind the text.

Before this the content was dropped. That was still an improvement on what
came before it — a draw:frame used to be walked *into*, splicing a text
box's words into the middle of the sentence anchoring it — but dropped is
not read.

Two LibreOffice behaviours had to be measured, and each would otherwise
read as a bug in whatever produced the file.

fo:padding on a graphic style is ignored, while its four sides are
honoured: the same frame written fo:padding="0.15cm" lays its text against
its own edge, and written with fo:padding-left and friends insets it by
4.25 pt. fo:margin is *not* like this — the shorthand works there, and
setting it grows the wrap region on all four sides. So the two are read
differently, deliberately, and the asymmetry is LibreOffice's.

A paragraph style named inside a draw:text-box is ignored. A text:p in a
text box with text:style-name="Body" renders in the default font, not
Carlito — measured on the word "the", 14.92 pt wide in the body against
14.62 pt in the frame at a different line height, so a different typeface
rather than a different size — and a round trip through LibreOffice drops
the attribute outright. The document's style:default-style does apply,
which is what the corpus document now uses so that it says the same thing
to both readers. Paperless honours the named style, so a document relying
on one will differ from LibreOffice's render, correctly.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HpEp7GXHTj6bffAHm5Aou4
…-qel74y

Paperless: DOC cell shading and borders, the table origin, and ODF column-width resolution
RTF says almost nothing about a shape in RTF's own syntax. `\shpleft` and its
three companions give the rectangle in twips and `\shpwr`/`\shpwrk` the wrap;
everything else lives in `{\sp{\sn name}{\sv value}}` pairs, which are Escher's
property table written out as text and sit inside `{\*\shpinst}` — an
ignorable destination this reader skips whole. So `\sn` and `\sv` are read as
destinations of their own: without them a file LibreOffice wrote has no origin
at all, since its export writes `\shpbxignore` and states `posrelh` instead.

Two measurements decide the RTF numbers, and both were taken by editing the
same file and rendering it twice:

- **A shape stating no `dxWrapDist*` gets 0.2 cm on every side**, which is
  LibreOffice's default and not the specification's 0.125 inch. The corpus
  document's wrapped lines start 114 twips past the shape's own right edge
  with the property absent and 1 twip past it with
  `{\sp{\sn dxWrapDistLeft}{\sv 0}}` and its three siblings added. So "stated
  zero" and "said nothing" are different answers and the reader keeps them
  apart.
- **The inset LibreOffice gives a shape's own text is not the file's.** The
  corpus RTF states `dxTextLeft` and its siblings as zero and LibreOffice
  still draws the frame's first line at 57.55, 119.80 where the shape's corner
  is 56.70, 110.50 — 17 twips across and 15 down. So `frame-wrap.rtf` is
  compared for its wrap, which is exact to a twip, and not for the position of
  the text inside the frame.

`\shpwr`'s numbering is RTF's own and two of its five values invite a swap: 3
is *through*, meaning a rectangular hole the text flows into, and 5 is *none*,
meaning the shape is ignored.

The TODOs now say what is left and why, rather than ticking a box: two
stretches of text on one line (what a `parallel` wrap round a frame touching
neither margin needs, and what `LineBox` would have to carry), contour wrap,
frames anchored in a cell or a header, as-character frames taking room on
their line, and DOC — whose `FSPA` and `SPCONTAINER` want `Paperless.MsBinary`'s
Escher reader rather than a translation, since the same reader buys shapes in
XLS and PPT too.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PCFkGZ2rzTHM5gqrwG1P7U
Reads pptx/pptm/potx/potm/ppsx/ppsm into the same content tree the ODP path
produces: each slide a section, its speaker notes a section beside it, shapes
walked in document order including groups and shapes with text bodies, hidden
slides extracted and flagged.

Every part is located by relationship. The slide order is p:sldIdLst's order of
r:ids, not the parts' names, and the master hangs off the *layout* rather than
off the slide — a deck with several masters has no other way to say which slide
belongs to which.

The DrawingML text-body reader goes in Paperless.Ooxml because a text body is
identical in a deck, a spreadsheet drawing and a Word shape; only the element
that wraps it is namespaced per family.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PCFkGZ2rzTHM5gqrwG1P7U
claude and others added 17 commits August 1, 2026 13:36
The render sweep has caught seven real bugs by checking whole-file properties no
component test looks at. The XHTML and Markdown path had no equivalent, so its
coverage was only assertable from a test count.

One feature document per family per reader path, through both output formats,
counting the structure that survives: headings, list items, table rows and links.
All three families and all six reader paths produce both, with real structure —
xls-features carries 62 table rows and 4 headings, deck-features 4 tables from a
deck, text-features 8 list items and a link.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PCFkGZ2rzTHM5gqrwG1P7U
…able

Three pieces of chart furniture, all ports rather than reimplementations, and one
correction to how the corpus was being read.

Trendlines. `c:trendline` and ODF's `chart:regression-curve`/`chart:mean-value`
become `ChartTrendline`; the seven fits are `Core/Charts/ChartRegression.cs`, a
port of `chart2/source/tools/RegressionCurveCalculator.cxx` and its subclasses.
Each curve type discards different points before fitting — an exponential falls
back to the wholly-negative series and negates — so an ordinary least-squares
rewrite gives NaN where the reference gives a curve. A category chart's X values
are 1, 2, 3 and not 0, 1, 2, which is what an intercept is quoted against.

Rotated and thinned axis labels. `Core/Charts/ChartAxisLabels.cs` is
`VCartesianAxis::createTextShapes`, restart and all. Two of its four escapes are
dead in modern LibreOffice and the note says why; what is left is rotate to 45°,
then draw every nth. A `c:dateAx` reaches rotation directly because the OOXML
importer sets its three label properties only for a `c:catAx`; a `c:catAx`
reaches it only through a word too wide to break.

A data table. `c:dTable` becomes `ChartDataTable`, takes its rows out of the plot
rectangle, and stops the category axis labelling itself — the header row is those
labels.

Two decks turned out to measure LibreOffice's PDF writer rather than its layout:
`tdf106217` draws its rotated labels as glyph outlines `pdftotext` cannot read,
and `bnc889755` emits one `Tj` per glyph. Both were recorded as missing features.

Measured over `chart2/qa/extras/data/pptx/`: total absolute word error 128 -> 79,
exact 19 -> 21 of 38; ODP unchanged at 6 and 8 of 9. All six corpus chart rows
still match. 2590 tests, 0 failed, 0 skipped.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PCFkGZ2rzTHM5gqrwG1P7U
…e count

Ordered by what the corpus contains rather than by convenience. Counted over
every chart part in chart2/qa/extras/data/ — 351 OOXML plot groups and 219 ODF
chart:class attributes — the five stand at of-pie 5, bubble 3+1, stock 1+3,
radar 2+0 and surface 0+0. Surface is not rare, it is absent; and LibreOffice
has no SurfaceChart either, substituting "a deep 3D bar chart from all surface
charts" in the importer. So a surface chart draws nothing, deliberately: there
is nothing to measure against, the reference is itself a substitution, and the
projection is genuinely three-dimensional where this engine maps two fractions
onto a rectangle.

The geometry is Paperless.Core/Charts/ChartLayout.Plots.cs and the model
additions are ChartPlotTypes.cs; both readers gained element and class names.

Ported rather than invented, with the constants that decide the picture:

  Radar   category i of n at 90° − i×360/n, clockwise, polygon closed; the
          radius axis is capped at two intervals by a flat return in
          VPolarRadiusAxis, which is why the web has three rings at any size.
  Bubble  the stated size is an area, so the diameter goes as its square root,
          and the largest is a quarter of the plot area's lesser side across.
  Stock   whiskers per category, not a polyline per series; a box only when
          c:upDownBars is present, no whisker at all without c:hiLowLines.
  Of-pie  the last splitPos points leave the main pie, which gains a composite
          wedge equal to their sum and starts at half that wedge's own width.

Three named traps. OOXML orders a stock chart open/high/low/close and ODF
orders it open/low/high/close, and nothing in either file says which — so the
role is resolved in each reader and carried on ChartSeries.StockRole.
LibreOffice parses c:bubbleScale and c:sizeRepresents and never reads them
again, so honouring them is a deliberate disagreement with the oracle. And the
installed LibreOffice 24.2 predates of-pie support and draws pieOfPieChart.xlsx
as one plain pie, so that geometry is measured only by the words it contributes.

Two things found while measuring. A pie whose part states no c:cat at all takes
generated 1-based category names for its legend, which was nine words a file on
barOfPieChart.xlsx. And XlsxDrawings never passed the workbook's theme to the
chart reader, so a chart stating a:schemeClr drew its axes and not one mark;
XlsxFile.ThemeRoot was already loaded and threading it through is four lines.

Measured. The PPTX deck set stays at 128 absolute word error with 19 exact of
38 and the ODP set at 6 with 8 exact of 9 — unchanged because neither set holds
one of the five types. The xlsx set went 2599 → 2547 with exact 8 → 9; the ods
set is unchanged at 2199. Over the fourteen corpus files that do exercise the
five, the error fell 294 → 249 excluding one 24k-word document; the residual is
two gaps outside the chart engine, both recorded: an ODS table:shapes frame is
never read, and a chart anchored past the right-hand page break lands on a page
the sheet paginator does not produce.

All six corpus chart rows still match the reference. 2601 tests, 0 failed,
0 skipped; build warning-free.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PCFkGZ2rzTHM5gqrwG1P7U
Four of the five remaining plot types draw. Surface declines, and the reasoning
is worth more than the code would have been: zero corpus files use it,
LibreOffice has no SurfaceChart and substitutes a deep 3D bar chart for every
one in its importer — so even the reference is a substitution — and the
projection is genuinely three-dimensional where this engine maps two fractions
onto a rectangle. Its frame stays empty and a test asserts it.

Two traps that would each have produced a confident wrong picture. OOXML orders
a stock chart open/high/low/close and ODF orders it open/low/high/close, with
the series anonymous in both — read one order into the other and every whisker
inverts wherever high and low differ, and looks perfect everywhere else. And
LibreOffice parses c:bubbleScale and c:sizeRepresents and then never reads them
again, so the oracle is always area-at-100%; honouring a stated width is a
deliberate disagreement, recorded and tested.

The deck and ODP oracles are flat across this change because neither set
contains one of the five types — every chart in all 47 is a bar, line, pie, area
or scatter. The XLSX set moved 2599 to 2547 and the thirteen files that do hold
these types moved 294 to 249. Worth knowing before choosing those decks as an
oracle again.

Two defects found while measuring: a pie stating no c:cat at all took no legend
names, and XlsxDrawings never passed the workbook's theme to the chart reader,
so a chart stating a:schemeClr drew its axes and not one mark.

2621 tests, 0 failed, 0 skipped.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PCFkGZ2rzTHM5gqrwG1P7U
Two plumbing defects that lost whole files, both found by the plot-type
work and both outside the chart engine.

An ODS `draw:frame` inside `table:shapes` — the table's own container for
a drawing fastened to the sheet rather than to a cell — was never walked,
so `chart2/qa/extras/data/ods/tdf166428_Low_High_StockChart_LO248.ods`
read its stock chart into a correct model that then had nowhere to go:
24 words rendered against LibreOffice's 60, now 57/60.

And the print area is the maximum of what the *cells* reach and what the
drawing layer covers. `ScTable::GetPrintArea` never asks the drawing
layer, but `ScDocument::GetPrintArea` maxes its answer against
`ScDrawLayer::GetPrintArea`'s, and `AdjustPrintArea` calls the document's
— so a chart anchored right of the last cell moves the page break.
`Layout/SheetDrawingArea.cs` is that port.

Two XLSX reader defaults had to be right for the page counts to land, and
both are invisible on any file LibreOffice wrote. A sheet stating no
`defaultColWidth` takes `baseColWidth` plus five screen pixels (963 twips)
rather than Calc's own 1280; and a sheet stating no `pageSetup` at all
keeps the application's paper rather than `paperSize`'s own default of
Letter, because `mbValidSettings` starts true.

Measured on `chart2/qa/extras/data/xlsx/`, all seven chart workbooks:
six went from 1 page to 2 against LibreOffice's 2, `bubble_chart_simple`
from 5 words to 20 of 26. Over the whole 154-file set the total absolute
word error went 2547 -> 2039 and exact matches 9 -> 14.

The corpus sweep is unmoved at 223 of 231; the spreadsheet suite is 253,
eleven more, in two new files.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PCFkGZ2rzTHM5gqrwG1P7U
Writer was the one family that never drew a chart, and the missing piece
was not a reader. `DrawingChart` and `OdfChart` are family-blind by
design and both already worked; what was absent was two call sites and a
third case in `PageFrame` beside `Image` and `Vector`.

`PageFrame.Chart` carries a `ChartPlot` and `ChartFontFamily` the face it
is set in. `Layout/FrameChart.cs` paints a laid-out chart straight into
the sink exactly as `SheetChart` does — fills, strokes and glyph runs,
so nothing in the display list knows a chart happened — and
`PageDrawing.DrawFrame` gained one branch. `DocxPictures.Chart` resolves
`c:chart/@r:id` against the part the drawing sits in, which is the scope
rule it already tracked for pictures; `OdfPictures.Chart` calls
`OdfChart.Locate` and covers the packaged and flat forms at once.
`DocxContentReader.ReadChart` closes the extraction half, where a DOCX
chart had extracted nothing while the same chart as an ODT extracted its
whole table.

Measured over LibreOffice's own chart2/qa/extras/data/docx and odt, 82
documents, pdftotext word counts against soffice --convert-to pdf: total
absolute word error 3689 -> 1348, exact matches 0 -> 27. Every one of
the 82 previously drew a chart of no words at all.

Three corpus documents, chart-bar-text.{fodt,odt,docx}, all 41/41 words
on one page, with tick labels within half a point of the reference's.
The packaged .odt pins the order of a frame's children: it carries 22 kB
of ObjectReplacements beside the object, and reading the draw:image
first is what recorded every ODS chart as a picture and painted nothing.

Corpus render sweep unchanged at 223 of 231 for the pre-existing rows,
plus the three new ones. 2640 tests, 0 failed, 0 skipped.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PCFkGZ2rzTHM5gqrwG1P7U
XLSB reads, in `Xlsb/`. BIFF12 records inside an OPC package, ported from
`sc/source/filter/oox/`: the framing from `recordparser.cxx`, the record ids
from `biffhelper.hxx`, the cell families from `sheetdatacontext.cxx`, the
print geometry from `pagesettings.cxx` and `worksheetfragment.cxx`. Half of
an XLSB is not binary and that shaped the work — the package is OPC and the
DrawingML parts are the same XML an XLSX holds, so `XlsxDrawings` and
`XlsxCharts` serve both paths unchanged and only the part name comes out of
BIFF12. Leaving that unwired was worth a page and eight words on
`sc/qa/unit/data/xlsb/tdf108017_calcProtection.xlsb`, whose chart read into
nothing.

LibreOffice cannot write XLSB, so there is no corpus fixture and never will
be. The evidence is the ten files in `sc/qa/unit/data/xlsb/`: **eight now
match LibreOffice exactly** on page count and `pdftotext` words. The two that
do not are pivot tables LibreOffice rebuilds from their caches rather than
reading, which is a difference in what the two programs do. `XlsbReaderTests`
assembles workbooks record by record for what a whole file cannot say —
which record a regression broke.

Then a much larger defect, found by re-measuring the print-area work rather
than by reasoning about it. `XlsxDrawings` kept a picture and a graphic frame
and dropped every `xdr:sp`, `xdr:cxnSp` and `xdr:grpSp`, on the reasonable
ground that nothing here can paint one. But Calc's print area is the bounding
box of every object on the drawing layer, and `GroupShapeContext::create
ShapeContext` takes all five kinds alike (`drawingfragment.cxx:198`) — so a
sheet whose only content was a shape had no printed block and produced **no
pages at all**: `paperless render` failed with "the page range selects none of
the 0 pages". Over the 55 workbooks in `sc/qa/unit/data/xlsx/` and
`chart2/qa/extras/data/xlsx/` that hold a sheet shape, **27 rendered nothing
and now 1 does** (`forcepoint107.xlsx`, which LibreOffice also declines), and
exact page-and-word matches went **7 to 15** — twelve of them chart workbooks
gaining the second page, or the third and fourth.

Two corrections came with it, both measured.

A shape whose `cNvPr` says `hidden="1"` **does** widen the print area. The
skip in `SheetDrawingArea` read `#i104716# don't include hidden note objects`
as though it were about the flag; it is about the layer, and `SC_LAYER_HIDDEN`
holds exactly one thing — the caption of a comment nobody has pinned open
(`postit.cxx:84`). `oox` gives a hidden shape `Visible = false` and leaves it
on the standard layer, and the line above the test admits the rest:
`//TODO: test Flags (hidden?)`. Worth 1 page and 11 words against
LibreOffice's 4 and 20 on `xlsb/universal-content.xlsb`, now 4/4 and 20/20.

And Calc drops a page nothing lands on. The printed block runs from A1, so a
shape 516 rows down costs ten sheets of paper of which nine are white;
`ScPrintPageRangesProvider` and `lcl_SetHidden` drop those, and three things
keep a page — a cell, a border, or any drawing whose rectangle *overlaps* it
(`ScDocument::IsPrintEmpty`, `documen9.cxx:449`). `Layout/SheetEmptyPages.cs`
is that port, narrower than Calc's where widening it would need text measured.
`sc/qa/unit/data/xlsx/singlecontrol.xlsx`: 10 pages to 1, and LibreOffice
prints 1.

Neither was visible from the corpus and that is recorded in `render-sweep.txt`:
every spreadsheet in it is small and dense, so not one has a blank page to drop
or a bare `xdr:sp` to lose. The sweep is unmoved at 223 of 231 and the six
chart rows are exact.

Suite 2653, twenty-one more in two new files.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PCFkGZ2rzTHM5gqrwG1P7U
…legend

The plot rectangle has been "about a point out" for three chart merges, measured
on one file, and looked for in the axis-label reservations each time. Build the
harness the brief asked for — compose every ODF chart in chart2/qa/extras/data/
with its stated chart:coordinate-region suppressed, compare against the file's
own answer — and the error is somewhere else entirely.

Mean absolute four-edge error over the 100 charts that state a region:
66.97 pt -> 33.43 pt. Charts with all four edges inside 10 pt: 21 -> 49; inside
5 pt: 11 -> 34. The right edge alone was 37.7 pt of the 66.97, and 74 of the 100
put their legend there.

Two things had to be true before any of that could be measured. An ODF file
states *both* rectangles — chart:plot-area's own svg:x..svg:height is
maRemainingSpace and chart:coordinate-region is the inner one — so
ChartDrawing.DiagramArea now carries the outer one and a discrepancy can be
attributed to one half or the other. And a corpus file's stated rectangle is not
necessarily LibreOffice's own answer: odp/chart.odp states a plot area at
0.77 cm and states 0.32 cm after a round trip through soffice, which is exactly
the two per cent we compute. Round-tripping the corpus first moved the measured
error 56.3 -> 49.2 with no code change.

What the right edge was, in five parts:

- The legend's width was an estimate. lcl_placeLegendEntries has padding of
  max(1 mm, 0.33 em) each side, a key of 0.6 em, a gap of max(1 mm, 0.22 em) and
  the name's text *shape*; a line chart's key is a flat 800 hundredths of a
  millimetre rather than a fraction of the font; and a side legend wraps into
  columns when the entries outrun the frame.
- The axis titles come out of maRemainingSpace before the diagram exists, not
  out of the diagram's own reservations.
- A series finds its column of the local-table by the range the table itself
  states in a draw:g/svg:desc, not by the column letter. The letter is right
  exactly when the charted range starts at column B; labelString.ods charts
  Sheet1.D6:D8 and every series came out nameless, which emptied the legend.
- chart:series-source="rows" transposes the table. Thirteen corpus charts state
  it and each read its series names as categories.

Also from the resumed work in progress, both verified rather than assumed: a
surface chart is read as the bar chart LibreOffice's own importer substitutes
for it (a synthesised c:surfaceChart converts to a PDF of 25 words, of which
declining drew 0 and a bar chart draws 21), and a doughnut keeps its hole, which
also stops a multi-series ring chart drawing every ring over the last.

VDiagram::adjustInnerSize is written down as *not* the missing pass, so it is
not chased a fourth time: substitute consumed = inner + reservations and it
reduces to the formula PlotAreaOf already computes.

chart2/qa word error unchanged at 79/38 on pptx and 6/9 on odp; all six corpus
chart rows still match LibreOffice page for page and word for word.
2631 tests, 0 failed, 0 skipped. Build warning-free.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PCFkGZ2rzTHM5gqrwG1P7U
Two Writer layout defects that looked unrelated turned out to be one
cause, and finding it meant disbelieving what was already written down.

`vector-picture-text.doc` had all three of its as-character pictures come
back floating, reserving no room and drawing over the paragraph after
each. `word-features.doc` drew its text box at 56.70 pt where LibreOffice
draws 134.00, on top of the sentence it belongs after. Both rows read OK
in the corpus sweep throughout — 13/13 and 154/154 words — which is why
neither was caught by it.

The recorded diagnosis for the first was that the `Data` stream held one
`PICF` where a raster version held one per picture. It holds three, at 0,
120 and 240, every one `cb=118 cbHeader=68 mm=0x64`. Nothing was missing.
What is in the text is the pair `U+0008 U+0001` — the canvas field shape
`ww8par.cxx:3599` names — and the `U+0008` carries a full `FSPA`
describing a floating shape. The only thing that contradicts it is one
byte in the `PlcFld`: the pair sits inside a field of type 95, `SHAPE`,
and `SwWW8ImplReader::IsInlineEscherHack` (`ww8par.hxx:1737`) is exactly
that test, after which `ProcessEscherAlign` anchors the shape
`FLY_AS_CHAR` rather than `FLY_AT_CHAR` (`ww8graf.cxx:2355`). A reader
that never opens the field table has an `FSPA` and no reason to distrust
it. `word-features.doc`'s box is in such a field too, at cp 666–677.

`Ww8FieldTypes` reads the `PlcFld` and the layout walk keeps a stack of
open field types beside the instruction depth it already kept — not the
same counter, since a shape sits in the field's *result* where the depth
is already back to nought.

Two halves that the anchor alone does not cover:

`ProcessEscherAlign` replaces the horizontal orientation and leaves the
vertical (`ww8graf.cxx:2436-2439`). These shapes state `posrelv` 3 with
`posv` 0 and a top of nought, which resolves through `aToLineVertOriTab`
and `GetRelPosToBase` to an ascent of nought: the object hangs below the
baseline and grows the line's descent. Resting it on the baseline instead
moved `word-features.doc`'s anchor line from 455.51 to 477.71.
`InlineObject` gains an optional `Ascent` — defaulting to the whole
height, so every existing caller keeps the numbers it was measured
against — and `PageFrame.InlineAscent` carries it.

The anchor characters have to go, and only when a frame was made of them:
LibreOffice inserts one only when the graphic *fails*
(`if (!pResult) cInsert = ' '`), and for the `U+0001` of a pair inside a
`SHAPE` field it reads one character ahead, finds no second `U+0001`, and
inserts nothing. Keeping them cost 18.67 pt of `.notdef` in the middle of
`word-features.doc`'s sentence.

Measured against LibreOffice's own PDF, word by word:
`vector-picture-text.doc` now agrees to within 1.24 pt everywhere.
`word-features.doc` draws its box's text at 134.01 against 134.00 and
"After the box." at 306.40 against 306.54, on the same line as "Before
the box." — where the pre-existing error was 22 pt vertically and 18.67
horizontally. Extraction is byte-identical to before for both.

The surviving chart commit's own claims were re-measured before anything
was added. `chart2/qa/extras/data/docx` and `odt`, 82 documents: total
absolute word error 3671 -> 1390 reproduces its 3689 -> 1348 within
ordinary run-to-run drift, but exact matches are **10, not 27**. The
likeliest cause is recorded: both directories hold a file called `chart`,
and `soffice --convert-to pdf` names its output after the input stem, so
one reference set silently overwrites part of the other. Both TODOs now
carry 10.

Corpus render sweep unchanged at 226 of 234, the same eight misses.
2645 tests, 0 failed, 0 skipped.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PCFkGZ2rzTHM5gqrwG1P7U
Three things a slide inherits or negotiates that were read and then dropped.

**Shrink-to-fit** (`Layout/SlideAutofit.cs`). A SmartArt `tx` node is autofitted
whether or not the file asks, so a `primFontSz` of 65 pt is an upper bound rather
than a size, and an ordinary shape's `a:normAutofit` means the same. Ported from
`SdrTextObj::autoFitTextForCompatibility` as **24.2.7.2** has it — the installed
soffice, fetched by tag, because this checkout is 27.2 alpha and master replaced
the bisection with a fixed twelve-level table under names close enough to read as
the same code. Verified on a probe deck of 227 plain text boxes: 225 come out at
the size LibreOffice draws. Over the 37 unbaked diagram decks the summed size
error against the reference falls from 1202.2 pt to 327.5.

Two units decide more than the search does. A scaled size is rounded to a whole
point and then to a whole hundredth of a millimetre, so 27 pt is 953 and its line
is 1144 rather than 1143.6, and the search ranks candidates by how close to one
their fit is — a tie that is exact in points is not one in the draw layer's unit.
The line height had been going through `LineSpacingRule.Apply`, which computes in
whole twips because that is Writer's unit; the font-independent branch now keeps
hundredths of a millimetre and the ODF branch, which measures the face's own
metrics, still goes through `Apply` because that is what its baselines match.

**`autoTxRot`**, so a cycle's labels stay upright while its nodes turn. Resolved
to quarter turns in the `tx` algorithm, emitted as `a:bodyPr/@rot`, read back by
the ordinary text-body reader; a quarter turn transposes the text rectangle about
its centre before the lines are broken. All 48 labels of `smartart-autoTxRot.pptx`
agree with the reference on pen, size and angle to 0.100 pt. The instrument had to
be fixed first: a rotated run is a `Tm` where an upright one is a `Td`, so the
run counter could not see the 41 runs that were wrong.

**A master's and a layout's non-placeholder shapes.** An Impress master page is a
PPTX master and a PPTX layout merged into one, so a logo on either is drawn under
every slide using that layout. `showMasterSp` is honoured and is not the
discriminator it looked like: none of the six sd/qa decks carrying such a shape
states it, and `slide-sections.pptx` merely parks its master's text boxes off the
page. `slide-master-shapes.pptx` is the new fixture.

`contDir="revDir"` is now known to be reached — `tdf84205.pptx` is the only file
in the tree that states it, and stripping its baked drawing puts it on the
evaluated path — and still not known to be right, because replacing the branch
with the same-direction one leaves that render byte-identical.

2643 tests, 0 failed, 0 skipped. All 27 presentation rows of the render sweep and
all 37 evaluated diagram decks' filled paths are unchanged.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PCFkGZ2rzTHM5gqrwG1P7U
Two defects that had survived because nothing pointed an instrument at them.

FormatCatalogue marked thirteen formats unreadable that read perfectly well —
xls, xlt, xlsb, csv, the six PresentationML spellings and the three PowerPoint
binary ones. `paperless identify` reports that flag, so the tool was telling
callers it could not open files it had been opening all day. The test pinning
the list was stale in the same direction, which is why it never failed; both are
now correct, and the test still enumerates rather than derives, so marking a
format readable stays a deliberate edit.

And a chart's labels were drawn in the generic serif. A chart is not a slide
shape and does not inherit the deck's typeface: chart2 gives its text
DefaultFontType::LATIN_SPREADSHEET, which resolves to Liberation Sans, and
pdffonts on LibreOffice's own PDF says exactly that. The spreadsheet side already
named the face; the presentation side passed a null typeface and substituted.

That one is not cosmetic, which is the point worth recording: the axis labels'
*width* is what reserves the plot area, so the wrong face was 1.73 pt of an error
that three separate attempts went looking for in the label geometry. Measured on
chart-bar-deck.odp, the plot's left edge is 1.29 pt short in the serif and
0.44 pt long in Liberation Sans. pdffonts now reports LiberationSans for both
our PDF and the reference.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PCFkGZ2rzTHM5gqrwG1P7U
theolivenbaum pushed a commit to curiosity-ai/x-ray-office that referenced this pull request Aug 19, 2026
…ng text

Task LibreOffice#63 recorded that two mechanisms produced the tpr output — move the
note whole, or split it and leave nothing behind — and that they are
indistinguishable there because the note is short. This probe separates
them with a note long enough that part of it could have fitted.

    case  body   ref cite pg   ref words on cite pg / later   our cite pg
       4    55             4                   59 / 0                   4
       5    56             5                   49 / 10  SPLIT           5
       6    57             6                   17 / 42  SPLIT           7
       7    58             8                   59 / 0                   9

    reference 14 pages, ours 15

The note is cut at whatever room is left and the remainder flows on. Cases
5 and 6 leave 49 then 17 of 59 words behind, a monotone fall as the body
grows. "Moved whole" is refuted: it predicts nought or fifty-nine, never
seventeen.

Cases 7-10 read as a return to "all on citing page" and are not — the
reference's citing page jumps by two each time because the body has
outgrown one page and the citing paragraph lands on a fresh one. They are
the control.

We diverge from case 6 on, which is the tpr defect in miniature: the
reference keeps the citing paragraph and cuts the note, we move the
paragraph and keep the note whole. A split may leave zero lines, which is
tpr — footnote 1 had already filled the area — so that is the same rule at
its boundary rather than a second rule.

Two instrument faults, both recorded in the probe. The first range (20-42
body lines) never reached the regime: an A4 page at these margins holds
about 62 lines, so every case fitted and all ten reported the same useless
answer. And the superscript merges into the preceding word, extracting as
CITES1, so matching on equality located no citing page at all while still
printing ten confident verdicts.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GaMTqGsGtQPgZrzgEPeCAB
theolivenbaum pushed a commit to curiosity-ai/x-ray-office that referenced this pull request Aug 19, 2026
Replaces the reservation floor from 64e522e with the quantity it was
approximating. The notes' room is what is left below the body's INK, not
below `used`: the two differ by the last paragraph's space-after, which
`used` carries and which the notes are entitled to sit in. Writer never
sees that gap at all, because its footnote container is positioned from
the page bottom rather than from where the body's spacing ends.

Same result on the cases that mattered — EHEST-SMS-Safety-Management-
Manual-V2.docx page 17 keeps its footnote at 44 lines, exactly the
reference's count, and tpr stays 7/7 — but by measuring rather than
restoring.

The floor was the wrong shape and the difference is not cosmetic. It
hands back room the fitting had reserved, so anything that later draws UP
TO the room available fills to the reservation and overruns the page.
Implementing the footnote split on top of the floor did exactly that: the
page took 72 lines against the reference's 44. On this quantity the split
composes properly, because it is the real geometry.

words/done-* 161/161. WordProcessing 1004, Text 581, Core 337.

THE SPLIT IS STILL OUT, tried twice now, and the remaining gap is named
in task LibreOffice#63: HeightOfNote must shrink to a partially drawn note's
REMAINING lines. Without that a carried note re-reserves its whole height
on every later page, which moves the body, which moves what the next page
cites — the pagination cascades and page-by-page comparison against a
fixed reference stops meaning anything. With the split in, EHEST reaches
81 pages against 82 and the probe 13 against 14, both closer, while page
17 loses its footnotes again. Closer numbers, worse page.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GaMTqGsGtQPgZrzgEPeCAB
timar pushed a commit to CollaboraOnline/online.mirror that referenced this pull request Sep 10, 2026
...as exposed by new CppunitTest_sc_ooxml_functions_let_test
(a032369 "sc: add LET function test with a
self-checking workbook"),

> ==1372959==ERROR: AddressSanitizer: heap-use-after-free on address 0x7c29283ee55b at pc 0x7bf8b847c25d bp 0x7fff75185d90 sp 0x7fff75185d88
> READ of size 1 at 0x7c29283ee55b thread T0
>  #0 in formula::FormulaToken::IncRef() const at engine/include/formula/token.hxx:162:17
>  LibreOffice#1 in formula::intrusive_ptr_add_ref(formula::FormulaToken const*) at engine/include/formula/token.hxx:232:8
>  LibreOffice#2 in boost::intrusive_ptr<formula::FormulaToken const>::intrusive_ptr(formula::FormulaToken const*, bool) at engine/workdir/UnpackedTarball/boost/boost/smart_ptr/intrusive_ptr.hpp:59:34
>  LibreOffice#3 in std::pair<boost::intrusive_ptr<formula::FormulaToken const> const, boost::intrusive_ptr<formula::FormulaToken const>>::pair<formula::FormulaToken const*&, formula::FormulaToken const*&>(formula::FormulaToken const*&, formula::FormulaToken const*&) at ~/gcc/inst/lib/gcc/x86_64-pc-linux-gnu/17.0.0/../../../../include/c++/17.0.0/bits/stl_pair.h:467:4
>  LibreOffice#4 in T* std::construct_at<std::pair<boost::intrusive_ptr<formula::FormulaToken const> const, boost::intrusive_ptr<formula::FormulaToken const>>, formula::FormulaToken const*&, formula::FormulaToken const*&>(T*, T0&&...) at ~/gcc/inst/lib/gcc/x86_64-pc-linux-gnu/17.0.0/../../../../include/c++/17.0.0/bits/stl_construct.h:110:22
>  LibreOffice#5 in void std::allocator_traits<std::allocator<std::__detail::_Hash_node<std::pair<boost::intrusive_ptr<formula::FormulaToken const> const, boost::intrusive_ptr<formula::FormulaToken const>>, true>>>::construct<std::pair<boost::intrusive_ptr<formula::FormulaToken const> const, boost::intrusive_ptr<formula::FormulaToken const>>, formula::FormulaToken const*&, formula::FormulaToken const*&>(std::allocator<std::__detail::_Hash_node<std::pair<boost::intrusive_ptr<formula::FormulaToken const> const, boost::intrusive_ptr<formula::FormulaToken const>>, true>>&, std::pair<boost::intrusive_ptr<formula::FormulaToken const> const, boost::intrusive_ptr<formula::FormulaToken const>>*, formula::FormulaToken const*&, formula::FormulaToken const*&) at ~/gcc/inst/lib/gcc/x86_64-pc-linux-gnu/17.0.0/../../../../include/c++/17.0.0/bits/alloc_traits.h:727:4
>  LibreOffice#6 in std::__detail::_Hash_node<std::pair<boost::intrusive_ptr<formula::FormulaToken const> const, boost::intrusive_ptr<formula::FormulaToken const>>, true>* std::__detail::_Hashtable_alloc<std::allocator<std::__detail::_Hash_node<std::pair<boost::intrusive_ptr<formula::FormulaToken const> const, boost::intrusive_ptr<formula::FormulaToken const>>, true>>>::_M_allocate_node<formula::FormulaToken const*&, formula::FormulaToken const*&>(formula::FormulaToken const*&, formula::FormulaToken const*&) at ~/gcc/inst/lib/gcc/x86_64-pc-linux-gnu/17.0.0/../../../../include/c++/17.0.0/bits/hashtable_policy.h:1575:6
>  LibreOffice#7 in std::pair<std::__detail::_Node_iterator<std::pair<boost::intrusive_ptr<formula::FormulaToken const> const, boost::intrusive_ptr<formula::FormulaToken const>>, false, true>, bool> std::_Hashtable<boost::intrusive_ptr<formula::FormulaToken const> const, std::pair<boost::intrusive_ptr<formula::FormulaToken const> const, boost::intrusive_ptr<formula::FormulaToken const>>, std::allocator<std::pair<boost::intrusive_ptr<formula::FormulaToken const> const, boost::intrusive_ptr<formula::FormulaToken const>>>, std::__detail::_Select1st, std::equal_to<boost::intrusive_ptr<formula::FormulaToken const> const>, FormulaTokenRef_hash, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, false, true>>::_M_emplace_uniq<formula::FormulaToken const*&, formula::FormulaToken const*&>(formula::FormulaToken const*&, formula::FormulaToken const*&) at ~/gcc/inst/lib/gcc/x86_64-pc-linux-gnu/17.0.0/../../../../include/c++/17.0.0/bits/hashtable.h:2369:13
>  LibreOffice#8 in std::pair<std::__detail::_Node_iterator<std::pair<boost::intrusive_ptr<formula::FormulaToken const> const, boost::intrusive_ptr<formula::FormulaToken const>>, false, true>, bool> std::_Hashtable<boost::intrusive_ptr<formula::FormulaToken const> const, std::pair<boost::intrusive_ptr<formula::FormulaToken const> const, boost::intrusive_ptr<formula::FormulaToken const>>, std::allocator<std::pair<boost::intrusive_ptr<formula::FormulaToken const> const, boost::intrusive_ptr<formula::FormulaToken const>>>, std::__detail::_Select1st, std::equal_to<boost::intrusive_ptr<formula::FormulaToken const> const>, FormulaTokenRef_hash, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, false, true>>::emplace<formula::FormulaToken const*&, formula::FormulaToken const*&>(formula::FormulaToken const*&, formula::FormulaToken const*&) at ~/gcc/inst/lib/gcc/x86_64-pc-linux-gnu/17.0.0/../../../../include/c++/17.0.0/bits/hashtable.h:1050:13
>  LibreOffice#9 in std::pair<std::__detail::_Node_iterator<std::pair<boost::intrusive_ptr<formula::FormulaToken const> const, boost::intrusive_ptr<formula::FormulaToken const>>, false, true>, bool> std::__cxx1998::unordered_map<boost::intrusive_ptr<formula::FormulaToken const> const, boost::intrusive_ptr<formula::FormulaToken const>, FormulaTokenRef_hash, std::equal_to<boost::intrusive_ptr<formula::FormulaToken const> const>, std::allocator<std::pair<boost::intrusive_ptr<formula::FormulaToken const> const, boost::intrusive_ptr<formula::FormulaToken const>>>>::emplace<formula::FormulaToken const*&, formula::FormulaToken const*&>(formula::FormulaToken const*&, formula::FormulaToken const*&) at ~/gcc/inst/lib/gcc/x86_64-pc-linux-gnu/17.0.0/../../../../include/c++/17.0.0/bits/unordered_map.h:457:16
>  LibreOffice#10 in std::pair<__gnu_debug::_Safe_iterator<std::__detail::_Node_iterator<std::pair<boost::intrusive_ptr<formula::FormulaToken const> const, boost::intrusive_ptr<formula::FormulaToken const>>, false, true>, std::__debug::unordered_map<boost::intrusive_ptr<formula::FormulaToken const> const, boost::intrusive_ptr<formula::FormulaToken const>, FormulaTokenRef_hash, std::equal_to<boost::intrusive_ptr<formula::FormulaToken const> const>, std::allocator<std::pair<boost::intrusive_ptr<formula::FormulaToken const> const, boost::intrusive_ptr<formula::FormulaToken const>>>>, std::forward_iterator_tag>, bool> std::__debug::unordered_map<boost::intrusive_ptr<formula::FormulaToken const> const, boost::intrusive_ptr<formula::FormulaToken const>, FormulaTokenRef_hash, std::equal_to<boost::intrusive_ptr<formula::FormulaToken const> const>, std::allocator<std::pair<boost::intrusive_ptr<formula::FormulaToken const> const, boost::intrusive_ptr<formula::FormulaToken const>>>>::emplace<formula::FormulaToken const*&, formula::FormulaToken const*&>(formula::FormulaToken const*&, formula::FormulaToken const*&) at ~/gcc/inst/lib/gcc/x86_64-pc-linux-gnu/17.0.0/../../../../include/c++/17.0.0/debug/unordered_map:375:24
>  LibreOffice#11 in ScInterpreter::Interpret() at engine/sc/source/core/tool/interpr4.cxx:4423:38
>  LibreOffice#12 in ScInterpreter::ScCall(boost::intrusive_ptr<formula::FormulaCallable const>, std::__debug::vector<boost::intrusive_ptr<formula::FormulaToken const>, std::allocator<boost::intrusive_ptr<formula::FormulaToken const>>> const&) at engine/sc/source/core/tool/interpr1.cxx:11073:46
>  LibreOffice#13 in ScInterpreter::ScLet() at engine/sc/source/core/tool/interpr1.cxx:11318:5
>  LibreOffice#14 in ScInterpreter::DispatchOpCode(OpCode) at engine/sc/source/core/tool/interpr4.cxx:3890:35
>  LibreOffice#15 in ScInterpreter::Interpret() at engine/sc/source/core/tool/interpr4.cxx:4414:17
>  LibreOffice#16 in ScFormulaCell::InterpretTail(ScInterpreterContext&, ScFormulaCell::ScInterpretTailParameter) at engine/sc/source/core/data/formulacell.cxx:2275:23
>  LibreOffice#17 in ScFormulaCell::Interpret(int, int) at engine/sc/source/core/data/formulacell.cxx:1917:13
>  LibreOffice#18 in ScFormulaCell::MaybeInterpret() at engine/sc/inc/formulacell.hxx:515:17
>  LibreOffice#19 in ScFormulaCell::IsEmpty() at engine/sc/source/core/data/formulacell.cxx:3219:5
>  LibreOffice#20 in ScRefCellValue::hasEmptyValue() at engine/sc/source/core/data/cellvalue.cxx:699:27
>  LibreOffice#21 in ScInterpreter::Compare(ScQueryOp) at engine/sc/source/core/tool/interpr1.cxx:880:27
>  LibreOffice#22 in ScInterpreter::ScEqual() at engine/sc/source/core/tool/interpr1.cxx:1144:22
>  LibreOffice#23 in ScInterpreter::DispatchOpCode(OpCode) at engine/sc/source/core/tool/interpr4.cxx:3851:35
>  LibreOffice#24 in ScInterpreter::Interpret() at engine/sc/source/core/tool/interpr4.cxx:4414:17
>  LibreOffice#25 in ScFormulaCell::InterpretTail(ScInterpreterContext&, ScFormulaCell::ScInterpretTailParameter) at engine/sc/source/core/data/formulacell.cxx:2275:23
>  LibreOffice#26 in ScFormulaCell::Interpret(int, int) at engine/sc/source/core/data/formulacell.cxx:1917:13
>  LibreOffice#27 in ScFormulaCell::MaybeInterpret() at engine/sc/inc/formulacell.hxx:515:17
>  LibreOffice#28 in ScFormulaCell::GetErrorOrValue(FormulaError&, double&) at engine/sc/source/core/data/formulacell.cxx:3515:5
>  LibreOffice#29 in ScValueIterator::GetThis(double&, FormulaError&) at engine/sc/source/core/data/dociter.cxx:226:27
>  LibreOffice#30 in ScValueIterator::GetNext(double&, FormulaError&) at engine/sc/source/core/data/dociter.cxx:310:12
>  LibreOffice#31 in ScInterpreter::ScAnd() at engine/sc/source/core/tool/interpr1.cxx:1289:42
>  LibreOffice#32 in ScInterpreter::DispatchOpCode(OpCode) at engine/sc/source/core/tool/interpr4.cxx:3857:35
>  LibreOffice#33 in ScInterpreter::Interpret() at engine/sc/source/core/tool/interpr4.cxx:4414:17
>  LibreOffice#34 in ScFormulaCell::InterpretTail(ScInterpreterContext&, ScFormulaCell::ScInterpretTailParameter) at engine/sc/source/core/data/formulacell.cxx:2275:23
>  LibreOffice#35 in ScFormulaCell::Interpret(int, int) at engine/sc/source/core/data/formulacell.cxx:1917:13
>  LibreOffice#36 in ScFormulaCell::MaybeInterpret() at engine/sc/inc/formulacell.hxx:515:17
>  LibreOffice#37 in ScFormulaCell::GetErrCode() at engine/sc/source/core/data/formulacell.cxx:3494:5
>  LibreOffice#38 in ScCellFormat::GetString(ScRefCellValue const&, unsigned int, Color const**, ScInterpreterContext*, ScDocument const&, bool, bool, bool) at engine/sc/source/core/tool/cellform.cxx:90:59
>  LibreOffice#39 in ScColumn::UpdateScriptType(sc::CellTextAttr&, int, mdds::mtv::soa::detail::iterator_base<mdds::mtv::soa::multi_type_vector<sc::CellStoreTraits>::iterator_trait>&) at engine/sc/source/core/data/column3.cxx:878:21
>  LibreOffice#40 in ScColumn::GetRangeScriptType(mdds::mtv::soa::detail::iterator_base<mdds::mtv::soa::multi_type_vector<sc::CellTextAttrTraits>::iterator_trait>&, int, int, mdds::mtv::soa::detail::iterator_base<mdds::mtv::soa::multi_type_vector<sc::CellStoreTraits>::iterator_trait> const&) at engine/sc/source/core/data/column2.cxx:2359:17
>  LibreOffice#41 in (anonymous namespace)::FindEditCellsHandler::operator()(unsigned long, ScFormulaCell const*) at engine/sc/source/core/data/column.cxx:2994:46
>  LibreOffice#42 in std::pair<mdds::mtv::soa::multi_type_vector<sc::CellStoreTraits>::const_iterator, unsigned long> sc::CheckElem<mdds::mtv::noncopyable_managed_element_block<54, ScFormulaCell, mdds::mtv::delayed_delete_vector>, mdds::mtv::soa::multi_type_vector<sc::CellStoreTraits>, (anonymous namespace)::FindEditCellsHandler>(mdds::mtv::soa::multi_type_vector<sc::CellStoreTraits> const&, mdds::mtv::soa::multi_type_vector<sc::CellStoreTraits>::const_iterator const&, unsigned long, unsigned long, (anonymous namespace)::FindEditCellsHandler&) at engine/sc/inc/mtvfunctions.hxx:159:13
>  LibreOffice#43 in std::pair<mdds::mtv::soa::multi_type_vector<sc::CellStoreTraits>::const_iterator, mdds::mtv::soa::multi_type_vector<sc::CellStoreTraits>::size_type> sc::FindElement2<mdds::mtv::soa::multi_type_vector<sc::CellStoreTraits>, mdds::mtv::noncopyable_managed_element_block<53, EditTextObject, mdds::mtv::delayed_delete_vector>, mdds::mtv::noncopyable_managed_element_block<54, ScFormulaCell, mdds::mtv::delayed_delete_vector>, (anonymous namespace)::FindEditCellsHandler, (anonymous namespace)::FindEditCellsHandler>(mdds::mtv::soa::multi_type_vector<sc::CellStoreTraits> const&, mdds::mtv::soa::multi_type_vector<sc::CellStoreTraits>::size_type, mdds::mtv::soa::multi_type_vector<sc::CellStoreTraits>::size_type, (anonymous namespace)::FindEditCellsHandler&, (anonymous namespace)::FindEditCellsHandler&) at engine/sc/inc/mtvfunctions.hxx:506:37
>  LibreOffice#44 in std::pair<mdds::mtv::soa::detail::const_iterator_base<mdds::mtv::soa::multi_type_vector<sc::CellStoreTraits>::const_iterator_trait, mdds::mtv::soa::detail::iterator_base<mdds::mtv::soa::multi_type_vector<sc::CellStoreTraits>::iterator_trait>>, unsigned long> sc::FindFormulaEditText<(anonymous namespace)::FindEditCellsHandler>(mdds::mtv::soa::multi_type_vector<sc::CellStoreTraits> const&, int, int, (anonymous namespace)::FindEditCellsHandler&) at engine/sc/inc/mtvcellfunc.hxx:140:12
>  LibreOffice#45 in ScColumn::HasEditCells(int, int, int&) at engine/sc/source/core/data/column.cxx:3340:9
>  LibreOffice#46 in ScColumn::GetOptimalHeight(sc::RowHeightContext&, int, int, unsigned short, int) at engine/sc/source/core/data/column2.cxx:950:38
>  LibreOffice#47 in (anonymous namespace)::GetOptimalHeightsInColumn(sc::RowHeightContext&, ScColContainer&, int, int, ScProgress*, unsigned long) at engine/sc/source/core/data/table1.cxx:121:20
>  LibreOffice#48 in ScTable::SetOptimalHeight(sc::RowHeightContext&, int, int, bool, ScProgress*, unsigned long) at engine/sc/source/core/data/table1.cxx:514:9
>  LibreOffice#49 in ScDocRowHeightUpdater::updateAll(bool) at engine/sc/source/core/data/dociter.cxx:1734:33
>  LibreOffice#50 in ScDocRowHeightUpdater::update(bool) at engine/sc/source/core/data/dociter.cxx:1662:9
>  LibreOffice#51 in ScDocShell::UpdateAllRowHeights(bool) at engine/sc/source/ui/docshell/docsh5.cxx:475:14
>  LibreOffice#52 in oox::xls::WorkbookGlobals::finalize() at engine/sc/source/filter/oox/workbookhelper.cxx:660:21
>  LibreOffice#53 in oox::xls::WorkbookGlobals::ImplDestroy() at engine/sc/source/filter/oox/workbookhelper.cxx:326:5
>  LibreOffice#54 in oox::xls::WorkbookGlobals::~WorkbookGlobals() at engine/sc/source/filter/oox/workbookhelper.cxx:332:35
>  LibreOffice#55 in void std::destroy_at<oox::xls::WorkbookGlobals>(oox::xls::WorkbookGlobals*) at ~/gcc/inst/lib/gcc/x86_64-pc-linux-gnu/17.0.0/../../../../include/c++/17.0.0/bits/stl_construct.h:88:15
>  LibreOffice#56 in void std::_Destroy<oox::xls::WorkbookGlobals>(oox::xls::WorkbookGlobals*) at ~/gcc/inst/lib/gcc/x86_64-pc-linux-gnu/17.0.0/../../../../include/c++/17.0.0/bits/stl_construct.h:164:7
>  LibreOffice#57 in void std::allocator_traits<std::allocator<void>>::destroy<oox::xls::WorkbookGlobals>(std::allocator<void>&, oox::xls::WorkbookGlobals*) at ~/gcc/inst/lib/gcc/x86_64-pc-linux-gnu/17.0.0/../../../../include/c++/17.0.0/bits/alloc_traits.h:875:4
>  LibreOffice#58 in std::_Sp_counted_ptr_inplace<oox::xls::WorkbookGlobals, std::allocator<void>, (__gnu_cxx::_Lock_policy)2>::_M_dispose() at ~/gcc/inst/lib/gcc/x86_64-pc-linux-gnu/17.0.0/../../../../include/c++/17.0.0/bits/shared_ptr_base.h:650:2
>  LibreOffice#59 in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release() at ~/gcc/inst/lib/gcc/x86_64-pc-linux-gnu/17.0.0/../../../../include/c++/17.0.0/bits/shared_ptr_base.h:423:8
>  LibreOffice#60 in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count() at ~/gcc/inst/lib/gcc/x86_64-pc-linux-gnu/17.0.0/../../../../include/c++/17.0.0/bits/shared_ptr_base.h:1101:11
>  LibreOffice#61 in std::__shared_ptr<oox::xls::WorkbookGlobals, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr() at ~/gcc/inst/lib/gcc/x86_64-pc-linux-gnu/17.0.0/../../../../include/c++/17.0.0/bits/shared_ptr_base.h:1575:25
>  LibreOffice#62 in std::shared_ptr<oox::xls::WorkbookGlobals>::~shared_ptr() at ~/gcc/inst/lib/gcc/x86_64-pc-linux-gnu/17.0.0/../../../../include/c++/17.0.0/bits/shared_ptr.h:157:11
>  LibreOffice#63 in oox::xls::ExcelFilter::importDocument() at engine/sc/source/filter/oox/excelfilter.cxx:135:5
>  LibreOffice#64 in oox::core::FilterBase::filter(cpo::uno::Sequence<com::sun::star::beans::PropertyValue> const&) at engine/oox/source/core/filterbase.cxx:493:49
>  LibreOffice#65 in oox::xls::ExcelFilter::filter(cpo::uno::Sequence<com::sun::star::beans::PropertyValue> const&) at engine/sc/source/filter/oox/excelfilter.cxx:185:25
>  LibreOffice#66 in SfxObjectShell::ImportFrom(SfxMedium&, com::sun::star::uno::Reference<com::sun::star::text::XTextRange> const&) at engine/sfx2/source/doc/objstor.cxx:2574:34
>  LibreOffice#67 in ScDocShell::ImportFrom(SfxMedium&, com::sun::star::uno::Reference<com::sun::star::text::XTextRange> const&) at engine/sc/source/ui/docshell/docsh.cxx:557:28
>  LibreOffice#68 in SfxObjectShell::DoLoad(SfxMedium*) at engine/sfx2/source/doc/objstor.cxx:756:23
>  #69 in SfxBaseModel::load(cpo::uno::Sequence<com::sun::star::beans::PropertyValue> const&) at engine/sfx2/source/doc/sfxbasemodel.cxx:1995:36
>  #70 in (anonymous namespace)::SfxFrameLoader_Impl::load(cpo::uno::Sequence<com::sun::star::beans::PropertyValue> const&, com::sun::star::uno::Reference<com::sun::star::frame::XFrame> const&) at engine/sfx2/source/view/frmload.cxx:784:28
>  #71 in framework::LoadEnv::impl_loadContent() at engine/framework/source/loadenv/loadenv.cxx:1174:37
>  #72 in framework::LoadEnv::start() at engine/framework/source/loadenv/loadenv.cxx:410:20
>  #73 in framework::LoadEnv::startLoading(rtl::OUString const&, cpo::uno::Sequence<com::sun::star::beans::PropertyValue> const&, com::sun::star::uno::Reference<com::sun::star::frame::XFrame> const&, rtl::OUString const&, int, LoadEnvFeatures) at engine/framework/source/loadenv/loadenv.cxx:306:5
>  #74 in framework::LoadEnv::loadComponentFromURL(com::sun::star::uno::Reference<com::sun::star::frame::XComponentLoader> const&, com::sun::star::uno::Reference<cpo::uno::XComponentContext> const&, rtl::OUString const&, rtl::OUString const&, int, cpo::uno::Sequence<com::sun::star::beans::PropertyValue> const&) at engine/framework/source/loadenv/loadenv.cxx:170:14
>  #75 in framework::Desktop::loadComponentFromURL(rtl::OUString const&, rtl::OUString const&, int, cpo::uno::Sequence<com::sun::star::beans::PropertyValue> const&) at engine/framework/source/services/desktop.cxx:591:16
>  #76 in non-virtual thunk to framework::Desktop::loadComponentFromURL(rtl::OUString const&, rtl::OUString const&, int, cpo::uno::Sequence<com::sun::star::beans::PropertyValue> const&) at engine/framework/source/services/desktop.cxx
>  #77 in unotest::MacrosTest::loadFromDesktop(rtl::OUString const&, rtl::OUString const&, cpo::uno::Sequence<com::sun::star::beans::PropertyValue> const&) at engine/unotest/source/cpp/macros_test.cxx:73:62
>  #78 in UnoApiTest::loadWithParams(rtl::OUString const&, cpo::uno::Sequence<com::sun::star::beans::PropertyValue> const&) at engine/test/source/unoapi_test.cxx:327:19
>  #79 in UnoApiTest::loadFromURL(rtl::OUString const&, char const*) at engine/test/source/unoapi_test.cxx:309:5
>  #80 in UnoApiTest::loadFromFile(std::basic_string_view<char16_t, std::char_traits<char16_t>>, char const*) at engine/test/source/unoapi_test.cxx:334:5
>  #81 in ScModelTestBase::createScDoc(char const*, char const*, bool) at engine/sc/qa/unit/helper/qahelper.cxx:661:9
>  #82 in testLetXlsxRoundTrip::TestBody() at engine/sc/qa/unit/functions_let.cxx:23:5
>
> 0x7c29283ee55b is located 11 bytes inside of 24-byte region [0x7c29283ee550,0x7c29283ee568)
> freed by thread T0 here:
>  #0 in operator delete(void*, unsigned long) at ~/github.com/llvm/llvm-project/compiler-rt/lib/asan/asan_new_delete.cpp:187:3
>  LibreOffice#1 in formula::FormulaByteToken::~FormulaByteToken() at engine/include/formula/token.hxx:259:25
>  LibreOffice#2 in formula::FormulaToken::Delete() at engine/include/formula/token.hxx:150:51
>  LibreOffice#3 in formula::FormulaToken::DecRef() const at engine/include/formula/token.hxx:183:54
>  LibreOffice#4 in formula::intrusive_ptr_release(formula::FormulaToken const*) at engine/include/formula/token.hxx:237:8
>  LibreOffice#5 in boost::intrusive_ptr<formula::FormulaToken>::~intrusive_ptr() at engine/workdir/UnpackedTarball/boost/boost/smart_ptr/intrusive_ptr.hpp:76:23
>  LibreOffice#6 in ScInterpreter::ScCall(boost::intrusive_ptr<formula::FormulaCallable const>, unsigned char) at engine/sc/source/core/tool/interpr1.cxx:10516:1
>  LibreOffice#7 in ScInterpreter::ScCall() at engine/sc/source/core/tool/interpr1.cxx:11261:5
>  LibreOffice#8 in ScInterpreter::DispatchOpCode(OpCode) at engine/sc/source/core/tool/interpr4.cxx:3863:35
>  LibreOffice#9 in ScInterpreter::Interpret() at engine/sc/source/core/tool/interpr4.cxx:4414:17
>  LibreOffice#10 in ScInterpreter::ScCall(boost::intrusive_ptr<formula::FormulaCallable const>, std::__debug::vector<boost::intrusive_ptr<formula::FormulaToken const>, std::allocator<boost::intrusive_ptr<formula::FormulaToken const>>> const&) at engine/sc/source/core/tool/interpr1.cxx:11073:46

Signed-off-by: Stephan Bergmann <stephan.bergmann@collabora.com>
Change-Id: Ia96ac43fafe863393ca5fa94f619e3e784ff31b1
Reviewed-on: https://gerrit.collaboraoffice.com/c/online/+/11994
Reviewed-by: Tomaž Vajngerl <tomaz.vajngerl@collabora.com>
Tested-by: Jenkins CPCI <releng@collaboraoffice.com>
bise86 pushed a commit to bise86/LibreOffice that referenced this pull request Sep 29, 2026
Otherwise, this triggers the following assertion:

    soffice.bin: .../vcl/source/app/dbggui.cxx:36: void ImplDbgTestSolarMutex(bool): Assertion `ImplGetSVData()->mpDefInst->GetYieldMutex()->IsCurrentThread() && "SolarMutex not owned!"' failed.

when opening an Impress presenation with a slide containing
a video with SAL_VCL_QT_USE_QT_FRAME_GRABBER=1, potentially
since

    commit 88e9af0
    Date:   Wed Aug 6 09:49:42 2025 +0200

        BitmapEx->Bitmap in PngImageReader

and follow-up commit

    commit 32627a5
    Date:   Wed Aug 6 15:48:28 2025 +0200

        blind fix for qt6 build

Backtrace:

    Thread 1 received signal SIGABRT, Aborted.
    __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44
    warning: 44     ./nptl/pthread_kill.c: No such file or directory
    (rr) bt
    #0  __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44
    LibreOffice#1  0x00007fbf6409e9ff in __pthread_kill_internal (threadid=<optimized out>, signo=6) at ./nptl/pthread_kill.c:89
    LibreOffice#2  0x00007fbf64049cc2 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
    LibreOffice#3  0x00007fbf640324ac in __GI_abort () at ./stdlib/abort.c:73
    LibreOffice#4  0x00007fbf64032420 in __assert_fail_base (fmt=<optimized out>, assertion=<optimized out>, file=<optimized out>, line=36, function=<optimized out>) at ./assert/assert.c:118
    LibreOffice#5  0x00007fbf5b3889ec in ImplDbgTestSolarMutex (owned=true) at /home/michi/development/git/libreoffice/vcl/source/app/dbggui.cxx:36
    LibreOffice#6  0x00007fbf6352b124 in DbgTestSolarMutex (owned=true) at /home/michi/development/git/libreoffice/tools/source/debug/debug.cxx:54
    LibreOffice#7  0x00007fbf5b24fafb in VirtualDevice::AcquireGraphics (this=0x557da1d5e290) at /home/michi/development/git/libreoffice/vcl/source/gdi/virdev.cxx:49
    LibreOffice#8  0x00007fbf5aecf733 in OutputDevice::DrawRect (this=0x557da1d5e290, rRect=...) at /home/michi/development/git/libreoffice/vcl/source/outdev/rect.cxx:67
    LibreOffice#9  0x00007fbf5aee0999 in OutputDevice::DrawColorWallpaper (this=0x557da1d5e290, nX=0, nY=0, nWidth=721, nHeight=401, rWallpaper=...) at /home/michi/development/git/libreoffice/vcl/source/outdev/wallpaper.cxx:90
    LibreOffice#10 0x00007fbf5aedefcf in OutputDevice::DrawWallpaper (this=0x557da1d5e290, nX=0, nY=0, nWidth=721, nHeight=401, rWallpaper=...) at /home/michi/development/git/libreoffice/vcl/source/outdev/wallpaper.cxx:70
    LibreOffice#11 0x00007fbf5aedeeab in OutputDevice::DrawWallpaper (this=0x557da1d5e290, rRect=..., rWallpaper=...) at /home/michi/development/git/libreoffice/vcl/source/outdev/wallpaper.cxx:53
    LibreOffice#12 0x00007fbf5b2523b0 in VirtualDevice::InnerImplSetOutputSizePixel (this=0x557da1d5e290, rNewSize=Size = {...}, bErase=true, bAlphaMaskTransparent=true) at /home/michi/development/git/libreoffice/vcl/source/gdi/virdev.cxx:295
    LibreOffice#13 0x00007fbf5b2527dd in VirtualDevice::SetOutputSizePixel (this=0x557da1d5e290, rNewSize=Size = {...}, bErase=true, bAlphaMaskTransparent=true) at /home/michi/development/git/libreoffice/vcl/source/gdi/virdev.cxx:350
    LibreOffice#14 0x00007fbf5b2ac951 in Bitmap::Bitmap (this=0x7fffdcfcae00, rBitmapEx=...) at /home/michi/development/git/libreoffice/vcl/source/bitmap/bitmap.cxx:146
    LibreOffice#15 0x00007fbf5b5e8e6f in vcl::PngImageReader::read (this=0x7fffdcfcb128, rBitmap=...) at /home/michi/development/git/libreoffice/vcl/source/filter/png/PngImageReader.cxx:820
    LibreOffice#16 0x00007fbf2c1be088 in (anonymous namespace)::toXGraphic (rImage=...) at /home/michi/development/git/libreoffice/avmedia/source/qt6/QtFrameGrabber.cxx:36
    LibreOffice#17 0x00007fbf2c1bda8e in avmedia::qt::QtFrameGrabber::onVideoFrameChanged (this=0x7fbf24003b00, rFrame=...) at /home/michi/development/git/libreoffice/avmedia/source/qt6/QtFrameGrabber.cxx:73
    LibreOffice#18 0x00007fbf2c1c33d4 in QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, QtPrivate::List<QVideoFrame const&>, void, void (avmedia::qt::QtFrameGrabber::*)(QVideoFrame const&)>::call(void (avmedia::qt::QtFrameGrabber::*)(QVideoFrame const&), avmedia::qt::QtFrameGrabber*, void**)::{lambda()LibreOffice#1}::operator()() const (this=0x7fffdcfcb300) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:127
    LibreOffice#19 0x00007fbf2c1c3359 in QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, QtPrivate::List<QVideoFrame const&>, void, void (avmedia::qt::QtFrameGrabber::*)(QVideoFrame const&)>::call(void (avmedia::qt::QtFrameGrabber::*)(QVideoFrame const&), avmedia::qt::QtFrameGrabber*, void**)::{lambda()LibreOffice#1}>(void**, QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, QtPrivate::List<QVideoFrame const&>, void, void (avmedia::qt::QtFrameGrabber::*)(QVideoFrame const&)>::call(void (avmedia::qt::QtFrameGrabber::*)(QVideoFrame const&), avmedia::qt::QtFrameGrabber*, void**)::{lambda()LibreOffice#1}&&) (args=0x7fbf24003bd8, fn=...)
        at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:65
    LibreOffice#20 0x00007fbf2c1c3323 in QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, QtPrivate::List<QVideoFrame const&>, void, void (avmedia::qt::QtFrameGrabber::*)(QVideoFrame const&)>::call
        (f=(void (avmedia::qt::QtFrameGrabber::*)(class avmedia::qt::QtFrameGrabber * const, const class QVideoFrame &)) 0x7fbf2c1bda40 <avmedia::qt::QtFrameGrabber::onVideoFrameChanged(QVideoFrame const&)>, o=0x7fbf24003b00, arg=0x7fbf24003bd8) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:126
    LibreOffice#21 0x00007fbf2c1c329d in QtPrivate::FunctionPointer<void (avmedia::qt::QtFrameGrabber::*)(QVideoFrame const&)>::call<QtPrivate::List<QVideoFrame const&>, void>
        (f=(void (avmedia::qt::QtFrameGrabber::*)(class avmedia::qt::QtFrameGrabber * const, const class QVideoFrame &)) 0x7fbf2c1bda40 <avmedia::qt::QtFrameGrabber::onVideoFrameChanged(QVideoFrame const&)>, o=0x7fbf24003b00, arg=0x7fbf24003bd8) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:174
    LibreOffice#22 0x00007fbf2c1c31c6 in QtPrivate::QCallableObject<void (avmedia::qt::QtFrameGrabber::*)(QVideoFrame const&), QtPrivate::List<QVideoFrame const&>, void>::impl
        (which=1, this_=0x557d9d23f1c0, r=0x7fbf24003b00, a=0x7fbf24003bd8, ret=0x0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:545
    LibreOffice#23 0x00007fbf51907b62 in QtPrivate::QSlotObjectBase::call (this=0x557d9d23f1c0, r=0x7fbf24003b00, a=0x7fbf24003bd8) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:461
    LibreOffice#24 0x00007fbf51b1a02c in QMetaCallEvent::placeMetaCall (this=0x7fbf24003b90, object=0x7fbf24003b00) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:544
    LibreOffice#25 0x00007fbf51b1c1c1 in QObject::event (this=0x7fbf24003b00, e=0x7fbf24003b90) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:1465
    LibreOffice#26 0x00007fbf4f9e6130 in QApplicationPrivate::notify_helper (this=0x557d975ccb40, receiver=0x7fbf24003b00, e=0x7fbf24003b90) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qapplication.cpp:3307
    LibreOffice#27 0x00007fbf4f9ea038 in QApplication::notify (this=0x557d975bdec0, receiver=0x7fbf24003b00, e=0x7fbf24003b90) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qapplication.cpp:3257
    LibreOffice#28 0x00007fbf51a52ac9 in QCoreApplication::notifyInternal2 (receiver=0x7fbf24003b00, event=0x7fbf24003b90) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1109
    LibreOffice#29 0x00007fbf51a53739 in QCoreApplication::sendEvent (receiver=0x7fbf24003b00, event=0x7fbf24003b90) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1549
    LibreOffice#30 0x00007fbf51a5466a in QCoreApplicationPrivate::sendPostedEvents (receiver=0x0, event_type=0, data=0x557d975f3770) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1904
    LibreOffice#31 0x00007fbf51a5357c in QCoreApplication::sendPostedEvents (receiver=0x0, event_type=0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1757
    LibreOffice#32 0x00007fbf5205bba1 in postEventSourceDispatch (s=0x557d9761ac80) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:246
    LibreOffice#33 0x00007fbf561043c5 in ??? () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
    LibreOffice#34 0x00007fbf561065f7 in ??? () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
    LibreOffice#35 0x00007fbf56106d60 in g_main_context_iteration () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
    LibreOffice#36 0x00007fbf5205addb in QEventDispatcherGlib::processEvents (this=0x557d975bf280, flags=...) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:399
    LibreOffice#37 0x00007fbf5119f838 in QPAEventDispatcherGlib::processEvents (this=0x557d975bf280, flags=...) at /home/michi/development/git/qt5/qtbase/src/gui/platform/unix/qeventdispatcher_glib.cpp:89
    LibreOffice#38 0x00007fbf52a19b84 in QtInstance::ImplYield (this=0x557d976494e0, bWait=false, bHandleAllCurrentEvents=true) at vcl/qt6/../qt5/QtInstance.cxx:503
    LibreOffice#39 0x00007fbf52a1ce71 in QtInstance::DoYield (this=0x557d976494e0, bWait=false, bHandleAllCurrentEvents=true) at vcl/qt6/../qt5/QtInstance.cxx:512
    LibreOffice#40 0x00007fbf5b45f3a6 in ImplYield (i_bWait=false, i_bAllEvents=true) at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:385
    LibreOffice#41 0x00007fbf5b45f667 in Scheduler::ProcessEventsToIdle () at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:435
    LibreOffice#42 0x00007fbf2c1be3cd in avmedia::qt::QtFrameGrabber::grabFrame (this=0x7fbf24003b00, fMediaTime=0) at /home/michi/development/git/libreoffice/avmedia/source/qt6/QtFrameGrabber.cxx:100
    LibreOffice#43 0x00007fbf2c1be4ce in non-virtual thunk to avmedia::qt::QtFrameGrabber::grabFrame(double) () at /home/michi/development/git/libreoffice/instdir/program/../program/libavmediaqt6.so
    LibreOffice#44 0x00007fbf5d3e5b13 in avmedia::MediaWindow::grabFrame (xPlayer=uno::Reference to (avmedia::qt::QtPlayer *) 0x557d9c991168, rGraphic=empty uno::Reference)
        at /home/michi/development/git/libreoffice/avmedia/source/viewer/mediawindow.cxx:384
    LibreOffice#45 0x00007fbf5e430b5f in SdrMediaObj::getSnapshot() const::$_0::operator()(com::sun::star::uno::Reference<com::sun::star::media::XPlayer> const&) const
        (this=0x557d9c98fea0, rPlayer=uno::Reference to (avmedia::qt::QtPlayer *) 0x557d9c991168) at /home/michi/development/git/libreoffice/svx/source/svdraw/svdomedia.cxx:195
    LibreOffice#46 0x00007fbf5e430add in std::__invoke_impl<void, SdrMediaObj::getSnapshot() const::$_0&, com::sun::star::uno::Reference<com::sun::star::media::XPlayer> const&>(std::__invoke_other, SdrMediaObj::getSnapshot() const::$_0&, com::sun::star::uno::Reference<com::sun::star::media::XPlayer> const&) (__f=..., __args=uno::Reference to (avmedia::qt::QtPlayer *) 0x557d9c991168) at /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/invoke.h:61
    LibreOffice#47 0x00007fbf5e430a8d in std::__invoke_r<void, SdrMediaObj::getSnapshot() const::$_0&, com::sun::star::uno::Reference<com::sun::star::media::XPlayer> const&>(SdrMediaObj::getSnapshot() const::$_0&, com::sun::star::uno::Reference<com::sun::star::media::XPlayer> const&) (__fn=..., __args=uno::Reference to (avmedia::qt::QtPlayer *) 0x557d9c991168) at /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/invoke.h:111
    LibreOffice#48 0x00007fbf5e430905 in std::_Function_handler<void(com::sun::star::uno::Reference<com::sun::star::media::XPlayer> const&), SdrMediaObj::getSnapshot() const::$_0>::_M_invoke
        (__functor=..., __args=uno::Reference to (avmedia::qt::QtPlayer *) 0x557d9c991168) at /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/std_function.h:290
    LibreOffice#49 0x00007fbf5d3ec066 in std::function<void(com::sun::star::uno::Reference<com::sun::star::media::XPlayer> const&)>::operator() (this=0x557d9c975aa8, __args=uno::Reference to (avmedia::qt::QtPlayer *) 0x557d9c991168)
        at /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/std_function.h:591
    LibreOffice#50 0x00007fbf5d3e8261 in avmedia::PlayerListener::callPlayerWindowSizeAvailable (this=0x557d9c975a60, rPlayer=uno::Reference to (avmedia::qt::QtPlayer *) 0x557d9c991168) at include/avmedia/mediawindow.hxx:74
    LibreOffice#51 0x00007fbf5d3e5eab in avmedia::MediaWindow::grabFrame (rURL="file:///tmp/7qg9UE.ogg", rReferer="", sMimeType="audio/ogg", xPreferredPixelSizeListener=rtl::Reference to 0x557d9c975a60)
        at /home/michi/development/git/libreoffice/avmedia/source/viewer/mediawindow.cxx:434
    LibreOffice#52 0x00007fbf5e42e93c in SdrMediaObj::getSnapshot (this=0x557d9921fd10) at /home/michi/development/git/libreoffice/svx/source/svdraw/svdomedia.cxx:199
    LibreOffice#53 0x00007fbf5e17a1a9 in sdr::contact::ViewContactOfSdrMediaObj::createViewIndependentPrimitive2DSequence (this=0x557d997790d0, rVisitor=...)
        at /home/michi/development/git/libreoffice/svx/source/sdr/contact/viewcontactofsdrmediaobj.cxx:122
    LibreOffice#54 0x00007fbf5e19363b in sdr::contact::ViewContact::getViewIndependentPrimitive2DContainer (this=0x557d997790d0, rVisitor=...) at /home/michi/development/git/libreoffice/svx/source/sdr/contact/viewcontact.cxx:261
    LibreOffice#55 0x00007fbf5e3c8a34 in SdrObject::RecalcBoundRect (this=0x557d9921fd10) at /home/michi/development/git/libreoffice/svx/source/svdraw/svdobj.cxx:988
    LibreOffice#56 0x00007fbf5e3c8959 in SdrObject::GetCurrentBoundRect (this=0x557d9921fd10) at /home/michi/development/git/libreoffice/svx/source/svdraw/svdobj.cxx:958
    LibreOffice#57 0x00007fbf5e4b91d0 in SdrObjList::RecalcRects (this=0x557d9925ec30) at /home/michi/development/git/libreoffice/svx/source/svdraw/svdpage.cxx:242
    LibreOffice#58 0x00007fbf5e4bcf99 in SdrObjList::GetAllObjBoundRect (this=0x557d9925ec30) at /home/michi/development/git/libreoffice/svx/source/svdraw/svdpage.cxx:740
    LibreOffice#59 0x00007fbf5e4e1142 in SdrPageView::InvalidateAllWin (this=0x557d9c973a00) at /home/michi/development/git/libreoffice/svx/source/svdraw/svdpagv.cxx:202
    LibreOffice#60 0x00007fbf5e4e3301 in SdrPageView::SetHelpLines (this=0x557d9c973a00, rHLL=...) at /home/michi/development/git/libreoffice/svx/source/svdraw/svdpagv.cxx:687
    LibreOffice#61 0x00007fbf2fe0a543 in sd::DrawViewShell::SwitchPage (this=0x557d990dc4b0, nSelectedPage=0, bAllowChangeFocus=true, bUpdateScrollbars=true) at /home/michi/development/git/libreoffice/sd/source/ui/view/drviews1.cxx:1050
    LibreOffice#62 0x00007fbf2fe0869d in sd::DrawViewShell::ChangeEditMode (this=0x557d990dc4b0, eEMode=EditMode::Page, bIsLayerModeActive=false) at /home/michi/development/git/libreoffice/sd/source/ui/view/drviews1.cxx:409
    LibreOffice#63 0x00007fbf2fe566cc in sd::DrawViewShell::ReadFrameViewData (this=0x557d990dc4b0, pView=0x557d9c970370) at /home/michi/development/git/libreoffice/sd/source/ui/view/drviews5.cxx:291
    LibreOffice#64 0x00007fbf2fe6f3e1 in sd::DrawViewShell::Construct (this=0x557d990dc4b0, pDocSh=0x557d98f74bd0, eInitialPageKind=PageKind::Standard) at /home/michi/development/git/libreoffice/sd/source/ui/view/drviewsa.cxx:304
    LibreOffice#65 0x00007fbf2fe6ea0d in sd::DrawViewShell::DrawViewShell (this=0x557d990dc4b0, rViewShellBase=..., pParentWindow=0x557d99842f80, ePageKind=PageKind::Standard, pFrameViewArgument=0x0)
        at /home/michi/development/git/libreoffice/sd/source/ui/view/drviewsa.cxx:126
    LibreOffice#66 0x00007fbf2f9caedd in std::_Construct<sd::DrawViewShell, sd::ViewShellBase&, vcl::Window*, PageKind, sd::FrameView*&>
        (__p=0x557d990dc4b0, __args=..., __args=@0x7fffdcfcfcd0: 0x557d99842f80, __args=@0x7fffdcfcfccc: PageKind::Standard, __args=@0x7fffdcfcfcf0: 0x0)
        at /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/stl_construct.h:119
    LibreOffice#67 0x00007fbf2f9caafe in std::allocator_traits<std::allocator<void> >::construct<sd::DrawViewShell, sd::ViewShellBase&, vcl::Window*, PageKind, sd::FrameView*&>
        (__p=0x557d990dc4b0, __args=..., __args=@0x7fffdcfcfcd0: 0x557d99842f80, __args=@0x7fffdcfcfccc: PageKind::Standard, __args=@0x7fffdcfcfcf0: 0x0)
        at /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/alloc_traits.h:706
    LibreOffice#68 std::_Sp_counted_ptr_inplace<sd::DrawViewShell, std::allocator<void>, (__gnu_cxx::_Lock_policy)2>::_Sp_counted_ptr_inplace<sd::ViewShellBase&, vcl::Window*, PageKind, sd::FrameView*&>
        (this=0x557d990dc4a0, __a=..., __args=..., __args=@0x7fffdcfcfcd0: 0x557d99842f80, __args=@0x7fffdcfcfccc: PageKind::Standard, __args=@0x7fffdcfcfcf0: 0x0)
        at /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/shared_ptr_base.h:607
    #69 0x00007fbf2f9ca8f7 in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count<sd::DrawViewShell, std::allocator<void>, sd::ViewShellBase&, vcl::Window*, PageKind, sd::FrameView*&>
        (this=0x7fffdcfcfce0, __p=@0x7fffdcfcfcd8: 0x0, __a=..., __args=..., __args=@0x7fffdcfcfcd0: 0x557d99842f80, __args=@0x7fffdcfcfccc: PageKind::Standard, __args=@0x7fffdcfcfcf0: 0x0)
        at /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/shared_ptr_base.h:970
    #70 0x00007fbf2f9ca81a in std::__shared_ptr<sd::DrawViewShell, (__gnu_cxx::_Lock_policy)2>::__shared_ptr<std::allocator<void>, sd::ViewShellBase&, vcl::Window*, PageKind, sd::FrameView*&>
        (this=0x7fffdcfcfcd8, __tag=..., __args=..., __args=@0x7fffdcfcfcd0: 0x557d99842f80, __args=@0x7fffdcfcfccc: PageKind::Standard, __args=@0x7fffdcfcfcf0: 0x0)
        at /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/shared_ptr_base.h:1713
    #71 0x00007fbf2f9ca792 in std::shared_ptr<sd::DrawViewShell>::shared_ptr<std::allocator<void>, sd::ViewShellBase&, vcl::Window*, PageKind, sd::FrameView*&>
        (this=0x7fffdcfcfcd8, __tag=..., __args=..., __args=@0x7fffdcfcfcd0: 0x557d99842f80, __args=@0x7fffdcfcfccc: PageKind::Standard, __args=@0x7fffdcfcfcf0: 0x0)
        at /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/shared_ptr.h:463
    #72 0x00007fbf2f9c4911 in std::make_shared<sd::DrawViewShell, sd::ViewShellBase&, vcl::Window*, PageKind, sd::FrameView*&>
        (__args=..., __args=@0x7fffdcfcfcd0: 0x557d99842f80, __args=@0x7fffdcfcfccc: PageKind::Standard, __args=@0x7fffdcfcfcf0: 0x0) at /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/shared_ptr.h:1007
    #73 0x00007fbf2f9c11f3 in sd::framework::BasicViewFactory::CreateViewShell (this=0x557d9963e1a0, rxViewId=rtl::Reference to 0x557d998d8910, rWindow=..., pFrameView=0x0)
        at /home/michi/development/git/libreoffice/sd/source/ui/framework/factories/BasicViewFactory.cxx:284
    #74 0x00007fbf2f9c0553 in sd::framework::BasicViewFactory::CreateView (this=0x557d9963e1a0, rxViewId=rtl::Reference to 0x557d998d8910, rWindow=..., rxPane=rtl::Reference to 0x557d9c953020, pFrameView=0x0, bIsCenterPane=true)
        at /home/michi/development/git/libreoffice/sd/source/ui/framework/factories/BasicViewFactory.cxx:241
    #75 0x00007fbf2f9bffcb in sd::framework::BasicViewFactory::createResource (this=0x557d9963e1a0, rxViewId=rtl::Reference to 0x557d998d8910)
        at /home/michi/development/git/libreoffice/sd/source/ui/framework/factories/BasicViewFactory.cxx:167
    #76 0x00007fbf2f994c48 in sd::framework::ConfigurationControllerResourceManager::ActivateResource (this=0x557d9963f120, rxResourceId=rtl::Reference to 0x557d998d8910, rxConfiguration=rtl::Reference to 0x557d999b0dc0)
        at /home/michi/development/git/libreoffice/sd/source/ui/framework/configuration/ConfigurationControllerResourceManager.cxx:130
    #77 0x00007fbf2f9945f8 in sd::framework::ConfigurationControllerResourceManager::ActivateResources (this=0x557d9963f120, rResources=std::__debug::vector of length 5, capacity 5 = {...}, rxConfiguration=rtl::Reference to 0x557d999b0dc0)
        at /home/michi/development/git/libreoffice/sd/source/ui/framework/configuration/ConfigurationControllerResourceManager.cxx:75
    #78 0x00007fbf2f99d07a in sd::framework::ConfigurationUpdater::UpdateCore (this=0x557d999afee0, rClassifier=...) at /home/michi/development/git/libreoffice/sd/source/ui/framework/configuration/ConfigurationUpdater.cxx:251
    #79 0x00007fbf2f99c61c in sd::framework::ConfigurationUpdater::UpdateConfiguration (this=0x557d999afee0) at /home/michi/development/git/libreoffice/sd/source/ui/framework/configuration/ConfigurationUpdater.cxx:161
    #80 0x00007fbf2f99c09b in sd::framework::ConfigurationUpdater::RequestUpdate (this=0x557d999afee0, rxRequestedConfiguration=rtl::Reference to 0x557d998c8ed0)
        at /home/michi/development/git/libreoffice/sd/source/ui/framework/configuration/ConfigurationUpdater.cxx:108
    #81 0x00007fbf2f96fe69 in sd::framework::ChangeRequestQueueProcessor::ProcessOneEvent (this=0x557d999b0e60) at /home/michi/development/git/libreoffice/sd/source/ui/framework/configuration/ChangeRequestQueueProcessor.cxx:158
    #82 0x00007fbf2f982909 in sd::framework::ConfigurationController::ProcessEvent (this=0x557d999b0bf0) at /home/michi/development/git/libreoffice/sd/source/ui/framework/configuration/ConfigurationController.cxx:157
    #83 0x00007fbf2fdbc797 in sd::ViewShellBase::LateInit (this=0x557d99242e30, rsDefaultView="") at /home/michi/development/git/libreoffice/sd/source/ui/view/ViewShellBase.cxx:345
    #84 0x00007fbf2fd78a33 in sd::ImpressViewShellBase::CreateInstance (rFrame=..., pOldView=0x0) at /home/michi/development/git/libreoffice/sd/source/ui/view/ImpressViewShellBase.cxx:45
    #85 0x00007fbf60a31855 in SfxViewFactory::CreateInstance (this=0x557d991cd6a0, rFrame=..., pOldSh=0x0) at /home/michi/development/git/libreoffice/sfx2/source/view/viewfac.cxx:26
    #86 0x00007fbf60840fbf in SfxBaseModel::createViewController (this=0x557d9913bc50, i_rViewName="Default", i_rArguments=empty uno::Sequence, i_rFrame=uno::Reference to ((anonymous namespace)::XFrameImpl *) 0x557d98f32e40)
        at /home/michi/development/git/libreoffice/sfx2/source/doc/sfxbasemodel.cxx:4355
    #87 0x00007fbf60841a9f in non-virtual thunk to SfxBaseModel::createViewController(rtl::OUString const&, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&, com::sun::star::uno::Reference<com::sun::star::frame::XFrame> const&) () at /home/michi/development/git/libreoffice/instdir/program/libsfxlo.so
    #88 0x00007fbf609dc0f4 in (anonymous namespace)::SfxFrameLoader_Impl::impl_createDocumentView
        (i_rModel=uno::Reference to (SdXImpressDocument *) 0x557d9913bce0, i_rFrame=uno::Reference to ((anonymous namespace)::XFrameImpl *) 0x557d98f32e40, i_rViewFactoryArgs=..., i_rViewName="Default")
        at /home/michi/development/git/libreoffice/sfx2/source/view/frmload.cxx:586
    #89 0x00007fbf609d96ac in (anonymous namespace)::SfxFrameLoader_Impl::load (this=0x557d99388d30, rArgs=uno::Sequence of length 12 = {...}, _rTargetFrame=uno::Reference to ((anonymous namespace)::XFrameImpl *) 0x557d98f32e40)
        at /home/michi/development/git/libreoffice/sfx2/source/view/frmload.cxx:813
    #90 0x00007fbf615c72c4 in framework::LoadEnv::impl_loadContent (this=0x557d98866fa8) at /home/michi/development/git/libreoffice/framework/source/loadenv/loadenv.cxx:1180
    #91 0x00007fbf615c4425 in framework::LoadEnv::start (this=0x557d98866fa8) at /home/michi/development/git/libreoffice/framework/source/loadenv/loadenv.cxx:415
    #92 0x00007fbf615c20d2 in framework::LoadEnv::startLoading
        (this=0x557d98866fa8, sURL="file:///home/michi/git/computer-doc/misc/impress_presentations_with_audio_and_video/slide_with_video.odp", lMediaDescriptor=uno::Sequence of length 4 = {...}, xBaseFrame=uno::Reference to (framework::Desktop *) 0x557d978a34b8, sTarget="_default", nSearchFlags=0, eFeature=(LoadEnvFeatures::WorkWithUI | LoadEnvFeatures::AllowContentHandler)) at /home/michi/development/git/libreoffice/framework/source/loadenv/loadenv.cxx:311
    #93 0x00007fbf6145aaa1 in framework::LoadDispatcher::impl_dispatch (this=0x557d98866f50, rURL=..., lArguments=uno::Sequence of length 4 = {...}, xListener=empty uno::Reference)
        at /home/michi/development/git/libreoffice/framework/source/dispatch/loaddispatcher.cxx:107
    #94 0x00007fbf6145b801 in framework::LoadDispatcher::dispatchWithReturnValue (this=0x557d98866f50, rURL=..., lArguments=uno::Sequence of length 4 = {...})
        at /home/michi/development/git/libreoffice/framework/source/dispatch/loaddispatcher.cxx:60
    #95 0x00007fbf6145b8a4 in non-virtual thunk to framework::LoadDispatcher::dispatchWithReturnValue(com::sun::star::util::URL const&, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&) ()
        at /home/michi/development/git/libreoffice/framework/source/dispatch/loaddispatcher.cxx:60
    #96 0x00007fbf629f10c0 in comphelper::SynchronousDispatch::dispatch
        (xStartPoint=uno::Reference to (framework::Desktop *) 0x557d978a34a8, sURL="file:///home/michi/git/computer-doc/misc/impress_presentations_with_audio_and_video/slide_with_video.odp", sTarget="_default", lArguments=uno::Sequence of length 4 = {...}) at /home/michi/development/git/libreoffice/comphelper/source/misc/synchronousdispatch.cxx:62
    #97 0x00007fbf64377054 in desktop::DispatchWatcher::executeDispatchRequests (this=0x557d99219bb0, aDispatchRequestsList=std::__debug::vector of length 1, capacity 1 = {...}, bNoTerminate=false, pFlags=0x7fffdcfd6994)
        at /home/michi/development/git/libreoffice/desktop/source/app/dispatchwatcher.cxx:531
    #98 0x00007fbf64395488 in desktop::RequestHandler::ExecuteCmdLineRequests (aRequest=..., noTerminate=false) at /home/michi/development/git/libreoffice/desktop/source/app/officeipcthread.cxx:1317
    #99 0x00007fbf6432ee7f in desktop::Desktop::OpenClients () at /home/michi/development/git/libreoffice/desktop/source/app/app.cxx:2218
    #100 0x00007fbf6432cdf3 in desktop::Desktop::OpenClients_Impl (this=0x7fffdcfda450) at /home/michi/development/git/libreoffice/desktop/source/app/app.cxx:1978
    #101 0x00007fbf6432b45d in desktop::Desktop::LinkStubOpenClients_Impl (instance=0x7fffdcfda450, data=0x0) at /home/michi/development/git/libreoffice/desktop/source/app/app.cxx:1962
    #102 0x00007fbf5ac98231 in Link<void*, void>::Call (this=0x557d98fba098, data=0x0) at include/tools/link.hxx:105
    #103 0x00007fbf5ac93af1 in ImplHandleUserEvent (pSVEvent=0x557d98fba090) at /home/michi/development/git/libreoffice/vcl/source/window/winproc.cxx:2312
    #104 0x00007fbf5ac90a1f in ImplWindowFrameProc (_pWindow=0x557d988b22c0, nEvent=SalEvent::UserEvent, pEvent=0x557d98fba090) at /home/michi/development/git/libreoffice/vcl/source/window/winproc.cxx:2876
    #105 0x00007fbf529fb3ec in SalFrame::CallCallback (this=0x557d988b3f20, nEvent=SalEvent::UserEvent, pEvent=0x557d98fba090) at vcl/inc/salframe.hxx:310
    #106 0x00007fbf52a1d2af in QtInstance::ProcessEvent (this=0x557d976494e0, aEvent=...) at vcl/qt6/../qt5/QtInstance.cxx:594
    #107 0x00007fbf5b393fbd in SalUserEventList::DispatchUserEvents(bool)::$_0::operator()() const (this=0x7fffdcfd88a0) at /home/michi/development/git/libreoffice/vcl/source/app/salusereventlist.cxx:119
    #108 0x00007fbf5b393e8b in SalUserEventList::DispatchUserEvents (this=0x557d97649518, bHandleAllCurrentEvents=false) at /home/michi/development/git/libreoffice/vcl/source/app/salusereventlist.cxx:120
    #109 0x00007fbf52a19a91 in QtInstance::ImplYield (this=0x557d976494e0, bWait=true, bHandleAllCurrentEvents=false) at vcl/qt6/../qt5/QtInstance.cxx:490
    #110 0x00007fbf52a1ce71 in QtInstance::DoYield (this=0x557d976494e0, bWait=true, bHandleAllCurrentEvents=false) at vcl/qt6/../qt5/QtInstance.cxx:512
    #111 0x00007fbf5b45f3a6 in ImplYield (i_bWait=true, i_bAllEvents=false) at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:385
    #112 0x00007fbf5b45ecbf in Application::Yield () at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:488
    #113 0x00007fbf5b45eaa0 in Application::Execute () at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:360
    #114 0x00007fbf64329435 in desktop::Desktop::Main (this=0x7fffdcfda450) at /home/michi/development/git/libreoffice/desktop/source/app/app.cxx:1678
    #115 0x00007fbf5b48b2c6 in ImplSVMain () at /home/michi/development/git/libreoffice/vcl/source/app/svmain.cxx:230
    #116 0x00007fbf5b48cdb9 in SVMain () at /home/michi/development/git/libreoffice/vcl/source/app/svmain.cxx:248
    #117 0x00007fbf643a30ea in soffice_main () at /home/michi/development/git/libreoffice/desktop/source/app/sofficemain.cxx:122
    #118 0x0000557d789219fd in sal_main () at /home/michi/development/git/libreoffice/desktop/source/app/main.c:51
    #119 0x0000557d789219d7 in main (argc=2, argv=0x7fffdcfda658) at /home/michi/development/git/libreoffice/desktop/source/app/main.c:49

Change-Id: I1e2265e38d7c93171146df4f58666e9cf22bdaf6
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/189036
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
bise86 pushed a commit to bise86/LibreOffice that referenced this pull request Sep 29, 2026
After

    commit 94442bd94e504b067efd0b992525b53fc660f114
    Author: Michael Weghorn <m.weghorn@posteo.de>
    Date:   Tue Aug 5 11:07:25 2025 +0200

        tdf#163802 a11y: Fully initialize SpellDialog before showing

, triggering the spell check dialog in Impress
for an empty presentation would result in infinite
recursion e.g. with the gtk3 or gen VCL plugins
on Linux, because the initialization of the
svx::SpellDialogChildWindow triggers a message dialog
asking whether to start spell check from the beginning
(s. frame #252 in below backtrace).
For gtk3 and gen, that dialog triggers processing
of pending events, which triggers an update of the
child windows (s. frame #230), which triggers the logic to
create the spell check child window again (as it isn't
shown yet).

(For qt6, that problem wasn't seen, because synchronously
showing the message dialog doesn't trigger processing
of pending events.)

Fix the problem by detecting cases where a child
window is already in the process of being created,
and return early in that case.

Change SfxWorkWindow::CreateChildWin_Impl to return
a bool result indicating whether the child window
was created or not, and evaluate that in the callers.

Sample backtrace for the gtk3 VCL plugin:

    #0  0x00007fffe94490c0 in memcmp@plt () at /lib/x86_64-linux-gnu/libgio-2.0.so.0
    #1  0x00007fffe955c206 in ??? () at /lib/x86_64-linux-gnu/libgio-2.0.so.0
    #2  0x00007fffe955c97f in ??? () at /lib/x86_64-linux-gnu/libgio-2.0.so.0
    #3  0x00007fffe955a4a3 in ??? () at /lib/x86_64-linux-gnu/libgio-2.0.so.0
    #4  0x00007fffe94db449 in ??? () at /lib/x86_64-linux-gnu/libgio-2.0.so.0
    #5  0x00007fffe6b6e484 in ??? () at /lib/x86_64-linux-gnu/libgdk_pixbuf-2.0.so.0
    #6  0x00007fffe6b716e9 in ??? () at /lib/x86_64-linux-gnu/libgdk_pixbuf-2.0.so.0
    #7  0x00007fffe6b71b6d in gdk_pixbuf_loader_close () at /lib/x86_64-linux-gnu/libgdk_pixbuf-2.0.so.0
    #8  0x00007fffe5be2fe0 in ??? () at /lib/x86_64-linux-gnu/libgtk-3.so.0
    #9  0x00007fffe5be40b1 in gtk_image_set_from_file () at /lib/x86_64-linux-gnu/libgtk-3.so.0
    #10 0x00007fffe5be41fd in gtk_image_new_from_file () at /lib/x86_64-linux-gnu/libgtk-3.so.0
    #11 0x00007fffe6498cf9 in (anonymous namespace)::image_new_from_xgraphic (rIcon=uno::Reference to (unographic::Graphic *) 0x55555ef17750, bMirror=false) at /home/michi/development/git/libreoffice/vcl/unx/gtk3/gtkinst.cxx:4973
    #12 0x00007fffe6504ec8 in (anonymous namespace)::GtkInstanceToolbar::set_item_image (pItem=0x55555ef42d20, rIcon=uno::Reference to (unographic::Graphic *) 0x55555ef17750, bMirror=false)
        at /home/michi/development/git/libreoffice/vcl/unx/gtk3/gtkinst.cxx:11838
    #13 0x00007fffe64ffb31 in (anonymous namespace)::GtkInstanceToolbar::set_item_image (this=0x55555e956af0, rIdent="toggle", rIcon=uno::Reference to (unographic::Graphic *) 0x55555ef17750)
        at /home/michi/development/git/libreoffice/vcl/unx/gtk3/gtkinst.cxx:12214
    #14 0x00007ffff4137ba1 in sfx2::sidebar::TabBar::UpdateButtonIcons (this=0x5555597c0230) at /home/michi/development/git/libreoffice/sfx2/source/sidebar/TabBar.cxx:159
    #15 0x00007ffff4137634 in sfx2::sidebar::TabBar::SetDecks (this=0x5555597c0230, rDecks=std::__debug::vector of length 8, capacity 8 = {...}) at /home/michi/development/git/libreoffice/sfx2/source/sidebar/TabBar.cxx:148
    #16 0x00007ffff40b0f0b in sfx2::sidebar::SidebarController::UpdateConfigurations (this=0x555558960ae0) at /home/michi/development/git/libreoffice/sfx2/source/sidebar/SidebarController.cxx:604
    #17 0x00007ffff40b0a49 in sfx2::sidebar::SidebarController::notifyContextChangeEvent (this=0x555558960ae0, rEvent=...) at /home/michi/development/git/libreoffice/sfx2/source/sidebar/SidebarController.cxx:371
    #18 0x00007ffff4dcba91 in (anonymous namespace)::ContextChangeEventMultiplexer::BroadcastEventToSingleContainer (this=0x5555590d95c0, rEventObject=..., rxEventFocus=uno::Reference to (sd::DrawController *) 0x55555830b5e8)
        at /home/michi/development/git/libreoffice/framework/source/services/ContextChangeEventMultiplexer.cxx:252
    #19 0x00007ffff4dca942 in (anonymous namespace)::ContextChangeEventMultiplexer::broadcastContextChangeEvent (this=0x5555590d95c0, rEventObject=..., rxEventFocus=uno::Reference to (sd::DrawController *) 0x55555830b5e8)
        at /home/michi/development/git/libreoffice/framework/source/services/ContextChangeEventMultiplexer.cxx:235
    #20 0x00007ffff2948f8f in ContextChangeEventMultiplexer::NotifyContextChange (rxController=uno::Reference to (sd::DrawController *) 0x55555830b5e8, eContext=vcl::EnumContext::Context::DrawPage)
        at /home/michi/development/git/libreoffice/svx/source/sidebar/ContextChangeEventMultiplexer.cxx:51
    #21 0x00007ffff295e246 in svx::sidebar::SelectionChangeHandler::selectionChanged (this=0x55555edcd3f0) at /home/michi/development/git/libreoffice/svx/source/sidebar/SelectionChangeHandler.cxx:56
    #22 0x00007fff9dc6b3cf in sd::DrawController::FireSelectionChangeListener (this=0x55555830b5c0) at /home/michi/development/git/libreoffice/sd/source/ui/unoidl/DrawController.cxx:396
    #23 0x00007fff9dc6b2dc in sd::DrawController::SetSubController (this=0x55555830b5c0, rxSubController=empty uno::Reference) at /home/michi/development/git/libreoffice/sd/source/ui/unoidl/DrawController.cxx:99
    #24 0x00007fff9d99a936 in sd::framework::BasicViewFactory::releaseResource (this=0x55555894ad50, rxView=rtl::Reference to 0x55555ef81a80)
        at /home/michi/development/git/libreoffice/sd/source/ui/framework/factories/BasicViewFactory.cxx:219
    #25 0x00007fff9d97161c in sd::framework::ConfigurationControllerResourceManager::DeactivateResource (this=0x55555894c0f0, rxResourceId=rtl::Reference to 0x55555edb5110, rxConfiguration=rtl::Reference to 0x55555894eb00)
        at /home/michi/development/git/libreoffice/sd/source/ui/framework/configuration/ConfigurationControllerResourceManager.cxx:203
    #26 0x00007fff9d971fb4 in sd::framework::ConfigurationControllerResourceManager::DeactivateResources(std::__debug::vector<rtl::Reference<sd::framework::ResourceId>, std::allocator<rtl::Reference<sd::framework::ResourceId> > > const&, rtl::Reference<sd::framework::Configuration> const&)::$_0::operator()(rtl::Reference<sd::framework::ResourceId> const&) const (this=0x7ffffffe7950, xResource=rtl::Reference to 0x55555edb5110)
        at /home/michi/development/git/libreoffice/sd/source/ui/framework/configuration/ConfigurationControllerResourceManager.cxx:90
    #27 0x00007fff9d9712cb in std::for_each<std::reverse_iterator<__gnu_debug::_Safe_iterator<__gnu_cxx::__normal_iterator<rtl::Reference<sd::framework::ResourceId> const*, std::__cxx1998::vector<rtl::Reference<sd::framework::ResourceId>, std::allocator<rtl::Reference<sd::framework::ResourceId> > > >, std::__debug::vector<rtl::Reference<sd::framework::ResourceId>, std::allocator<rtl::Reference<sd::framework::ResourceId> > >, std::random_access_iterator_tag> >, sd::framework::ConfigurationControllerResourceManager::DeactivateResources(std::__debug::vector<rtl::Reference<sd::framework::ResourceId>, std::allocator<rtl::Reference<sd::framework::ResourceId> > > const&, rtl::Reference<sd::framework::Configuration> const&)::$_0>(std::reverse_iterator<__gnu_debug::_Safe_iterator<__gnu_cxx::__normal_iterator<rtl::Reference<sd::framework::ResourceId> const*, std::__cxx1998::vector<rtl::Reference<sd::framework::ResourceId>, std::allocator<rtl::Reference<sd::framework::ResourceId> > > >, std::__debug::vector<rtl::Reference<sd::framework::ResourceId>, std::allocator<rtl::Reference<sd::framework::ResourceId> > >, std::random_access_iterator_tag> >, std::reverse_iterator<__gnu_debug::_Safe_iterator<__gnu_cxx::__normal_iterator<rtl::Reference<sd::framework::ResourceId> const*, std::__cxx1998::vector<rtl::Reference<sd::framework::ResourceId>, std::allocator<rtl::Reference<sd::framework::ResourceId> > > >, std::__debug::vector<rtl::Reference<sd::framework::ResourceId>, std::allocator<rtl::Reference<sd::framework::ResourceId> > >, std::random_access_iterator_tag> >, sd::framework::ConfigurationControllerResourceManager::DeactivateResources(std::__debug::vector<rtl::Reference<sd::framework::ResourceId>, std::allocator<rtl::Reference<sd::framework::ResourceId> > > const&, rtl::Reference<sd::framework::Configuration> const&)::$_0) (__first=..., __last=..., __f=...)
        at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/stl_algo.h:3798
    #28 0x00007fff9d971074 in sd::framework::ConfigurationControllerResourceManager::DeactivateResources
        (this=0x55555894c0f0, rResources=std::__debug::vector of length 1, capacity 1 = {...}, rxConfiguration=rtl::Reference to 0x55555894eb00)
        at /home/michi/development/git/libreoffice/sd/source/ui/framework/configuration/ConfigurationControllerResourceManager.cxx:86
    #29 0x00007fff9d978cae in sd::framework::ConfigurationUpdater::UpdateCore (this=0x55555894dd00, rClassifier=...) at /home/michi/development/git/libreoffice/sd/source/ui/framework/configuration/ConfigurationUpdater.cxx:250
    #30 0x00007fff9d97829c in sd::framework::ConfigurationUpdater::UpdateConfiguration (this=0x55555894dd00) at /home/michi/development/git/libreoffice/sd/source/ui/framework/configuration/ConfigurationUpdater.cxx:161
    #31 0x00007fff9d977d1b in sd::framework::ConfigurationUpdater::RequestUpdate (this=0x55555894dd00, rxRequestedConfiguration=rtl::Reference to 0x55555894cf50)
        at /home/michi/development/git/libreoffice/sd/source/ui/framework/configuration/ConfigurationUpdater.cxx:108
    #32 0x00007fff9d94c5b2 in sd::framework::ChangeRequestQueueProcessor::ProcessOneEvent (this=0x55555894eba0) at /home/michi/development/git/libreoffice/sd/source/ui/framework/configuration/ChangeRequestQueueProcessor.cxx:163
    #33 0x00007fff9d94c6fe in sd::framework::ChangeRequestQueueProcessor::ProcessUntilEmpty (this=0x55555894eba0) at /home/michi/development/git/libreoffice/sd/source/ui/framework/configuration/ChangeRequestQueueProcessor.cxx:175
    #34 0x00007fff9d95e8ef in sd::framework::ConfigurationController::RequestSynchronousUpdate (this=0x55555894a210) at /home/michi/development/git/libreoffice/sd/source/ui/framework/configuration/ConfigurationController.cxx:167
    #35 0x00007fff9d9c69d8 in sd::framework::FrameworkHelper::RequestSynchronousUpdate (this=0x555558959cb0) at /home/michi/development/git/libreoffice/sd/source/ui/framework/tools/FrameworkHelper.cxx:643
    #36 0x00007fff9dd53f6c in SdOutliner::SetViewMode (this=0x55555ee0e070, ePageKind=PageKind::Standard) at /home/michi/development/git/libreoffice/sd/source/ui/view/Outliner.cxx:1652
    #37 0x00007fff9dd55071 in SdOutliner::SetObject (this=0x55555ee0e070, rPosition=...) at /home/michi/development/git/libreoffice/sd/source/ui/view/Outliner.cxx:1851
    #38 0x00007fff9dd4e830 in SdOutliner::EndOfSearch (this=0x55555ee0e070) at /home/michi/development/git/libreoffice/sd/source/ui/view/Outliner.cxx:1418
    #39 0x00007fff9dd4f9e2 in SdOutliner::ProvideNextTextObject (this=0x55555ee0e070) at /home/michi/development/git/libreoffice/sd/source/ui/view/Outliner.cxx:1399
    #40 0x00007fff9dd4e68b in SdOutliner::SpellNextDocument (this=0x55555ee0e070) at /home/michi/development/git/libreoffice/sd/source/ui/view/Outliner.cxx:393
    #41 0x00007fff9dd4fbc0 in SdOutliner::GetNextSpellSentence (this=0x55555ee0e070) at /home/michi/development/git/libreoffice/sd/source/ui/view/Outliner.cxx:436
    #42 0x00007fff9d8f4ee0 in sd::SpellDialogChildWindow::GetNextWrongSentence (this=0x55555e56afa0) at /home/michi/development/git/libreoffice/sd/source/ui/dlg/SpellDialogChildWindow.cxx:72
    #43 0x00007fff9480ddaa in svx::SpellDialog::GetNextSentence_Impl (this=0x55555eca57c0, pGuard=0x0, bUseSavedSentence=false, bRecheck=false) at /home/michi/development/git/libreoffice/cui/source/dialogs/SpellDialog.cxx:1050
    #44 0x00007fff9480caa4 in svx::SpellDialog::SpellContinue_Impl (this=0x55555eca57c0, pGuard=0x0, bUseSavedSentence=false, bIgnoreCurrentError=false) at /home/michi/development/git/libreoffice/cui/source/dialogs/SpellDialog.cxx:402
    #45 0x00007fff9480f0dd in svx::SpellDialog::Initialize (this=0x55555eca57c0) at /home/michi/development/git/libreoffice/cui/source/dialogs/SpellDialog.cxx:432
    #46 0x00007fff9485d131 in (anonymous namespace)::AbstractSpellDialog_Impl::Initialize (this=0x55555edb1bc0) at /home/michi/development/git/libreoffice/cui/source/factory/dlgfact.cxx:452
    #47 0x00007ffff27ef522 in svx::SpellDialogChildWindow::Initialize (this=0x55555e56afa0) at /home/michi/development/git/libreoffice/svx/source/dialog/SpellDialogChildWindow.cxx:49
    #48 0x00007ffff3aa0d49 in SfxChildWindow::CreateChildWindow (nId=10243, pParent=0x5555589410f0, pBindings=0x555556a7ef20, rInfo=...) at /home/michi/development/git/libreoffice/sfx2/source/appl/childwin.cxx:244
    #49 0x00007ffff3b3be5d in SfxWorkWindow::CreateChildWin_Impl (this=0x7fff980287c0, pCW=0x5555598d22b0, bSetFocus=false) at /home/michi/development/git/libreoffice/sfx2/source/appl/workwin.cxx:1350
    #50 0x00007ffff3b3bbc6 in SfxWorkWindow::UpdateChildWindows_Impl (this=0x7fff980287c0) at /home/michi/development/git/libreoffice/sfx2/source/appl/workwin.cxx:1299
    #51 0x00007ffff3b3b205 in SfxWorkWindow::UpdateObjectBars_Impl2 (this=0x7fff980287c0) at /home/michi/development/git/libreoffice/sfx2/source/appl/workwin.cxx:1247
    #52 0x00007ffff3b3a831 in SfxWorkWindow::UpdateObjectBars_Impl (this=0x7fff980287c0) at /home/michi/development/git/libreoffice/sfx2/source/appl/workwin.cxx:1095
    #53 0x00007ffff3ba83b3 in SfxDispatcher::Update_Impl (this=0x555556877340, bForce=true) at /home/michi/development/git/libreoffice/sfx2/source/control/dispatch.cxx:1124
    #54 0x00007ffff3bfebbe in DispatcherUpdate_Impl (pArg=0x555556877340) at /home/michi/development/git/libreoffice/sfx2/source/control/shell.cxx:681
    #55 0x00007ffff0889f71 in Link<void*, void>::Call (this=0x55555e3c7c40, data=0x555556877340) at include/tools/link.hxx:105
    #56 0x00007ffff08df2c8 in svtools::AsynchronLink::HandleCall_PostUserEvent (this=0x55555e3c7c40) at /home/michi/development/git/libreoffice/svtools/source/control/asynclink.cxx:66
    #57 0x00007ffff08df21d in svtools::AsynchronLink::LinkStubHandleCall_PostUserEvent (instance=0x55555e3c7c40, data=0x0) at /home/michi/development/git/libreoffice/svtools/source/control/asynclink.cxx:58
    #58 0x00007fffee4622d1 in Link<void*, void>::Call (this=0x55555e86e7e8, data=0x0) at include/tools/link.hxx:105
    #59 0x00007fffee45dbf1 in ImplHandleUserEvent (pSVEvent=0x55555e86e7e0) at /home/michi/development/git/libreoffice/vcl/source/window/winproc.cxx:2312
    #60 0x00007fffee45ab1f in ImplWindowFrameProc (_pWindow=0x555556a70090, nEvent=SalEvent::UserEvent, pEvent=0x55555e86e7e0) at /home/michi/development/git/libreoffice/vcl/source/window/winproc.cxx:2869
    #61 0x00007fffef031fec in SalFrame::CallCallback (this=0x5555569484e0, nEvent=SalEvent::UserEvent, pEvent=0x55555e86e7e0) at vcl/inc/salframe.hxx:310
    #62 0x00007fffef0584df in SalGenericDisplay::ProcessEvent (this=0x5555569f26e0, aEvent=...) at /home/michi/development/git/libreoffice/vcl/unx/generic/app/gendisp.cxx:66
    #63 0x00007fffeea32ced in SalUserEventList::DispatchUserEvents(bool)::$_0::operator()() const (this=0x7ffffffebc20) at /home/michi/development/git/libreoffice/vcl/source/app/salusereventlist.cxx:119
    #64 0x00007fffeea32bbb in SalUserEventList::DispatchUserEvents (this=0x5555569f26e0, bHandleAllCurrentEvents=false) at /home/michi/development/git/libreoffice/vcl/source/app/salusereventlist.cxx:120
    #65 0x00007fffef058435 in SalGenericDisplay::DispatchInternalEvent (this=0x5555569f26e0, bHandleAllCurrentEvent=false) at /home/michi/development/git/libreoffice/vcl/unx/generic/app/gendisp.cxx:51
    #66 0x00007fffe647995f in call_userEventFn (data=0x5555555b3760) at /home/michi/development/git/libreoffice/vcl/unx/gtk3/gtkdata.cxx:825
    #67 0x00007fffe9d04385 in ??? () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
    #68 0x00007fffe9d065b7 in ??? () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
    #69 0x00007fffe9d0701f in g_main_loop_run () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
    #70 0x00007fffe652062a in main_loop_run (pLoop=0x55555edb57d0) at vcl/inc/unx/gtk/gtkdata.hxx:59
    #71 0x00007fffe64964ad in (anonymous namespace)::DialogRunner::run (this=0x55555ed86530) at /home/michi/development/git/libreoffice/vcl/unx/gtk3/gtkinst.cxx:6768
    #72 0x00007fffe6491af0 in (anonymous namespace)::GtkInstanceDialog::run (this=0x55555ed863d0) at /home/michi/development/git/libreoffice/vcl/unx/gtk3/gtkinst.cxx:10190
    #73 0x00007fff9dd55d03 in SdOutliner::ShowWrapAroundDialog (this=0x55555ed78a80) at /home/michi/development/git/libreoffice/sd/source/ui/view/Outliner.cxx:1526
    #74 0x00007fff9dd4e88f in SdOutliner::EndOfSearch (this=0x55555ed78a80) at /home/michi/development/git/libreoffice/sd/source/ui/view/Outliner.cxx:1432
    #75 0x00007fff9dd4f9e2 in SdOutliner::ProvideNextTextObject (this=0x55555ed78a80) at /home/michi/development/git/libreoffice/sd/source/ui/view/Outliner.cxx:1399
    #76 0x00007fff9dd4e68b in SdOutliner::SpellNextDocument (this=0x55555ed78a80) at /home/michi/development/git/libreoffice/sd/source/ui/view/Outliner.cxx:393
    #77 0x00007fff9dd4fbc0 in SdOutliner::GetNextSpellSentence (this=0x55555ed78a80) at /home/michi/development/git/libreoffice/sd/source/ui/view/Outliner.cxx:436
    #78 0x00007fff9d8f4ee0 in sd::SpellDialogChildWindow::GetNextWrongSentence (this=0x55555eaeead0) at /home/michi/development/git/libreoffice/sd/source/ui/dlg/SpellDialogChildWindow.cxx:72
    #79 0x00007fff9480ddaa in svx::SpellDialog::GetNextSentence_Impl (this=0x55555eb6ef60, pGuard=0x0, bUseSavedSentence=false, bRecheck=false) at /home/michi/development/git/libreoffice/cui/source/dialogs/SpellDialog.cxx:1050
    #80 0x00007fff9480caa4 in svx::SpellDialog::SpellContinue_Impl (this=0x55555eb6ef60, pGuard=0x0, bUseSavedSentence=false, bIgnoreCurrentError=false) at /home/michi/development/git/libreoffice/cui/source/dialogs/SpellDialog.cxx:402
    #81 0x00007fff9480f0dd in svx::SpellDialog::Initialize (this=0x55555eb6ef60) at /home/michi/development/git/libreoffice/cui/source/dialogs/SpellDialog.cxx:432
    #82 0x00007fff9485d131 in (anonymous namespace)::AbstractSpellDialog_Impl::Initialize (this=0x5555599c5060) at /home/michi/development/git/libreoffice/cui/source/factory/dlgfact.cxx:452
    #83 0x00007ffff27ef522 in svx::SpellDialogChildWindow::Initialize (this=0x55555eaeead0) at /home/michi/development/git/libreoffice/svx/source/dialog/SpellDialogChildWindow.cxx:49
    #84 0x00007ffff3aa0d49 in SfxChildWindow::CreateChildWindow (nId=10243, pParent=0x5555589410f0, pBindings=0x555556a7ef20, rInfo=...) at /home/michi/development/git/libreoffice/sfx2/source/appl/childwin.cxx:244
    #85 0x00007ffff3b3be5d in SfxWorkWindow::CreateChildWin_Impl (this=0x7fff980287c0, pCW=0x5555598d22b0, bSetFocus=false) at /home/michi/development/git/libreoffice/sfx2/source/appl/workwin.cxx:1350
    #86 0x00007ffff3b3bbc6 in SfxWorkWindow::UpdateChildWindows_Impl (this=0x7fff980287c0) at /home/michi/development/git/libreoffice/sfx2/source/appl/workwin.cxx:1299
    #87 0x00007ffff3b3b205 in SfxWorkWindow::UpdateObjectBars_Impl2 (this=0x7fff980287c0) at /home/michi/development/git/libreoffice/sfx2/source/appl/workwin.cxx:1247
    #88 0x00007ffff3b3a831 in SfxWorkWindow::UpdateObjectBars_Impl (this=0x7fff980287c0) at /home/michi/development/git/libreoffice/sfx2/source/appl/workwin.cxx:1095
    #89 0x00007ffff3ba83b3 in SfxDispatcher::Update_Impl (this=0x555556877340, bForce=true) at /home/michi/development/git/libreoffice/sfx2/source/control/dispatch.cxx:1124
    #90 0x00007ffff3bfebbe in DispatcherUpdate_Impl (pArg=0x555556877340) at /home/michi/development/git/libreoffice/sfx2/source/control/shell.cxx:681
    #91 0x00007ffff0889f71 in Link<void*, void>::Call (this=0x55555e38cad0, data=0x555556877340) at include/tools/link.hxx:105
    #92 0x00007ffff08df2c8 in svtools::AsynchronLink::HandleCall_PostUserEvent (this=0x55555e38cad0) at /home/michi/development/git/libreoffice/svtools/source/control/asynclink.cxx:66
    #93 0x00007ffff08df21d in svtools::AsynchronLink::LinkStubHandleCall_PostUserEvent (instance=0x55555e38cad0, data=0x0) at /home/michi/development/git/libreoffice/svtools/source/control/asynclink.cxx:58
    #94 0x00007fffee4622d1 in Link<void*, void>::Call (this=0x55555e780b88, data=0x0) at include/tools/link.hxx:105
    #95 0x00007fffee45dbf1 in ImplHandleUserEvent (pSVEvent=0x55555e780b80) at /home/michi/development/git/libreoffice/vcl/source/window/winproc.cxx:2312
    #96 0x00007fffee45ab1f in ImplWindowFrameProc (_pWindow=0x555556a70090, nEvent=SalEvent::UserEvent, pEvent=0x55555e780b80) at /home/michi/development/git/libreoffice/vcl/source/window/winproc.cxx:2869
    #97 0x00007fffef031fec in SalFrame::CallCallback (this=0x5555569484e0, nEvent=SalEvent::UserEvent, pEvent=0x55555e780b80) at vcl/inc/salframe.hxx:310
    #98 0x00007fffef0584df in SalGenericDisplay::ProcessEvent (this=0x5555569f26e0, aEvent=...) at /home/michi/development/git/libreoffice/vcl/unx/generic/app/gendisp.cxx:66
    #99 0x00007fffeea32ced in SalUserEventList::DispatchUserEvents(bool)::$_0::operator()() const (this=0x7ffffffee430) at /home/michi/development/git/libreoffice/vcl/source/app/salusereventlist.cxx:119
    #100 0x00007fffeea32bbb in SalUserEventList::DispatchUserEvents (this=0x5555569f26e0, bHandleAllCurrentEvents=false) at /home/michi/development/git/libreoffice/vcl/source/app/salusereventlist.cxx:120
    #101 0x00007fffef058435 in SalGenericDisplay::DispatchInternalEvent (this=0x5555569f26e0, bHandleAllCurrentEvent=false) at /home/michi/development/git/libreoffice/vcl/unx/generic/app/gendisp.cxx:51
    #102 0x00007fffe647995f in call_userEventFn (data=0x5555555b3760) at /home/michi/development/git/libreoffice/vcl/unx/gtk3/gtkdata.cxx:825
    #103 0x00007fffe9d04385 in ??? () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
    #104 0x00007fffe9d065b7 in ??? () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
    #105 0x00007fffe9d0701f in g_main_loop_run () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
    #106 0x00007fffe652062a in main_loop_run (pLoop=0x55555eb90ac0) at vcl/inc/unx/gtk/gtkdata.hxx:59
    #107 0x00007fffe64964ad in (anonymous namespace)::DialogRunner::run (this=0x55555eb76cc0) at /home/michi/development/git/libreoffice/vcl/unx/gtk3/gtkinst.cxx:6768
    #108 0x00007fffe6491af0 in (anonymous namespace)::GtkInstanceDialog::run (this=0x55555eb76b60) at /home/michi/development/git/libreoffice/vcl/unx/gtk3/gtkinst.cxx:10190
    #109 0x00007fff9dd55d03 in SdOutliner::ShowWrapAroundDialog (this=0x55555eb6a760) at /home/michi/development/git/libreoffice/sd/source/ui/view/Outliner.cxx:1526
    #110 0x00007fff9dd4e88f in SdOutliner::EndOfSearch (this=0x55555eb6a760) at /home/michi/development/git/libreoffice/sd/source/ui/view/Outliner.cxx:1432
    #111 0x00007fff9dd4f9e2 in SdOutliner::ProvideNextTextObject (this=0x55555eb6a760) at /home/michi/development/git/libreoffice/sd/source/ui/view/Outliner.cxx:1399
    #112 0x00007fff9dd4e68b in SdOutliner::SpellNextDocument (this=0x55555eb6a760) at /home/michi/development/git/libreoffice/sd/source/ui/view/Outliner.cxx:393
    #113 0x00007fff9dd4fbc0 in SdOutliner::GetNextSpellSentence (this=0x55555eb6a760) at /home/michi/development/git/libreoffice/sd/source/ui/view/Outliner.cxx:436
    #114 0x00007fff9d8f4ee0 in sd::SpellDialogChildWindow::GetNextWrongSentence (this=0x55555e92cf20) at /home/michi/development/git/libreoffice/sd/source/ui/dlg/SpellDialogChildWindow.cxx:72
    #115 0x00007fff9480ddaa in svx::SpellDialog::GetNextSentence_Impl (this=0x55555e7bc0e0, pGuard=0x0, bUseSavedSentence=false, bRecheck=false) at /home/michi/development/git/libreoffice/cui/source/dialogs/SpellDialog.cxx:1050
    #116 0x00007fff9480caa4 in svx::SpellDialog::SpellContinue_Impl (this=0x55555e7bc0e0, pGuard=0x0, bUseSavedSentence=false, bIgnoreCurrentError=false) at /home/michi/development/git/libreoffice/cui/source/dialogs/SpellDialog.cxx:402
    #117 0x00007fff9480f0dd in svx::SpellDialog::Initialize (this=0x55555e7bc0e0) at /home/michi/development/git/libreoffice/cui/source/dialogs/SpellDialog.cxx:432
    #118 0x00007fff9485d131 in (anonymous namespace)::AbstractSpellDialog_Impl::Initialize (this=0x55555e75e580) at /home/michi/development/git/libreoffice/cui/source/factory/dlgfact.cxx:452
    #119 0x00007ffff27ef522 in svx::SpellDialogChildWindow::Initialize (this=0x55555e92cf20) at /home/michi/development/git/libreoffice/svx/source/dialog/SpellDialogChildWindow.cxx:49
    #120 0x00007ffff3aa0d49 in SfxChildWindow::CreateChildWindow (nId=10243, pParent=0x5555589410f0, pBindings=0x555556a7ef20, rInfo=...) at /home/michi/development/git/libreoffice/sfx2/source/appl/childwin.cxx:244
    #121 0x00007ffff3b3be5d in SfxWorkWindow::CreateChildWin_Impl (this=0x7fff980287c0, pCW=0x5555598d22b0, bSetFocus=false) at /home/michi/development/git/libreoffice/sfx2/source/appl/workwin.cxx:1350
    #122 0x00007ffff3b3bbc6 in SfxWorkWindow::UpdateChildWindows_Impl (this=0x7fff980287c0) at /home/michi/development/git/libreoffice/sfx2/source/appl/workwin.cxx:1299
    #123 0x00007ffff3b3b205 in SfxWorkWindow::UpdateObjectBars_Impl2 (this=0x7fff980287c0) at /home/michi/development/git/libreoffice/sfx2/source/appl/workwin.cxx:1247
    #124 0x00007ffff3b3a831 in SfxWorkWindow::UpdateObjectBars_Impl (this=0x7fff980287c0) at /home/michi/development/git/libreoffice/sfx2/source/appl/workwin.cxx:1095
    #125 0x00007ffff3ba83b3 in SfxDispatcher::Update_Impl (this=0x555556877340, bForce=true) at /home/michi/development/git/libreoffice/sfx2/source/control/dispatch.cxx:1124
    #126 0x00007ffff3bfebbe in DispatcherUpdate_Impl (pArg=0x555556877340) at /home/michi/development/git/libreoffice/sfx2/source/control/shell.cxx:681
    #127 0x00007ffff0889f71 in Link<void*, void>::Call (this=0x55555a823ba0, data=0x555556877340) at include/tools/link.hxx:105
    #128 0x00007ffff08df2c8 in svtools::AsynchronLink::HandleCall_PostUserEvent (this=0x55555a823ba0) at /home/michi/development/git/libreoffice/svtools/source/control/asynclink.cxx:66
    #129 0x00007ffff08df21d in svtools::AsynchronLink::LinkStubHandleCall_PostUserEvent (instance=0x55555a823ba0, data=0x0) at /home/michi/development/git/libreoffice/svtools/source/control/asynclink.cxx:58
    #130 0x00007fffee4622d1 in Link<void*, void>::Call (this=0x55555e6ff308, data=0x0) at include/tools/link.hxx:105
    #131 0x00007fffee45dbf1 in ImplHandleUserEvent (pSVEvent=0x55555e6ff300) at /home/michi/development/git/libreoffice/vcl/source/window/winproc.cxx:2312
    #132 0x00007fffee45ab1f in ImplWindowFrameProc (_pWindow=0x555556a70090, nEvent=SalEvent::UserEvent, pEvent=0x55555e6ff300) at /home/michi/development/git/libreoffice/vcl/source/window/winproc.cxx:2869
    #133 0x00007fffef031fec in SalFrame::CallCallback (this=0x5555569484e0, nEvent=SalEvent::UserEvent, pEvent=0x55555e6ff300) at vcl/inc/salframe.hxx:310
    #134 0x00007fffef0584df in SalGenericDisplay::ProcessEvent (this=0x5555569f26e0, aEvent=...) at /home/michi/development/git/libreoffice/vcl/unx/generic/app/gendisp.cxx:66
    #135 0x00007fffeea32ced in SalUserEventList::DispatchUserEvents(bool)::$_0::operator()() const (this=0x7fffffff0c40) at /home/michi/development/git/libreoffice/vcl/source/app/salusereventlist.cxx:119
    #136 0x00007fffeea32bbb in SalUserEventList::DispatchUserEvents (this=0x5555569f26e0, bHandleAllCurrentEvents=false) at /home/michi/development/git/libreoffice/vcl/source/app/salusereventlist.cxx:120
    #137 0x00007fffef058435 in SalGenericDisplay::DispatchInternalEvent (this=0x5555569f26e0, bHandleAllCurrentEvent=false) at /home/michi/development/git/libreoffice/vcl/unx/generic/app/gendisp.cxx:51
    #138 0x00007fffe647995f in call_userEventFn (data=0x5555555b3760) at /home/michi/development/git/libreoffice/vcl/unx/gtk3/gtkdata.cxx:825
    #139 0x00007fffe9d04385 in ??? () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
    #140 0x00007fffe9d065b7 in ??? () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
    #141 0x00007fffe9d0701f in g_main_loop_run () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
    #142 0x00007fffe652062a in main_loop_run (pLoop=0x55555e92fb70) at vcl/inc/unx/gtk/gtkdata.hxx:59
    #143 0x00007fffe64964ad in (anonymous namespace)::DialogRunner::run (this=0x55555e950a20) at /home/michi/development/git/libreoffice/vcl/unx/gtk3/gtkinst.cxx:6768
    #144 0x00007fffe6491af0 in (anonymous namespace)::GtkInstanceDialog::run (this=0x55555e9508c0) at /home/michi/development/git/libreoffice/vcl/unx/gtk3/gtkinst.cxx:10190
    #145 0x00007fff9dd55d03 in SdOutliner::ShowWrapAroundDialog (this=0x55555e8e0e30) at /home/michi/development/git/libreoffice/sd/source/ui/view/Outliner.cxx:1526
    #146 0x00007fff9dd4e88f in SdOutliner::EndOfSearch (this=0x55555e8e0e30) at /home/michi/development/git/libreoffice/sd/source/ui/view/Outliner.cxx:1432
    #147 0x00007fff9dd4f9e2 in SdOutliner::ProvideNextTextObject (this=0x55555e8e0e30) at /home/michi/development/git/libreoffice/sd/source/ui/view/Outliner.cxx:1399
    #148 0x00007fff9dd4e68b in SdOutliner::SpellNextDocument (this=0x55555e8e0e30) at /home/michi/development/git/libreoffice/sd/source/ui/view/Outliner.cxx:393
    #149 0x00007fff9dd4fbc0 in SdOutliner::GetNextSpellSentence (this=0x55555e8e0e30) at /home/michi/development/git/libreoffice/sd/source/ui/view/Outliner.cxx:436
    #150 0x00007fff9d8f4ee0 in sd::SpellDialogChildWindow::GetNextWrongSentence (this=0x55555e8f0390) at /home/michi/development/git/libreoffice/sd/source/ui/dlg/SpellDialogChildWindow.cxx:72
    #151 0x00007fff9480ddaa in svx::SpellDialog::GetNextSentence_Impl (this=0x55555e9c6ac0, pGuard=0x0, bUseSavedSentence=false, bRecheck=false) at /home/michi/development/git/libreoffice/cui/source/dialogs/SpellDialog.cxx:1050
    #152 0x00007fff9480caa4 in svx::SpellDialog::SpellContinue_Impl (this=0x55555e9c6ac0, pGuard=0x0, bUseSavedSentence=false, bIgnoreCurrentError=false) at /home/michi/development/git/libreoffice/cui/source/dialogs/SpellDialog.cxx:402
    #153 0x00007fff9480f0dd in svx::SpellDialog::Initialize (this=0x55555e9c6ac0) at /home/michi/development/git/libreoffice/cui/source/dialogs/SpellDialog.cxx:432
    #154 0x00007fff9485d131 in (anonymous namespace)::AbstractSpellDialog_Impl::Initialize (this=0x55555e319180) at /home/michi/development/git/libreoffice/cui/source/factory/dlgfact.cxx:452
    #155 0x00007ffff27ef522 in svx::SpellDialogChildWindow::Initialize (this=0x55555e8f0390) at /home/michi/development/git/libreoffice/svx/source/dialog/SpellDialogChildWindow.cxx:49
    #156 0x00007ffff3aa0d49 in SfxChildWindow::CreateChildWindow (nId=10243, pParent=0x5555589410f0, pBindings=0x555556a7ef20, rInfo=...) at /home/michi/development/git/libreoffice/sfx2/source/appl/childwin.cxx:244
    #157 0x00007ffff3b3be5d in SfxWorkWindow::CreateChildWin_Impl (this=0x7fff980287c0, pCW=0x5555598d22b0, bSetFocus=false) at /home/michi/development/git/libreoffice/sfx2/source/appl/workwin.cxx:1350
    #158 0x00007ffff3b3bbc6 in SfxWorkWindow::UpdateChildWindows_Impl (this=0x7fff980287c0) at /home/michi/development/git/libreoffice/sfx2/source/appl/workwin.cxx:1299
    #159 0x00007ffff3b3b205 in SfxWorkWindow::UpdateObjectBars_Impl2 (this=0x7fff980287c0) at /home/michi/development/git/libreoffice/sfx2/source/appl/workwin.cxx:1247
    #160 0x00007ffff3b3a831 in SfxWorkWindow::UpdateObjectBars_Impl (this=0x7fff980287c0) at /home/michi/development/git/libreoffice/sfx2/source/appl/workwin.cxx:1095
    #161 0x00007ffff3ba83b3 in SfxDispatcher::Update_Impl (this=0x555556877340, bForce=true) at /home/michi/development/git/libreoffice/sfx2/source/control/dispatch.cxx:1124
    #162 0x00007ffff3bfebbe in DispatcherUpdate_Impl (pArg=0x555556877340) at /home/michi/development/git/libreoffice/sfx2/source/control/shell.cxx:681
    #163 0x00007ffff0889f71 in Link<void*, void>::Call (this=0x55555e3f61c0, data=0x555556877340) at include/tools/link.hxx:105
    #164 0x00007ffff08df2c8 in svtools::AsynchronLink::HandleCall_PostUserEvent (this=0x55555e3f61c0) at /home/michi/development/git/libreoffice/svtools/source/control/asynclink.cxx:66
    #165 0x00007ffff08df21d in svtools::AsynchronLink::LinkStubHandleCall_PostUserEvent (instance=0x55555e3f61c0, data=0x0) at /home/michi/development/git/libreoffice/svtools/source/control/asynclink.cxx:58
    #166 0x00007fffee4622d1 in Link<void*, void>::Call (this=0x55555e58c6e8, data=0x0) at include/tools/link.hxx:105
    #167 0x00007fffee45dbf1 in ImplHandleUserEvent (pSVEvent=0x55555e58c6e0) at /home/michi/development/git/libreoffice/vcl/source/window/winproc.cxx:2312
    #168 0x00007fffee45ab1f in ImplWindowFrameProc (_pWindow=0x555556a70090, nEvent=SalEvent::UserEvent, pEvent=0x55555e58c6e0) at /home/michi/development/git/libreoffice/vcl/source/window/winproc.cxx:2869
    #169 0x00007fffef031fec in SalFrame::CallCallback (this=0x5555569484e0, nEvent=SalEvent::UserEvent, pEvent=0x55555e58c6e0) at vcl/inc/salframe.hxx:310
    #170 0x00007fffef0584df in SalGenericDisplay::ProcessEvent (this=0x5555569f26e0, aEvent=...) at /home/michi/development/git/libreoffice/vcl/unx/generic/app/gendisp.cxx:66
    #171 0x00007fffeea32ced in SalUserEventList::DispatchUserEvents(bool)::$_0::operator()() const (this=0x7fffffff3450) at /home/michi/development/git/libreoffice/vcl/source/app/salusereventlist.cxx:119
    #172 0x00007fffeea32bbb in SalUserEventList::DispatchUserEvents (this=0x5555569f26e0, bHandleAllCurrentEvents=false) at /home/michi/development/git/libreoffice/vcl/source/app/salusereventlist.cxx:120
    #173 0x00007fffef058435 in SalGenericDisplay::DispatchInternalEvent (this=0x5555569f26e0, bHandleAllCurrentEvent=false) at /home/michi/development/git/libreoffice/vcl/unx/generic/app/gendisp.cxx:51
    #174 0x00007fffe647995f in call_userEventFn (data=0x5555555b3760) at /home/michi/development/git/libreoffice/vcl/unx/gtk3/gtkdata.cxx:825
    #175 0x00007fffe9d04385 in ??? () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
    #176 0x00007fffe9d065b7 in ??? () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
    #177 0x00007fffe9d0701f in g_main_loop_run () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
    #178 0x00007fffe652062a in main_loop_run (pLoop=0x55555e8ec500) at vcl/inc/unx/gtk/gtkdata.hxx:59
    #179 0x00007fffe64964ad in (anonymous namespace)::DialogRunner::run (this=0x55555e867400) at /home/michi/development/git/libreoffice/vcl/unx/gtk3/gtkinst.cxx:6768
    #180 0x00007fffe6491af0 in (anonymous namespace)::GtkInstanceDialog::run (this=0x55555e8672a0) at /home/michi/development/git/libreoffice/vcl/unx/gtk3/gtkinst.cxx:10190
    #181 0x00007fff9dd55d03 in SdOutliner::ShowWrapAroundDialog (this=0x55555e859950) at /home/michi/development/git/libreoffice/sd/source/ui/view/Outliner.cxx:1526
    #182 0x00007fff9dd4e88f in SdOutliner::EndOfSearch (this=0x55555e859950) at /home/michi/development/git/libreoffice/sd/source/ui/view/Outliner.cxx:1432
    #183 0x00007fff9dd4f9e2 in SdOutliner::ProvideNextTextObject (this=0x55555e859950) at /home/michi/development/git/libreoffice/sd/source/ui/view/Outliner.cxx:1399
    #184 0x00007fff9dd4e68b in SdOutliner::SpellNextDocument (this=0x55555e859950) at /home/michi/development/git/libreoffice/sd/source/ui/view/Outliner.cxx:393
    #185 0x00007fff9dd4fbc0 in SdOutliner::GetNextSpellSentence (this=0x55555e859950) at /home/michi/development/git/libreoffice/sd/source/ui/view/Outliner.cxx:436
    #186 0x00007fff9d8f4ee0 in sd::SpellDialogChildWindow::GetNextWrongSentence (this=0x55555e7623d0) at /home/michi/development/git/libreoffice/sd/source/ui/dlg/SpellDialogChildWindow.cxx:72
    #187 0x00007fff9480ddaa in svx::SpellDialog::GetNextSentence_Impl (this=0x55555e4fc700, pGuard=0x0, bUseSavedSentence=false, bRecheck=false) at /home/michi/development/git/libreoffice/cui/source/dialogs/SpellDialog.cxx:1050
    #188 0x00007fff9480caa4 in svx::SpellDialog::SpellContinue_Impl (this=0x55555e4fc700, pGuard=0x0, bUseSavedSentence=false, bIgnoreCurrentError=false) at /home/michi/development/git/libreoffice/cui/source/dialogs/SpellDialog.cxx:402
    #189 0x00007fff9480f0dd in svx::SpellDialog::Initialize (this=0x55555e4fc700) at /home/michi/development/git/libreoffice/cui/source/dialogs/SpellDialog.cxx:432
    #190 0x00007fff9485d131 in (anonymous namespace)::AbstractSpellDialog_Impl::Initialize (this=0x555558f1e9c0) at /home/michi/development/git/libreoffice/cui/source/factory/dlgfact.cxx:452
    #191 0x00007ffff27ef522 in svx::SpellDialogChildWindow::Initialize (this=0x55555e7623d0) at /home/michi/development/git/libreoffice/svx/source/dialog/SpellDialogChildWindow.cxx:49
    #192 0x00007ffff3aa0d49 in SfxChildWindow::CreateChildWindow (nId=10243, pParent=0x5555589410f0, pBindings=0x555556a7ef20, rInfo=...) at /home/michi/development/git/libreoffice/sfx2/source/appl/childwin.cxx:244
    #193 0x00007ffff3b3be5d in SfxWorkWindow::CreateChildWin_Impl (this=0x7fff980287c0, pCW=0x5555598d22b0, bSetFocus=false) at /home/michi/development/git/libreoffice/sfx2/source/appl/workwin.cxx:1350
    #194 0x00007ffff3b3bbc6 in SfxWorkWindow::UpdateChildWindows_Impl (this=0x7fff980287c0) at /home/michi/development/git/libreoffice/sfx2/source/appl/workwin.cxx:1299
    #195 0x00007ffff3b3b205 in SfxWorkWindow::UpdateObjectBars_Impl2 (this=0x7fff980287c0) at /home/michi/development/git/libreoffice/sfx2/source/appl/workwin.cxx:1247
    #196 0x00007ffff3b3a831 in SfxWorkWindow::UpdateObjectBars_Impl (this=0x7fff980287c0) at /home/michi/development/git/libreoffice/sfx2/source/appl/workwin.cxx:1095
    #197 0x00007ffff3ba83b3 in SfxDispatcher::Update_Impl (this=0x555556877340, bForce=true) at /home/michi/development/git/libreoffice/sfx2/source/control/dispatch.cxx:1124
    #198 0x00007ffff3bfebbe in DispatcherUpdate_Impl (pArg=0x555556877340) at /home/michi/development/git/libreoffice/sfx2/source/control/shell.cxx:681
    #199 0x00007ffff0889f71 in Link<void*, void>::Call (this=0x55555e45d520, data=0x555556877340) at include/tools/link.hxx:105
    #200 0x00007ffff08df2c8 in svtools::AsynchronLink::HandleCall_PostUserEvent (this=0x55555e45d520) at /home/michi/development/git/libreoffice/svtools/source/control/asynclink.cxx:66
    #201 0x00007ffff08df21d in svtools::AsynchronLink::LinkStubHandleCall_PostUserEvent (instance=0x55555e45d520, data=0x0) at /home/michi/development/git/libreoffice/svtools/source/control/asynclink.cxx:58
    #202 0x00007fffee4622d1 in Link<void*, void>::Call (this=0x555559999828, data=0x0) at include/tools/link.hxx:105
    #203 0x00007fffee45dbf1 in ImplHandleUserEvent (pSVEvent=0x555559999820) at /home/michi/development/git/libreoffice/vcl/source/window/winproc.cxx:2312
    #204 0x00007fffee45ab1f in ImplWindowFrameProc (_pWindow=0x555556a70090, nEvent=SalEvent::UserEvent, pEvent=0x555559999820) at /home/michi/development/git/libreoffice/vcl/source/window/winproc.cxx:2869
    #205 0x00007fffef031fec in SalFrame::CallCallback (this=0x5555569484e0, nEvent=SalEvent::UserEvent, pEvent=0x555559999820) at vcl/inc/salframe.hxx:310
    #206 0x00007fffef0584df in SalGenericDisplay::ProcessEvent (this=0x5555569f26e0, aEvent=...) at /home/michi/development/git/libreoffice/vcl/unx/generic/app/gendisp.cxx:66
    #207 0x00007fffeea32ced in SalUserEventList::DispatchUserEvents(bool)::$_0::operator()() const (this=0x7fffffff5c60) at /home/michi/development/git/libreoffice/vcl/source/app/salusereventlist.cxx:119
    #208 0x00007fffeea32bbb in SalUserEventList::DispatchUserEvents (this=0x5555569f26e0, bHandleAllCurrentEvents=false) at /home/michi/development/git/libreoffice/vcl/source/app/salusereventlist.cxx:120
    #209 0x00007fffef058435 in SalGenericDisplay::DispatchInternalEvent (this=0x5555569f26e0, bHandleAllCurrentEvent=false) at /home/michi/development/git/libreoffice/vcl/unx/generic/app/gendisp.cxx:51
    #210 0x00007fffe647995f in call_userEventFn (data=0x5555555b3760) at /home/michi/development/git/libreoffice/vcl/unx/gtk3/gtkdata.cxx:825
    #211 0x00007fffe9d04385 in ??? () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
    #212 0x00007fffe9d065b7 in ??? () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
    #213 0x00007fffe9d0701f in g_main_loop_run () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
    #214 0x00007fffe652062a in main_loop_run (pLoop=0x55555e75b650) at vcl/inc/unx/gtk/gtkdata.hxx:59
    #215 0x00007fffe64964ad in (anonymous namespace)::DialogRunner::run (this=0x55555e6e17e0) at /home/michi/development/git/libreoffice/vcl/unx/gtk3/gtkinst.cxx:6768
    #216 0x00007fffe6491af0 in (anonymous namespace)::GtkInstanceDialog::run (this=0x55555e6e1680) at /home/michi/development/git/libreoffice/vcl/unx/gtk3/gtkinst.cxx:10190
    #217 0x00007fff9dd55d03 in SdOutliner::ShowWrapAroundDialog (this=0x55555e6be710) at /home/michi/development/git/libreoffice/sd/source/ui/view/Outliner.cxx:1526
    #218 0x00007fff9dd4e88f in SdOutliner::EndOfSearch (this=0x55555e6be710) at /home/michi/development/git/libreoffice/sd/source/ui/view/Outliner.cxx:1432
    #219 0x00007fff9dd4f9e2 in SdOutliner::ProvideNextTextObject (this=0x55555e6be710) at /home/michi/development/git/libreoffice/sd/source/ui/view/Outliner.cxx:1399
    #220 0x00007fff9dd4e68b in SdOutliner::SpellNextDocument (this=0x55555e6be710) at /home/michi/development/git/libreoffice/sd/source/ui/view/Outliner.cxx:393
    #221 0x00007fff9dd4fbc0 in SdOutliner::GetNextSpellSentence (this=0x55555e6be710) at /home/michi/development/git/libreoffice/sd/source/ui/view/Outliner.cxx:436
    #222 0x00007fff9d8f4ee0 in sd::SpellDialogChildWindow::GetNextWrongSentence (this=0x555558b3fbc0) at /home/michi/development/git/libreoffice/sd/source/ui/dlg/SpellDialogChildWindow.cxx:72
    #223 0x00007fff9480ddaa in svx::SpellDialog::GetNextSentence_Impl (this=0x55555e586600, pGuard=0x0, bUseSavedSentence=false, bRecheck=false) at /home/michi/development/git/libreoffice/cui/source/dialogs/SpellDialog.cxx:1050
    #224 0x00007fff9480caa4 in svx::SpellDialog::SpellContinue_Impl (this=0x55555e586600, pGuard=0x0, bUseSavedSentence=false, bIgnoreCurrentError=false) at /home/michi/development/git/libreoffice/cui/source/dialogs/SpellDialog.cxx:402
    #225 0x00007fff9480f0dd in svx::SpellDialog::Initialize (this=0x55555e586600) at /home/michi/development/git/libreoffice/cui/source/dialogs/SpellDialog.cxx:432
    #226 0x00007fff9485d131 in (anonymous namespace)::AbstractSpellDialog_Impl::Initialize (this=0x55555e52b360) at /home/michi/development/git/libreoffice/cui/source/factory/dlgfact.cxx:452
    #227 0x00007ffff27ef522 in svx::SpellDialogChildWindow::Initialize (this=0x555558b3fbc0) at /home/michi/development/git/libreoffice/svx/source/dialog/SpellDialogChildWindow.cxx:49
    #228 0x00007ffff3aa0d49 in SfxChildWindow::CreateChildWindow (nId=10243, pParent=0x5555589410f0, pBindings=0x555556a7ef20, rInfo=...) at /home/michi/development/git/libreoffice/sfx2/source/appl/childwin.cxx:244
    #229 0x00007ffff3b3be5d in SfxWorkWindow::CreateChildWin_Impl (this=0x7fff980287c0, pCW=0x5555598d22b0, bSetFocus=false) at /home/michi/development/git/libreoffice/sfx2/source/appl/workwin.cxx:1350
    #230 0x00007ffff3b3bbc6 in SfxWorkWindow::UpdateChildWindows_Impl (this=0x7fff980287c0) at /home/michi/development/git/libreoffice/sfx2/source/appl/workwin.cxx:1299
    #231 0x00007ffff3b3b205 in SfxWorkWindow::UpdateObjectBars_Impl2 (this=0x7fff980287c0) at /home/michi/development/git/libreoffice/sfx2/source/appl/workwin.cxx:1247
    #232 0x00007ffff3b3a831 in SfxWorkWindow::UpdateObjectBars_Impl (this=0x7fff980287c0) at /home/michi/development/git/libreoffice/sfx2/source/appl/workwin.cxx:1095
    #233 0x00007ffff3ba83b3 in SfxDispatcher::Update_Impl (this=0x555556877340, bForce=true) at /home/michi/development/git/libreoffice/sfx2/source/control/dispatch.cxx:1124
    #234 0x00007ffff3bfebbe in DispatcherUpdate_Impl (pArg=0x555556877340) at /home/michi/development/git/libreoffice/sfx2/source/control/shell.cxx:681
    #235 0x00007ffff0889f71 in Link<void*, void>::Call (this=0x55555e50f300, data=0x555556877340) at include/tools/link.hxx:105
    #236 0x00007ffff08df2c8 in svtools::AsynchronLink::HandleCall_PostUserEvent (this=0x55555e50f300) at /home/michi/development/git/libreoffice/svtools/source/control/asynclink.cxx:66
    #237 0x00007ffff08df21d in svtools::AsynchronLink::LinkStubHandleCall_PostUserEvent (instance=0x55555e50f300, data=0x0) at /home/michi/development/git/libreoffice/svtools/source/control/asynclink.cxx:58
    #238 0x00007fffee4622d1 in Link<void*, void>::Call (this=0x555559c0e478, data=0x0) at include/tools/link.hxx:105
    #239 0x00007fffee45dbf1 in ImplHandleUserEvent (pSVEvent=0x555559c0e470) at /home/michi/development/git/libreoffice/vcl/source/window/winproc.cxx:2312
    #240 0x00007fffee45ab1f in ImplWindowFrameProc (_pWindow=0x555556a70090, nEvent=SalEvent::UserEvent, pEvent=0x555559c0e470) at /home/michi/development/git/libreoffice/vcl/source/window/winproc.cxx:2869
    #241 0x00007fffef031fec in SalFrame::CallCallback (this=0x5555569484e0, nEvent=SalEvent::UserEvent, pEvent=0x555559c0e470) at vcl/inc/salframe.hxx:310
    #242 0x00007fffef0584df in SalGenericDisplay::ProcessEvent (this=0x5555569f26e0, aEvent=...) at /home/michi/development/git/libreoffice/vcl/unx/generic/app/gendisp.cxx:66
    #243 0x00007fffeea32ced in SalUserEventList::DispatchUserEvents(bool)::$_0::operator()() const (this=0x7fffffff8470) at /home/michi/development/git/libreoffice/vcl/source/app/salusereventlist.cxx:119
    #244 0x00007fffeea32bbb in SalUserEventList::DispatchUserEvents (this=0x5555569f26e0, bHandleAllCurrentEvents=false) at /home/michi/development/git/libreoffice/vcl/source/app/salusereventlist.cxx:120
    #245 0x00007fffef058435 in SalGenericDisplay::DispatchInternalEvent (this=0x5555569f26e0, bHandleAllCurrentEvent=false) at /home/michi/development/git/libreoffice/vcl/unx/generic/app/gendisp.cxx:51
    #246 0x00007fffe647995f in call_userEventFn (data=0x5555555b3760) at /home/michi/development/git/libreoffice/vcl/unx/gtk3/gtkdata.cxx:825
    #247 0x00007fffe9d04385 in ??? () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
    #248 0x00007fffe9d065b7 in ??? () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
    #249 0x00007fffe9d0701f in g_main_loop_run () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
    #250 0x00007fffe652062a in main_loop_run (pLoop=0x55555e56d830) at vcl/inc/unx/gtk/gtkdata.hxx:59
    #251 0x00007fffe64964ad in (anonymous namespace)::DialogRunner::run (this=0x555558b52070) at /home/michi/development/git/libreoffice/vcl/unx/gtk3/gtkinst.cxx:6768
    #252 0x00007fffe6491af0 in (anonymous namespace)::GtkInstanceDialog::run (this=0x555558b51f10) at /home/michi/development/git/libreoffice/vcl/unx/gtk3/gtkinst.cxx:10190
    #253 0x00007fff9dd55d03 in SdOutliner::ShowWrapAroundDialog (this=0x555559646c20) at /home/michi/development/git/libreoffice/sd/source/ui/view/Outliner.cxx:1526
    #254 0x00007fff9dd4e88f in SdOutliner::EndOfSearch (this=0x555559646c20) at /home/michi/development/git/libreoffice/sd/source/ui/view/Outliner.cxx:1432
    #255 0x00007fff9dd4f9e2 in SdOutliner::ProvideNextTextObject (this=0x555559646c20) at /home/michi/development/git/libreoffice/sd/source/ui/view/Outliner.cxx:1399
    #256 0x00007fff9dd4e68b in SdOutliner::SpellNextDocument (this=0x555559646c20) at /home/michi/development/git/libreoffice/sd/source/ui/view/Outliner.cxx:393
    #257 0x00007fff9dd4fbc0 in SdOutliner::GetNextSpellSentence (this=0x555559646c20) at /home/michi/development/git/libreoffice/sd/source/ui/view/Outliner.cxx:436
    #258 0x00007fff9d8f4ee0 in sd::SpellDialogChildWindow::GetNextWrongSentence (this=0x55555e44ba10) at /home/michi/development/git/libreoffice/sd/source/ui/dlg/SpellDialogChildWindow.cxx:72
    #259 0x00007fff9480ddaa in svx::SpellDialog::GetNextSentence_Impl (this=0x55555e445f10, pGuard=0x0, bUseSavedSentence=false, bRecheck=false) at /home/michi/development/git/libreoffice/cui/source/dialogs/SpellDialog.cxx:1050
    #260 0x00007fff9480caa4 in svx::SpellDialog::SpellContinue_Impl (this=0x55555e445f10, pGuard=0x0, bUseSavedSentence=false, bIgnoreCurrentError=false) at /home/michi/development/git/libreoffice/cui/source/dialogs/SpellDialog.cxx:402
    #261 0x00007fff9480f0dd in svx::SpellDialog::Initialize (this=0x55555e445f10) at /home/michi/development/git/libreoffice/cui/source/dialogs/SpellDialog.cxx:432
    #262 0x00007fff9485d131 in (anonymous namespace)::AbstractSpellDialog_Impl::Initialize (this=0x55555e3212b0) at /home/michi/development/git/libreoffice/cui/source/factory/dlgfact.cxx:452
    #263 0x00007ffff27ef522 in svx::SpellDialogChildWindow::Initialize (this=0x55555e44ba10) at /home/michi/development/git/libreoffice/svx/source/dialog/SpellDialogChildWindow.cxx:49
    #264 0x00007ffff3aa0d49 in SfxChildWindow::CreateChildWindow (nId=10243, pParent=0x5555589410f0, pBindings=0x555556a7ef20, rInfo=...) at /home/michi/development/git/libreoffice/sfx2/source/appl/childwin.cxx:244
    #265 0x00007ffff3b3be5d in SfxWorkWindow::CreateChildWin_Impl (this=0x7fff980287c0, pCW=0x5555598d22b0, bSetFocus=true) at /home/michi/development/git/libreoffice/sfx2/source/appl/workwin.cxx:1350
    #266 0x00007ffff3b3e0f3 in SfxWorkWindow::ToggleChildWindow_Impl (this=0x7fff980287c0, nId=10243, bSetFocus=true) at /home/michi/development/git/libreoffice/sfx2/source/appl/workwin.cxx:1835
    #267 0x00007ffff42110c9 in SfxViewFrame::ToggleChildWindow (this=0x555556819530, nId=10243) at /home/michi/development/git/libreoffice/sfx2/source/view/viewfrm.cxx:3703
    #268 0x00007fff9de38d3c in sd::DrawViewShell::Execute (this=0x555556b4b610, rReq=...) at /home/michi/development/git/libreoffice/sd/source/ui/view/drviews7.cxx:1976
    #269 0x00007fff9de64075 in SfxStubDrawViewShellExecute (pShell=0x555556b4b610, rReq=...) at workdir/SdiTarget/sd/sdi/sdslots.hxx:1575
    #270 0x00007ffff3ba6bfe in SfxDispatcher::Call_Impl (this=0x555556877340, rShell=..., rSlot=..., rReq=..., bRecord=true) at /home/michi/development/git/libreoffice/sfx2/source/control/dispatch.cxx:256
    #271 0x00007ffff3bab4a6 in SfxDispatcher::Execute_ (this=0x555556877340, rShell=..., rSlot=..., rReq=..., eCallMode=SfxCallMode::RECORD) at /home/michi/development/git/libreoffice/sfx2/source/control/dispatch.cxx:755
    #272 0x00007ffff3b9302e in SfxBindings::Execute_Impl (this=0x555556a7ef20, aReq=..., pSlot=0x7fff9df8d038 <aDrawViewShellSlots_Impl+10728>, pShell=0x555556b4b610)
        at /home/michi/development/git/libreoffice/sfx2/source/control/bindings.cxx:1045
    #273 0x00007ffff3c720cd in SfxDispatchController_Impl::dispatch (this=0x55555915d2e0, aURL=..., aArgs=empty uno::Sequence, rListener=empty uno::Reference) at /home/michi/development/git/libreoffice/sfx2/source/control/unoctitm.cxx:736
    #274 0x00007ffff3c70b84 in SfxOfficeDispatch::dispatch (this=0x55555915cfa0, aURL=..., aArgs=empty uno::Sequence) at /home/michi/development/git/libreoffice/sfx2/source/control/unoctitm.cxx:255
    #275 0x00007ffff09d3792 in svt::(anonymous namespace)::AsyncAccelExec::impl_ts_asyncCallback (this=0x55555e321fc0) at /home/michi/development/git/libreoffice/svtools/source/misc/acceleratorexecute.cxx:509
    #276 0x00007ffff09d34cd in svt::(anonymous namespace)::AsyncAccelExec::LinkStubimpl_ts_asyncCallback (instance=0x55555e321fc0, data=0x0) at /home/michi/development/git/libreoffice/svtools/source/misc/acceleratorexecute.cxx:501
    #277 0x00007fffee18f511 in Link<LinkParamNone*, void>::Call (this=0x55555e322060, data=0x0) at include/tools/link.hxx:105
    #278 0x00007fffeea21eea in vcl::EventPoster::DoEvent_Impl (this=0x55555e322058) at /home/michi/development/git/libreoffice/vcl/source/helper/evntpost.cxx:52
    #279 0x00007fffeea21e9d in vcl::EventPoster::LinkStubDoEvent_Impl (instance=0x55555e322058, data=0x0) at /home/michi/development/git/libreoffice/vcl/source/helper/evntpost.cxx:48
    #280 0x00007fffee4622d1 in Link<void*, void>::Call (this=0x55555e3148c8, data=0x0) at include/tools/link.hxx:105
    #281 0x00007fffee45dbf1 in ImplHandleUserEvent (pSVEvent=0x55555e3148c0) at /home/michi/development/git/libreoffice/vcl/source/window/winproc.cxx:2312
    #282 0x00007fffee45ab1f in ImplWindowFrameProc (_pWindow=0x555556a70090, nEvent=SalEvent::UserEvent, pEvent=0x55555e3148c0) at /home/michi/development/git/libreoffice/vcl/source/window/winproc.cxx:2869
    #283 0x00007fffef031fec in SalFrame::CallCallback (this=0x5555569484e0, nEvent=SalEvent::UserEvent, pEvent=0x55555e3148c0) at vcl/inc/salframe.hxx:310
    #284 0x00007fffef0584df in SalGenericDisplay::ProcessEvent (this=0x5555569f26e0, aEvent=...) at /home/michi/development/git/libreoffice/vcl/unx/generic/app/gendisp.cxx:66
    #285 0x00007fffeea32ced in SalUserEventList::DispatchUserEvents(bool)::$_0::operator()() const (this=0x7fffffffb850) at /home/michi/development/git/libreoffice/vcl/source/app/salusereventlist.cxx:119
    #286 0x00007fffeea32bbb in SalUserEventList::DispatchUserEvents (this=0x5555569f26e0, bHandleAllCurrentEvents=false) at /home/michi/development/git/libreoffice/vcl/source/app/salusereventlist.cxx:120
    #287 0x00007fffef058435 in SalGenericDisplay::DispatchInternalEvent (this=0x5555569f26e0, bHandleAllCurrentEvent=false) at /home/michi/development/git/libreoffice/vcl/unx/generic/app/gendisp.cxx:51
    #288 0x00007fffe647995f in call_userEventFn (data=0x5555555b3760) at /home/michi/development/git/libreoffice/vcl/unx/gtk3/gtkdata.cxx:825
    #289 0x00007fffe9d04385 in ??? () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
    #290 0x00007fffe9d065b7 in ??? () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
    #291 0x00007fffe9d06d20 in g_main_context_iteration () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
    #292 0x00007fffe64785dc in GtkSalData::Yield (this=0x5555555b3760, bWait=true, bHandleAllCurrentEvents=false) at /home/michi/development/git/libreoffice/vcl/unx/gtk3/gtkdata.cxx:403
    #293 0x00007fffe647d613 in GtkInstance::DoYield (this=0x5555555b3610, bWait=true, bHandleAllCurrentEvents=false) at /home/michi/development/git/libreoffice/vcl/unx/gtk3/gtkinst.cxx:440
    #294 0x00007fffeeafec46 in ImplYield (i_bWait=true, i_bAllEvents=false) at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:389
    #295 0x00007fffeeafe55f in Application::Yield () at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:492
    #296 0x00007fffeeafe340 in Application::Execute () at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:364
    #297 0x00007ffff7b21d05 in desktop::Desktop::Main (this=0x7fffffffd590) at /home/michi/development/git/libreoffice/desktop/source/app/app.cxx:1682
    #298 0x00007fffeeb2b356 in ImplSVMain () at /home/michi/development/git/libreoffice/vcl/source/app/svmain.cxx:230
    #299 0x00007fffeeb2ce79 in SVMain () at /home/michi/development/git/libreoffice/vcl/source/app/svmain.cxx:248
    #300 0x00007ffff7b9ba3a in soffice_main () at /home/michi/development/git/libreoffice/desktop/source/app/sofficemain.cxx:122
    #301 0x00005555555559fd in sal_main () at /home/michi/development/git/libreoffice/desktop/source/app/main.c:51
    #302 0x00005555555559d7 in main (argc=2, argv=0x7fffffffd798) at /home/michi/development/git/libreoffice/desktop/source/app/main.c:49

Change-Id: Ic2e12a1ef163bb4ece04d631c92cc926bcbd0d5e
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/191950
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
bise86 pushed a commit to bise86/LibreOffice that referenced this pull request Sep 29, 2026
for soffice --headless --convert-to pdf tdf103059-2.odt

==2656459==ERROR: AddressSanitizer: heap-use-after-free on address 0x7c994604b938 at pc 0x7b2929cd73cd bp 0x7ffc818cc110 sp 0x7ffc818cc108
READ of size 8 at 0x7c994604b938 thread T0
    #0 0x7b2929cd73cc in SwTextFormatter::NewFlyCntPortion(SwTextFormatInfo&, SwTextAttr*) const core-asan/sw/source/core/text/itrform2.cxx:3220
    LibreOffice#1 0x7b2929e02267 in SwTextFormatter::NewExtraPortion(SwTextFormatInfo&) core-asan/sw/source/core/text/txtfld.cxx:285
    LibreOffice#2 0x7b2929cccd9d in SwTextFormatter::NewPortion(SwTextFormatInfo&, std::optional<o3tl::strong_int<int, Tag_TextFrameIndex> >) core-asan/sw/source/core/text/itrform2.cxx:1886
    LibreOffice#3 0x7b2929cbf0a3 in SwTextFormatter::BuildPortions(SwTextFormatInfo&) core-asan/sw/source/core/text/itrform2.cxx:440
    LibreOffice#4 0x7b2929ccec48 in SwTextFormatter::FormatLine(o3tl::strong_int<int, Tag_TextFrameIndex>) core-asan/sw/source/core/text/itrform2.cxx:2102
    LibreOffice#5 0x7b2929c10fac in SwTextFrame::FormatLine(SwTextFormatter&, bool) core-asan/sw/source/core/text/frmform.cxx:1458
    LibreOffice#6 0x7b2929c14223 in SwTextFrame::Format_(SwTextFormatter&, SwTextFormatInfo&, bool) core-asan/sw/source/core/text/frmform.cxx:1822
    LibreOffice#7 0x7b2929e4755c in SwTestFormat::SwTestFormat(SwTextFrame*, SwFrame const*, long) core-asan/sw/source/core/text/txtfrm.cxx:3453
    LibreOffice#8 0x7b2929e47e1d in SwTextFrame::TestFormat(SwFrame const*, long&, bool&) core-asan/sw/source/core/text/txtfrm.cxx:3483
    LibreOffice#9 0x7b29297645a7 in SwContentFrame::WouldFit_(long, SwLayoutFrame*, bool, bool) core-asan/sw/source/core/layout/calcmove.cxx:2192
    LibreOffice#10 0x7b2929756a65 in SwContentFrame::ShouldBwdMoved(SwLayoutFrame*, bool&) core-asan/sw/source/core/layout/calcmove.cxx:199
    LibreOffice#11 0x7b292979f8bd in SwFlowFrame::MoveBwd(bool&) core-asan/sw/source/core/layout/flowfrm.cxx:2669
    LibreOffice#12 0x7b2929761592 in SwContentFrame::MakeAll(OutputDevice*) core-asan/sw/source/core/layout/calcmove.cxx:1654
    LibreOffice#13 0x7b29297578e2 in SwFrame::PrepareMake(OutputDevice*) core-asan/sw/source/core/layout/calcmove.cxx:396
    LibreOffice#14 0x7b2929a082af in SwFrame::Calc(OutputDevice*) const core-asan/sw/source/core/layout/trvlfrm.cxx:1858
    LibreOffice#15 0x7b29298c2bd0 in lcl_FormatContentOfLayoutFrame core-asan/sw/source/core/layout/objectformattertxtfrm.cxx:688
    LibreOffice#16 0x7b29298c2b26 in lcl_FormatContentOfLayoutFrame core-asan/sw/source/core/layout/objectformattertxtfrm.cxx:684
    LibreOffice#17 0x7b29298c2b26 in lcl_FormatContentOfLayoutFrame core-asan/sw/source/core/layout/objectformattertxtfrm.cxx:684
    LibreOffice#18 0x7b29298c33a4 in SwObjectFormatterTextFrame::FormatAnchorFrameAndItsPrevs(SwTextFrame&) core-asan/sw/source/core/layout/objectformattertxtfrm.cxx:774
    LibreOffice#19 0x7b29297c06dd in SwFlyAtContentFrame::MakeAll(OutputDevice*) core-asan/sw/source/core/layout/flycnt.cxx:440
    LibreOffice#20 0x7b29297578e2 in SwFrame::PrepareMake(OutputDevice*) core-asan/sw/source/core/layout/calcmove.cxx:396
    LibreOffice#21 0x7b2929a082af in SwFrame::Calc(OutputDevice*) const core-asan/sw/source/core/layout/trvlfrm.cxx:1858
    LibreOffice#22 0x7b29297bc028 in SwFlyFrame::Calc(OutputDevice*) const core-asan/sw/source/core/layout/fly.cxx:3436
    LibreOffice#23 0x7b292984693b in SwLayAction::FormatLayoutFly(SwFlyFrame*) core-asan/sw/source/core/layout/layact.cxx:1553
    LibreOffice#24 0x7b29298ba5f3 in SwObjectFormatter::FormatObj_(SwAnchoredObject&) core-asan/sw/source/core/layout/objectformatter.cxx:287
    LibreOffice#25 0x7b29298c05fb in SwObjectFormatterTextFrame::DoFormatObj(SwAnchoredObject&, bool) core-asan/sw/source/core/layout/objectformattertxtfrm.cxx:132
    LibreOffice#26 0x7b29298ba207 in SwObjectFormatter::FormatObj(SwAnchoredObject&, SwFrame*, SwPageFrame const*, SwLayAction*) core-asan/sw/source/core/layout/objectformatter.cxx:191
    LibreOffice#27 0x7b29297b0cc5 in CalcContent(SwLayoutFrame*, bool) core-asan/sw/source/core/layout/fly.cxx:1852
    LibreOffice#28 0x7b2929a2c3f0 in SwLayoutFrame::FormatWidthCols(SwBorderAttrs const&, long, long) core-asan/sw/source/core/layout/wsfrm.cxx:4024
    LibreOffice#29 0x7b292998a2b2 in SwSectionFrame::Format(OutputDevice*, SwBorderAttrs const*) core-asan/sw/source/core/layout/sectfrm.cxx:1563
    LibreOffice#30 0x7b292975d1b7 in SwLayoutFrame::MakeAll(OutputDevice*) core-asan/sw/source/core/layout/calcmove.cxx:1073
    LibreOffice#31 0x7b292998618a in SwSectionFrame::MakeAll(OutputDevice*) core-asan/sw/source/core/layout/sectfrm.cxx:932
    LibreOffice#32 0x7b29297578e2 in SwFrame::PrepareMake(OutputDevice*) core-asan/sw/source/core/layout/calcmove.cxx:396
    LibreOffice#33 0x7b2929a082af in SwFrame::Calc(OutputDevice*) const core-asan/sw/source/core/layout/trvlfrm.cxx:1858
    LibreOffice#34 0x7b2929844913 in SwLayAction::FormatLayout(OutputDevice*, SwLayoutFrame*, bool) core-asan/sw/source/core/layout/layact.cxx:1315
    LibreOffice#35 0x7b292984617e in SwLayAction::FormatLayout(OutputDevice*, SwLayoutFrame*, bool) core-asan/sw/source/core/layout/layact.cxx:1511
    LibreOffice#36 0x7b292984617e in SwLayAction::FormatLayout(OutputDevice*, SwLayoutFrame*, bool) core-asan/sw/source/core/layout/layact.cxx:1511
    LibreOffice#37 0x7b292983f951 in SwLayAction::InternalAction(OutputDevice*) core-asan/sw/source/core/layout/layact.cxx:629
    LibreOffice#38 0x7b292983d4b7 in SwLayAction::Action(OutputDevice*) core-asan/sw/source/core/layout/layact.cxx:404
    LibreOffice#39 0x7b292a7e2aad in SwViewShell::CalcLayout() core-asan/sw/source/core/view/viewsh.cxx:1248
    LibreOffice#40 0x7b2929504fd1 in SwEditShell::CalcLayout() core-asan/sw/source/core/edit/edws.cxx:89
    LibreOffice#41 0x7b292b84944f in SwXTextDocument::getRendererCount(com::sun::star::uno::Any const&, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&) core-asan/sw/source/uibase/uno/unotxdoc.cxx:2766
    LibreOffice#42 0x7b2918f8118b in PDFExport::Export(rtl::OUString const&, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&) (core-asan/instdir/program/../program/libpdffilterlo.so+0x16a18b) (BuildId: 3e1e7d533e1cda134f16230425f07ece7cda2894)
    LibreOffice#43 0x7b2918fb7781 in PDFFilter::implExport(com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&) (core-asan/instdir/program/../program/libpdffilterlo.so+0x1a0781) (BuildId: 3e1e7d533e1cda134f16230425f07ece7cda2894)
    LibreOffice#44 0x7b2918fb8c26 in PDFFilter::filter(com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&) (core-asan/instdir/program/../program/libpdffilterlo.so+0x1a1c26) (BuildId: 3e1e7d533e1cda134f16230425f07ece7cda2894)
    LibreOffice#45 0x7f2966849fa0 in SfxObjectShell::ExportTo(SfxMedium&) (core-asan/instdir/program/libsfxlo.so+0x2649fa0) (BuildId: f20a99320ed1b1e19cb532dd5771162fe9df25d6)
    LibreOffice#46 0x7f296683c239 in SfxObjectShell::SaveTo_Impl(SfxMedium&, SfxItemSet const*) (core-asan/instdir/program/libsfxlo.so+0x263c239) (BuildId: f20a99320ed1b1e19cb532dd5771162fe9df25d6)
    LibreOffice#47 0x7f2966851353 in SfxObjectShell::PreDoSaveAs_Impl(rtl::OUString const&, rtl::OUString const&, SfxItemSet const&, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&) (core-asan/instdir/program/libsfxlo.so+0x2651353) (BuildId: f20a99320ed1b1e19cb532dd5771162fe9df25d6)
    LibreOffice#48 0x7f296684e6e2 in SfxObjectShell::CommonSaveAs_Impl(INetURLObject const&, rtl::OUString const&, SfxItemSet&, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&) (core-asan/instdir/program/libsfxlo.so+0x264e6e2) (BuildId: f20a99320ed1b1e19cb532dd5771162fe9df25d6)
    LibreOffice#49 0x7f29667f24ab in SfxObjectShell::APISaveAs_Impl(std::basic_string_view<char16_t, std::char_traits<char16_t> >, SfxItemSet&, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&) (core-asan/instdir/program/libsfxlo.so+0x25f24ab) (BuildId: f20a99320ed1b1e19cb532dd5771162fe9df25d6)
    LibreOffice#50 0x7f29669353f9 in SfxBaseModel::impl_store(rtl::OUString const&, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&, bool) (core-asan/instdir/program/libsfxlo.so+0x27353f9) (BuildId: f20a99320ed1b1e19cb532dd5771162fe9df25d6)
    LibreOffice#51 0x7f29669237ad in SfxBaseModel::storeToURL(rtl::OUString const&, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&) (core-asan/instdir/program/libsfxlo.so+0x27237ad) (BuildId: f20a99320ed1b1e19cb532dd5771162fe9df25d6)
    LibreOffice#52 0x7f296e59ea3d in desktop::DispatchWatcher::executeDispatchRequests(std::__debug::vector<desktop::DispatchWatcher::DispatchRequest, std::allocator<desktop::DispatchWatcher::DispatchRequest> > const&, bool, desktop::DispatchRequestFlags*) (core-asan/instdir/program/libsofficeapp.so+0x39ea3d) (BuildId: 0d1c41096bed89bed335fa78947804c0924ce8ea)
    LibreOffice#53 0x7f296e5d9fae in desktop::RequestHandler::ExecuteCmdLineRequests(desktop::ProcessDocumentsRequest&, bool) (core-asan/instdir/program/libsofficeapp.so+0x3d9fae) (BuildId: 0d1c41096bed89bed335fa78947804c0924ce8ea)
    LibreOffice#54 0x7f296e503193 in desktop::Desktop::OpenClients() (core-asan/instdir/program/libsofficeapp.so+0x303193) (BuildId: 0d1c41096bed89bed335fa78947804c0924ce8ea)
    LibreOffice#55 0x7f296e50005c in desktop::Desktop::OpenClients_Impl(void*) (core-asan/instdir/program/libsofficeapp.so+0x30005c) (BuildId: 0d1c41096bed89bed335fa78947804c0924ce8ea)
    LibreOffice#56 0x7f296e4ffc16 in desktop::Desktop::LinkStubOpenClients_Impl(void*, void*) (core-asan/instdir/program/libsofficeapp.so+0x2ffc16) (BuildId: 0d1c41096bed89bed335fa78947804c0924ce8ea)
    LibreOffice#57 0x7f29552e3410 in Link<void*, void>::Call(void*) const (core-asan/instdir/program/libvcllo.so+0x42e3410) (BuildId: 3cd155f3c9851c1c62b4d2b1959b9b1e4664c2fb)
    LibreOffice#58 0x7f29552db964 in ImplHandleUserEvent(ImplSVEvent*) (core-asan/instdir/program/libvcllo.so+0x42db964) (BuildId: 3cd155f3c9851c1c62b4d2b1959b9b1e4664c2fb)
    LibreOffice#59 0x7f29552e0e3b in ImplWindowFrameProc(vcl::Window*, SalEvent, void const*) (core-asan/instdir/program/libvcllo.so+0x42e0e3b) (BuildId: 3cd155f3c9851c1c62b4d2b1959b9b1e4664c2fb)
    LibreOffice#60 0x7f2956b44430 in SalFrame::CallCallback(SalEvent, void const*) const (core-asan/instdir/program/libvcllo.so+0x5b44430) (BuildId: 3cd155f3c9851c1c62b4d2b1959b9b1e4664c2fb)
    LibreOffice#61 0x7f2956b8d114 in SvpSalInstance::ProcessEvent(SalUserEventList::SalUserEvent) (core-asan/instdir/program/libvcllo.so+0x5b8d114) (BuildId: 3cd155f3c9851c1c62b4d2b1959b9b1e4664c2fb)
    LibreOffice#62 0x7f2955efea9f in SalUserEventList::DispatchUserEvents(bool)::{lambda()LibreOffice#1}::operator()() const (core-asan/instdir/program/libvcllo.so+0x4efea9f) (BuildId: 3cd155f3c9851c1c62b4d2b1959b9b1e4664c2fb)
    LibreOffice#63 0x7f2955eff104 in SalUserEventList::DispatchUserEvents(bool) (core-asan/instdir/program/libvcllo.so+0x4eff104) (BuildId: 3cd155f3c9851c1c62b4d2b1959b9b1e4664c2fb)
    LibreOffice#64 0x7f2956b8e540 in SvpSalInstance::ImplYield(bool, bool) (core-asan/instdir/program/libvcllo.so+0x5b8e540) (BuildId: 3cd155f3c9851c1c62b4d2b1959b9b1e4664c2fb)
    LibreOffice#65 0x7f2956b8edd2 in SvpSalInstance::DoYield(bool, bool) (core-asan/instdir/program/libvcllo.so+0x5b8edd2) (BuildId: 3cd155f3c9851c1c62b4d2b1959b9b1e4664c2fb)
    LibreOffice#66 0x7f2956096112 in ImplYield(bool, bool) (core-asan/instdir/program/libvcllo.so+0x5096112) (BuildId: 3cd155f3c9851c1c62b4d2b1959b9b1e4664c2fb)
    LibreOffice#67 0x7f2956097f83 in Application::Yield() (core-asan/instdir/program/libvcllo.so+0x5097f83) (BuildId: 3cd155f3c9851c1c62b4d2b1959b9b1e4664c2fb)
    LibreOffice#68 0x7f29560953b0 in Application::Execute() (core-asan/instdir/program/libvcllo.so+0x50953b0) (BuildId: 3cd155f3c9851c1c62b4d2b1959b9b1e4664c2fb)
    #69 0x7f296e4fc9e9 in desktop::Desktop::Main() (core-asan/instdir/program/libsofficeapp.so+0x2fc9e9) (BuildId: 0d1c41096bed89bed335fa78947804c0924ce8ea)
    #70 0x7f29560eb3c7 in ImplSVMain() (core-asan/instdir/program/libvcllo.so+0x50eb3c7) (BuildId: 3cd155f3c9851c1c62b4d2b1959b9b1e4664c2fb)
    #71 0x7f29560eb590 in SVMain() (core-asan/instdir/program/libvcllo.so+0x50eb590) (BuildId: 3cd155f3c9851c1c62b4d2b1959b9b1e4664c2fb)
    #72 0x7f296e5ee383 in soffice_main (core-asan/instdir/program/libsofficeapp.so+0x3ee383) (BuildId: 0d1c41096bed89bed335fa78947804c0924ce8ea)
    #73 0x000000201cc6 in sal_main (core-asan/instdir/program/soffice.bin+0x201cc6) (BuildId: 1edea05beb4bcc822dadbcc6f2b2a28fa5ad215b)
    #74 0x000000201cac in main (core-asan/instdir/program/soffice.bin+0x201cac) (BuildId: 1edea05beb4bcc822dadbcc6f2b2a28fa5ad215b)
    #75 0x7f296e011574 in __libc_start_call_main (/lib64/libc.so.6+0x3574) (BuildId: 48c4b9b1efb1df15da8e787f489128bf31893317)
    #76 0x7f296e011627 in __libc_start_main@GLIBC_2.2.5 (/lib64/libc.so.6+0x3627) (BuildId: 48c4b9b1efb1df15da8e787f489128bf31893317)
    #77 0x000000201b64 in _start (core-asan/instdir/program/soffice.bin+0x201b64) (BuildId: 1edea05beb4bcc822dadbcc6f2b2a28fa5ad215b)

0x7c994604b938 is located 56 bytes inside of 696-byte region [0x7c994604b900,0x7c994604bbb8)
freed by thread T0 here:
    #0 0x7f296eae899b in operator delete(void*, unsigned long) (/lib64/libasan.so.8+0xe899b) (BuildId: 0adabddcb77130fc2ea3840d060eb4e8a9ae0c85)
    LibreOffice#1 0x7b2929df5401 in std::__new_allocator<std::_Sp_counted_ptr_inplace<SwParaPortion, std::allocator<void>, (__gnu_cxx::_Lock_policy)2> >::deallocate(std::_Sp_counted_ptr_inplace<SwParaPortion, std::allocator<void>, (__gnu_cxx::_Lock_policy)2>*, unsigned long) /usr/include/c++/15/bits/new_allocator.h:172
    LibreOffice#2 0x7b2929df4edb in std::allocator<std::_Sp_counted_ptr_inplace<SwParaPortion, std::allocator<void>, (__gnu_cxx::_Lock_policy)2> >::deallocate(std::_Sp_counted_ptr_inplace<SwParaPortion, std::allocator<void>, (__gnu_cxx::_Lock_policy)2>*, unsigned long) /usr/include/c++/15/bits/allocator.h:215
    LibreOffice#3 0x7b2929df4edb in std::allocator_traits<std::allocator<std::_Sp_counted_ptr_inplace<SwParaPortion, std::allocator<void>, (__gnu_cxx::_Lock_policy)2> > >::deallocate(std::allocator<std::_Sp_counted_ptr_inplace<SwParaPortion, std::allocator<void>, (__gnu_cxx::_Lock_policy)2> >&, std::_Sp_counted_ptr_inplace<SwParaPortion, std::allocator<void>, (__gnu_cxx::_Lock_policy)2>*, unsigned long) /usr/include/c++/15/bits/alloc_traits.h:649
    LibreOffice#4 0x7b2929df4edb in std::__allocated_ptr<std::allocator<std::_Sp_counted_ptr_inplace<SwParaPortion, std::allocator<void>, (__gnu_cxx::_Lock_policy)2> > >::~__allocated_ptr() /usr/include/c++/15/bits/allocated_ptr.h:74
    LibreOffice#5 0x7b2929df5647 in std::_Sp_counted_ptr_inplace<SwParaPortion, std::allocator<void>, (__gnu_cxx::_Lock_policy)2>::_M_destroy() /usr/include/c++/15/bits/shared_ptr_base.h:625
    LibreOffice#6 0x7b29283b09bd in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release() /usr/include/c++/15/bits/shared_ptr_base.h:346
    LibreOffice#7 0x7b29283b4dd1 in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count() /usr/include/c++/15/bits/shared_ptr_base.h:1069
    LibreOffice#8 0x7b2929c05619 in std::__shared_ptr<SwParaPortion, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr() /usr/include/c++/15/bits/shared_ptr_base.h:1531
    LibreOffice#9 0x7b2929df424e in std::__shared_ptr<SwParaPortion, (__gnu_cxx::_Lock_policy)2>::reset() /usr/include/c++/15/bits/shared_ptr_base.h:1649
    LibreOffice#10 0x7b2929df3f4f in SwTextFrame::ClearPara() core-asan/sw/source/core/text/txtcache.cxx:41
    LibreOffice#11 0x7b2929e2d129 in SwTextFrame::Init() core-asan/sw/source/core/text/txtfrm.cxx:754
    LibreOffice#12 0x7b2929e45d75 in SwTextFrame::Prepare(PrepareHint, void const*, bool) core-asan/sw/source/core/text/txtfrm.cxx:3358
    LibreOffice#13 0x7b29297e0987 in SwFlyInContentFrame::NotifyBackground(SwPageFrame*, SwRect const&, PrepareHint) core-asan/sw/source/core/layout/flyincnt.cxx:230
    LibreOffice#14 0x7b2929805046 in Notify(SwFlyFrame*, SwPageFrame*, SwRect const&, SwRect const*) core-asan/sw/source/core/layout/frmtool.cxx:3301
    LibreOffice#15 0x7b29297f0a5a in SwFlyNotify::ImplDestroy() core-asan/sw/source/core/layout/frmtool.cxx:696
    LibreOffice#16 0x7b29297f1083 in SwFlyNotify::~SwFlyNotify() core-asan/sw/source/core/layout/frmtool.cxx:798
    LibreOffice#17 0x7b29297e11f0 in SwFlyInContentFrame::MakeAll(OutputDevice*) core-asan/sw/source/core/layout/flyincnt.cxx:316
    LibreOffice#18 0x7b29297578e2 in SwFrame::PrepareMake(OutputDevice*) core-asan/sw/source/core/layout/calcmove.cxx:396
    LibreOffice#19 0x7b2929a082af in SwFrame::Calc(OutputDevice*) const core-asan/sw/source/core/layout/trvlfrm.cxx:1858
    LibreOffice#20 0x7b29297bc028 in SwFlyFrame::Calc(OutputDevice*) const core-asan/sw/source/core/layout/fly.cxx:3436
    LibreOffice#21 0x7b29297e09cf in SwFlyInContentFrame::GetRelPos() const core-asan/sw/source/core/layout/flyincnt.cxx:235
    LibreOffice#22 0x7b2929cd7309 in SwTextFormatter::NewFlyCntPortion(SwTextFormatInfo&, SwTextAttr*) const core-asan/sw/source/core/text/itrform2.cxx:3213
    LibreOffice#23 0x7b2929e02267 in SwTextFormatter::NewExtraPortion(SwTextFormatInfo&) core-asan/sw/source/core/text/txtfld.cxx:285
    LibreOffice#24 0x7b2929cccd9d in SwTextFormatter::NewPortion(SwTextFormatInfo&, std::optional<o3tl::strong_int<int, Tag_TextFrameIndex> >) core-asan/sw/source/core/text/itrform2.cxx:1886
    LibreOffice#25 0x7b2929cbf0a3 in SwTextFormatter::BuildPortions(SwTextFormatInfo&) core-asan/sw/source/core/text/itrform2.cxx:440
    LibreOffice#26 0x7b2929ccec48 in SwTextFormatter::FormatLine(o3tl::strong_int<int, Tag_TextFrameIndex>) core-asan/sw/source/core/text/itrform2.cxx:2102
    LibreOffice#27 0x7b2929c10fac in SwTextFrame::FormatLine(SwTextFormatter&, bool) core-asan/sw/source/core/text/frmform.cxx:1458
    LibreOffice#28 0x7b2929c14223 in SwTextFrame::Format_(SwTextFormatter&, SwTextFormatInfo&, bool) core-asan/sw/source/core/text/frmform.cxx:1822
    LibreOffice#29 0x7b2929e4755c in SwTestFormat::SwTestFormat(SwTextFrame*, SwFrame const*, long) core-asan/sw/source/core/text/txtfrm.cxx:3453
    LibreOffice#30 0x7b2929e47e1d in SwTextFrame::TestFormat(SwFrame const*, long&, bool&) core-asan/sw/source/core/text/txtfrm.cxx:3483
    LibreOffice#31 0x7b29297645a7 in SwContentFrame::WouldFit_(long, SwLayoutFrame*, bool, bool) core-asan/sw/source/core/layout/calcmove.cxx:2192

Change-Id: I291348ddbaaf0e9e8255e2fca5842dc2d2bfe733
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/196426
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
Tested-by: Jenkins
bise86 pushed a commit to bise86/LibreOffice that referenced this pull request Sep 29, 2026
As is the case in other weld methods, signals about
ComboBox changes are not supposed to be
emitted when the change happens programatically
and not by manual user interaction.

Therefore, disable notify events in ComboBox::insert
by renaming the actual toolkit implementations to
do_insert and making the weld::ComboBox::insert
base class method block signals while calling
the virtual methods.

See also e.g. weld::TreeView::insert which
uses the same approach.

The GTK implementation was already blocking signals
because it calls GtkInstanceComboBox::insert_including_mru
which in turn blocks signals during insertion.

This fixes a nullptr deref seen with the qt6 VCL
plugin and env var SAL_VCL_QT_USE_WELDED_WIDGETS=1
in a WIP branch to declare support for native widgets
in the dialog triggered as follows:

* start Writer
* "Insert" -> "Chart"
* right-click on the X axes to open the context menu
* activate the "Format Axis" context menu entry

Backtrace:

    Thread 1 "soffice.bin" received signal SIGSEGV, Segmentation fault.
    0x00007ffff2525a54 in SvxNumberFormatShell::LanguageChanged (this=0x0, eLangType=..., rFmtSelPos=@0x7fffffff79ee: 0, rFmtEntries=std::__debug::vector of length 0, capacity 0)
        at /home/michi/development/git/libreoffice/svx/source/items/numfmtsh.cxx:190
    190         eCurLanguage = eLangType;
    (gdb) bt
    #0  0x00007ffff2525a54 in SvxNumberFormatShell::LanguageChanged (this=0x0, eLangType=..., rFmtSelPos=@0x7fffffff79ee: 0, rFmtEntries=std::__debug::vector of length 0, capacity 0)
        at /home/michi/development/git/libreoffice/svx/source/items/numfmtsh.cxx:190
    LibreOffice#1  0x00007fff8a6c5bfc in SvxNumberFormatTabPage::UpdateFormatListBox_Impl (this=0x5555606d5ea0, bCat=false, bUpdateEdit=true) at /home/michi/development/git/libreoffice/cui/source/tabpages/numfmt.cxx:990
    LibreOffice#2  0x00007fff8a6caa4a in SvxNumberFormatTabPage::SelFormatHdl_Impl (this=0x5555606d5ea0, pLb=0x555560788f98) at /home/michi/development/git/libreoffice/cui/source/tabpages/numfmt.cxx:1240
    LibreOffice#3  0x00007fff8a6cab98 in SvxNumberFormatTabPage::SelFormatListBoxHdl_Impl (this=0x5555606d5ea0, rLb=...) at /home/michi/development/git/libreoffice/cui/source/tabpages/numfmt.cxx:1131
    LibreOffice#4  0x00007fff8a6c43bd in SvxNumberFormatTabPage::LinkStubSelFormatListBoxHdl_Impl (instance=0x5555606d5ea0, data=...) at /home/michi/development/git/libreoffice/cui/source/tabpages/numfmt.cxx:1129
    LibreOffice#5  0x00007ffff115bb01 in Link<weld::ComboBox&, void>::Call (this=0x555560788f18, data=...) at include/tools/link.hxx:105
    LibreOffice#6  0x00007ffff114e85b in SvxLanguageBox::ChangeHdl (this=0x555560788f10, rControl=...) at /home/michi/development/git/libreoffice/svx/source/dialog/langbox.cxx:534
    LibreOffice#7  0x00007ffff114e51d in SvxLanguageBox::LinkStubChangeHdl (instance=0x555560788f10, data=...) at /home/michi/development/git/libreoffice/svx/source/dialog/langbox.cxx:464
    LibreOffice#8  0x00007fffe58a4371 in Link<weld::ComboBox&, void>::Call (this=0x555560789150, data=...) at include/tools/link.hxx:105
    LibreOffice#9  0x00007fffe58a3f88 in weld::ComboBox::signal_changed (this=0x555560789108) at include/vcl/weld/ComboBox.hxx:63
    LibreOffice#10 0x00007fffe58988dd in QtInstanceComboBox::signalChanged (this=0x555560788f60) at vcl/qt6/../qt5/QtInstanceComboBox.cxx:432
    LibreOffice#11 0x00007fffe58a4791 in QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QtInstanceComboBox::*)()>::call(void (QtInstanceComboBox::*)(), QtInstanceComboBox*, void**)::{lambda()LibreOffice#1}::operator()() const (this=0x7fffffff7e10) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:127
    LibreOffice#12 0x00007fffe58a46c9 in QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QtInstanceComboBox::*)()>::call(void (QtInstanceComboBox::*)(), QtInstanceComboBox*, void**)::{lambda()LibreOffice#1}>(void**, QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QtInstanceComboBox::*)()>::call(void (QtInstanceComboBox::*)(), QtInstanceComboBox*, void**)::{lambda()LibreOffice#1}&&) (args=0x7fffffff81f0, fn=...) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:65
    LibreOffice#13 0x00007fffe58a45fb in QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QtInstanceComboBox::*)()>::call(void (QtInstanceComboBox::*)(), QtInstanceComboBox*, void**)
        (f=(void (QtInstanceComboBox::*)(QtInstanceComboBox * const)) 0x7fffe58988a0 <QtInstanceComboBox::signalChanged()>, o=0x555560788f60, arg=0x7fffffff81f0)
        at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:126
    LibreOffice#14 0x00007fffe58a457d in QtPrivate::FunctionPointer<void (QtInstanceComboBox::*)()>::call<QtPrivate::List<>, void>(void (QtInstanceComboBox::*)(), QtInstanceComboBox*, void**)
        (f=(void (QtInstanceComboBox::*)(QtInstanceComboBox * const)) 0x7fffe58988a0 <QtInstanceComboBox::signalChanged()>, o=0x555560788f60, arg=0x7fffffff81f0)
        at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:174
    LibreOffice#15 0x00007fffe58a44a6 in QtPrivate::QCallableObject<void (QtInstanceComboBox::*)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*)
        (which=1, this_=0x5555607893d0, r=0x555560788f60, a=0x7fffffff81f0, ret=0x0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:545
    LibreOffice#16 0x00007fffe46ea402 in QtPrivate::QSlotObjectBase::call (this=0x5555607893d0, r=0x555560788f60, a=0x7fffffff81f0) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:461
    LibreOffice#17 0x00007fffe491b872 in doActivate<false> (sender=0x55556077ac40, signal_index=13, argv=0x7fffffff81f0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4371
    LibreOffice#18 0x00007fffe4911c63 in QMetaObject::activate (sender=0x55556077ac40, m=0x7fffe33803b8 <QComboBox::staticMetaObject>, local_signal_index=6, argv=0x7fffffff81f0)
        at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4431
    LibreOffice#19 0x00007fffe28859eb in QMetaObject::activate<void, QString> (sender=0x55556077ac40, mo=0x7fffe33803b8 <QComboBox::staticMetaObject>, local_signal_index=6, ret=0x0, args=...) at qtbase/src/corelib/kernel/qobjectdefs.h:321
    LibreOffice#20 0x00007fffe2a40f41 in QComboBox::currentTextChanged (this=0x55556077ac40, _t1=...) at qtbase/src/widgets/Widgets_autogen/include/moc_qcombobox.cpp:376
    LibreOffice#21 0x00007fffe2a3e3ad in QComboBoxPrivate::updateCurrentText (this=0x55556077c400, text=...) at /home/michi/development/git/qt5/qtbase/src/widgets/widgets/qcombobox.cpp:3210
    LibreOffice#22 0x00007fffe2a3e68e in QComboBoxPrivate::emitCurrentIndexChanged (this=0x55556077c400, index=...) at /home/michi/development/git/qt5/qtbase/src/widgets/widgets/qcombobox.cpp:1695
    LibreOffice#23 0x00007fffe2a3973b in QComboBoxPrivate::setCurrentIndex (this=0x55556077c400, mi=...) at /home/michi/development/git/qt5/qtbase/src/widgets/widgets/qcombobox.cpp:2480
    LibreOffice#24 0x00007fffe2a38b6a in QComboBox::setCurrentIndex (this=0x55556077ac40, index=0) at /home/michi/development/git/qt5/qtbase/src/widgets/widgets/qcombobox.cpp:2427
    LibreOffice#25 0x00007fffe2a3e550 in QComboBoxPrivate::rowsInserted (this=0x55556077c400, parent=..., start=0, end=0) at /home/michi/development/git/qt5/qtbase/src/widgets/widgets/qcombobox.cpp:1399
    LibreOffice#26 0x00007fffe2a57482 in QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul, 1ul, 2ul>, QtPrivate::List<QModelIndex const&, int, int>, void, void (QComboBoxPrivate::*)(QModelIndex const&, int, int)>::call(void (QComboBoxPrivate::*)(QModelIndex const&, int, int), QComboBoxPrivate*, void**)::{lambda()LibreOffice#1}::operator()() const (this=0x7fffffff85c0) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:127
    LibreOffice#27 0x00007fffe2a573dd in QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul, 1ul, 2ul>, QtPrivate::List<QModelIndex const&, int, int>, void, void (QComboBoxPrivate::*)(QModelIndex const&, int, int)>::call(void (QComboBoxPrivate::*)(QModelIndex const&, int, int), QComboBoxPrivate*, void**)::{lambda()LibreOffice#1}>(void**, QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul, 1ul, 2ul>, QtPrivate::List<QModelIndex const&, int, int>, void, void (QComboBoxPrivate::*)(QModelIndex const&, int, int)>::call(void (QComboBoxPrivate::*)(QModelIndex const&, int, int), QComboBoxPrivate*, void**)::{lambda()LibreOffice#1}&&) (args=0x7fffffff89c0, fn=...)
        at qtbase/src/corelib/kernel/qobjectdefs_impl.h:65
    LibreOffice#28 0x00007fffe2a57397 in QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul, 1ul, 2ul>, QtPrivate::List<QModelIndex const&, int, int>, void, void (QComboBoxPrivate::*)(QModelIndex const&, int, int)>::call
        (f=(void (QComboBoxPrivate::*)(QComboBoxPrivate * const, const QModelIndex &, int, int)) 0x7fffe2a3e3c0 <QComboBoxPrivate::rowsInserted(QModelIndex const&, int, int)>, o=0x55556077c400, arg=0x7fffffff89c0)
        at qtbase/src/corelib/kernel/qobjectdefs_impl.h:126
    LibreOffice#29 0x00007fffe2a57301 in QtPrivate::FunctionPointer<void (QComboBoxPrivate::*)(QModelIndex const&, int, int)>::call<QtPrivate::List<QModelIndex const&, int, int>, void>
        (f=(void (QComboBoxPrivate::*)(QComboBoxPrivate * const, const QModelIndex &, int, int)) 0x7fffe2a3e3c0 <QComboBoxPrivate::rowsInserted(QModelIndex const&, int, int)>, o=0x55556077c400, arg=0x7fffffff89c0)
        at qtbase/src/corelib/kernel/qobjectdefs_impl.h:174
    LibreOffice#30 0x00007fffe2a57230 in QtPrivate::QPrivateSlotObject<void (QComboBoxPrivate::*)(QModelIndex const&, int, int), QtPrivate::List<QModelIndex const&, int, int>, void>::impl
        (which=1, this_=0x55556077cd80, r=0x55556077ac40, a=0x7fffffff89c0, ret=0x0) at qtbase/src/corelib/kernel/qobject_p.h:272
    LibreOffice#31 0x00007fffe46ea402 in QtPrivate::QSlotObjectBase::call (this=0x55556077cd80, r=0x55556077ac40, a=0x7fffffff89c0) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:461
    LibreOffice#32 0x00007fffe491b872 in doActivate<false> (sender=0x555560766e90, signal_index=13, argv=0x7fffffff89c0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4371
    LibreOffice#33 0x00007fffe4911c63 in QMetaObject::activate (sender=0x555560766e90, m=0x7fffe527bdf0 <QAbstractItemModel::staticMetaObject>, local_signal_index=10, argv=0x7fffffff89c0)
        at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4431
    LibreOffice#34 0x00007fffe4d77bf5 in QMetaObject::activate<void, QModelIndex, int, int, QAbstractItemModel::QPrivateSignal>
        (sender=0x555560766e90, mo=0x7fffe527bdf0 <QAbstractItemModel::staticMetaObject>, local_signal_index=10, ret=0x0, args=..., args=@0x7fffffff8a30: 0, args=@0x7fffffff8a2c: 0, args=...) at qtbase/src/corelib/kernel/qobjectdefs.h:321
    LibreOffice#35 0x00007fffe4d6b8ca in QAbstractItemModel::rowsInserted (this=0x555560766e90, _t1=..., _t2=0, _t3=0, _t4=...) at qtbase/src/corelib/Core_autogen/include/moc_qabstractitemmodel.cpp:690
    LibreOffice#36 0x00007fffe4d6b846 in QAbstractItemModel::endInsertRows (this=0x555560766e90) at /home/michi/development/git/qt5/qtbase/src/corelib/itemmodels/qabstractitemmodel.cpp:2922
    LibreOffice#37 0x00007fffe3c56a98 in QStandardItemModelPrivate::rowsInserted (this=0x555560775680, parent=0x55556077c9b0, row=0, count=1) at /home/michi/development/git/qt5/qtbase/src/gui/itemmodels/qstandarditemmodel.cpp:625
    LibreOffice#38 0x00007fffe3c56d93 in QStandardItemPrivate::insertRows (this=0x55556077c010, row=0, count=1, items=...) at /home/michi/development/git/qt5/qtbase/src/gui/itemmodels/qstandarditemmodel.cpp:497
    LibreOffice#39 0x00007fffe3c58bdd in QStandardItem::insertRow (this=0x55556077c9b0, row=0, items=...) at /home/michi/development/git/qt5/qtbase/src/gui/itemmodels/qstandarditemmodel.cpp:1601
    LibreOffice#40 0x00007fffe3c5aa3f in QStandardItemModel::insertRow (this=0x555560766e90, row=0, items=...) at /home/michi/development/git/qt5/qtbase/src/gui/itemmodels/qstandarditemmodel.cpp:2680
    LibreOffice#41 0x00007fffe2a4b5ea in QStandardItemModel::insertRow (this=0x555560766e90, arow=0, aitem=0x55556078ad80) at qtbase/src/gui/itemmodels/qstandarditemmodel.h:401
    LibreOffice#42 0x00007fffe2a419f7 in QComboBox::insertItem (this=0x55556077ac40, index=0, icon=..., text=..., userData=...) at /home/michi/development/git/qt5/qtbase/src/widgets/widgets/qcombobox.cpp:2593
    LibreOffice#43 0x00007fffe57c1ea7 in QComboBox::insertItem (this=0x55556077ac40, aindex=0, atext=..., auserData=...) at /home/michi/development/git/qt5/qtbase/src/widgets/widgets/qcombobox.h:228
    LibreOffice#44 0x00007fffe589ccd3 in QtInstanceComboBox::insert(int, rtl::OUString const&, rtl::OUString const*, rtl::OUString const*, VirtualDevice*)::$_0::operator()() const (this=0x55556078b1a0) at vcl/qt6/../qt5/QtInstanceComboBox.cxx:45
    LibreOffice#45 0x00007fffe589cba5 in std::__invoke_impl<void, QtInstanceComboBox::insert(int, rtl::OUString const&, rtl::OUString const*, rtl::OUString const*, VirtualDevice*)::$_0&>(std::__invoke_other, QtInstanceComboBox::insert(int, rtl::OUString const&, rtl::OUString const*, rtl::OUString const*, VirtualDevice*)::$_0&) (__f=...) at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/invoke.h:63
    LibreOffice#46 0x00007fffe589cb65 in std::__invoke_r<void, QtInstanceComboBox::insert(int, rtl::OUString const&, rtl::OUString const*, rtl::OUString const*, VirtualDevice*)::$_0&>(QtInstanceComboBox::insert(int, rtl::OUString const&, rtl::OUString const*, rtl::OUString const*, VirtualDevice*)::$_0&) (__fn=...) at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/invoke.h:113
    LibreOffice#47 0x00007fffe589ca4d in std::_Function_handler<void(), QtInstanceComboBox::insert(int, rtl::OUString const&, rtl::OUString const*, rtl::OUString const*, VirtualDevice*)::$_0>::_M_invoke (__functor=...)
        at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/std_function.h:292
    LibreOffice#48 0x00007fffe584803e in std::function<void()>::operator() (this=0x7fffffff9210) at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/std_function.h:593
    LibreOffice#49 0x00007fffe583f17f in QtInstance::RunInMainThread (this=0x5555555f8540, func=...) at vcl/qt6/../qt5/QtInstance.cxx:206
    LibreOffice#50 0x00007fffe5898fcf in QtInstanceComboBox::insert (this=0x555560788f60, nPos=0, rStr="Default - English (UK)", pId=0x7fffffff9558, pIconName=0x0, pImageSurface=0x0) at vcl/qt6/../qt5/QtInstanceComboBox.cxx:37
    LibreOffice#51 0x00007ffff115d8fb in weld::ComboBox::insert (this=0x555560789108, pos=-1, rItem=...) at include/vcl/weld/ComboBox.hxx:89
    LibreOffice#52 0x00007ffff115af02 in weld::ComboBox::append (this=0x555560789108, rItem=...) at include/vcl/weld/ComboBox.hxx:96
    LibreOffice#53 0x00007ffff114d012 in SvxLanguageBox::SetLanguageList
        (this=0x555560788f10, nLangList=(SvxLanguageListFlags::ALL | SvxLanguageListFlags::ONLY_KNOWN), bHasLangNone=false, bLangNoneIsLangAll=false, bCheckSpellAvail=false, bDefaultLangExist=true, eDefaultLangType=..., nDefaultType=4)
        at /home/michi/development/git/libreoffice/svx/source/dialog/langbox.cxx:323
    LibreOffice#54 0x00007fff8a6c405e in SvxNumberFormatTabPage::Init_Impl (this=0x5555606d5ea0) at /home/michi/development/git/libreoffice/cui/source/tabpages/numfmt.cxx:318
    LibreOffice#55 0x00007fff8a6c2e3d in SvxNumberFormatTabPage::SvxNumberFormatTabPage
        (this=0x5555606d5ea0, pPage=0x555560718098, pController=0x55555a7234c0, rCoreAttrs=SfxItemSet of pool 0x55555b593c40 with parent 0x0 and Which ranges: [(17, 18), (40, 70), (1000, 1012), (4021, 4079), (10085, 10085), (10932, 10932), (11090, 11090)] = {...}) at /home/michi/development/git/libreoffice/cui/source/tabpages/numfmt.cxx:247
    LibreOffice#56 0x00007fff8a6cc2ee in std::make_unique<SvxNumberFormatTabPage, weld::Container*&, weld::DialogController*&, SfxItemSet const&>
        (__args=@0x7fffffffa160: 0x555560718098, __args=@0x7fffffffa158: 0x55555a7234c0, __args=SfxItemSet of pool 0x55555b593c40 with parent 0x0 and Which ranges: [(17, 18), (40, 70), (1000, 1012), (4021, 4079), (10085, 10085), (10932, 10932), (11090, 11090)] = {...}) at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/unique_ptr.h:1084
    LibreOffice#57 0x00007fff8a6c46d9 in SvxNumberFormatTabPage::Create (pPage=0x555560718098, pController=0x55555a7234c0, rAttrSet=0x55555b5c41f0) at /home/michi/development/git/libreoffice/cui/source/tabpages/numfmt.cxx:326
    LibreOffice#58 0x00007ffff399ed1d in SfxTabDialogController::CreatePages (this=0x55555a7234c0) at /home/michi/development/git/libreoffice/sfx2/source/dialog/tabdlg.cxx:946
    LibreOffice#59 0x00007ffff399fd19 in SfxTabDialogController::Start_Impl (this=0x55555a7234c0) at /home/michi/development/git/libreoffice/sfx2/source/dialog/tabdlg.cxx:1034
    LibreOffice#60 0x00007ffff39a011e in SfxTabDialogController::runAsync (rController=std::shared_ptr<SfxTabDialogController> (use count 3, weak count 1) = {...}, rFunc=...)
        at /home/michi/development/git/libreoffice/sfx2/source/dialog/tabdlg.cxx:1091
    LibreOffice#61 0x00007fff8b0da287 in chart::ChartController::executeDlg_ObjectProperties_withUndoGuard
        (this=0x55555c98cd40, xUndoGuard=std::shared_ptr<chart::UndoGuard> (empty) = {...}, rObjectCID="CID/D=0:CS=0:Axis=0,0", bSuccessOnUnchanged=false)
        at /home/michi/development/git/libreoffice/chart2/source/controller/main/ChartController_Properties.cxx:778
    LibreOffice#62 0x00007fff8b0d94fc in chart::ChartController::executeDlg_ObjectProperties (this=0x55555c98cd40, rSelectedObjectCID="CID/D=0:CS=0:Axis=0,0")
        at /home/michi/development/git/libreoffice/chart2/source/controller/main/ChartController_Properties.cxx:695
    LibreOffice#63 0x00007fff8b0d7368 in chart::ChartController::executeDispatch_FormatObject (this=0x55555c98cd40, rDispatchCommand=u"FormatAxis")
        at /home/michi/development/git/libreoffice/chart2/source/controller/main/ChartController_Properties.cxx:651
    LibreOffice#64 0x00007fff8b0a72a3 in chart::ChartController::dispatch (this=0x55555c98cd40, rURL=..., rArgs=empty uno::Sequence) at /home/michi/development/git/libreoffice/chart2/source/controller/main/ChartController.cxx:1226
    LibreOffice#65 0x00007fff8b1512fc in chart::ControllerCommandDispatch::dispatch (this=0x55555b6ae620, URL=..., Arguments=empty uno::Sequence)
        at /home/michi/development/git/libreoffice/chart2/source/controller/main/ControllerCommandDispatch.cxx:933
    LibreOffice#66 0x00007ffff4b03874 in framework::(anonymous namespace)::AsyncMenuExecute (data=0x55555b573710) at /home/michi/development/git/libreoffice/framework/source/uielement/menubarmanager.cxx:793
    LibreOffice#67 0x00007fffedc46db1 in Link<void*, void>::Call (this=0x55555b574058, data=0x55555b573710) at include/tools/link.hxx:105
    LibreOffice#68 0x00007fffedc426d1 in ImplHandleUserEvent (pSVEvent=0x55555b574050) at /home/michi/development/git/libreoffice/vcl/source/window/winproc.cxx:2314
    #69 0x00007fffedc3f5ff in ImplWindowFrameProc (_pWindow=0x555556d919d0, nEvent=SalEvent::UserEvent, pEvent=0x55555b574050) at /home/michi/development/git/libreoffice/vcl/source/window/winproc.cxx:2871
    #70 0x00007fffe582034c in SalFrame::CallCallback (this=0x555556949a50, nEvent=SalEvent::UserEvent, pEvent=0x55555b574050) at vcl/inc/salframe.hxx:310
    #71 0x00007fffe58421df in QtInstance::ProcessEvent (this=0x5555555f8540, aEvent=...) at vcl/qt6/../qt5/QtInstance.cxx:600
    #72 0x00007fffee22366d in SalUserEventList::DispatchUserEvents(bool)::$_0::operator()() const (this=0x7fffffffb990) at /home/michi/development/git/libreoffice/vcl/source/app/salusereventlist.cxx:119
    #73 0x00007fffee22353b in SalUserEventList::DispatchUserEvents (this=0x5555555f85b0, bHandleAllCurrentEvents=false) at /home/michi/development/git/libreoffice/vcl/source/app/salusereventlist.cxx:120
    #74 0x00007fffe583e921 in QtInstance::ImplYield (this=0x5555555f8540, bWait=true, bHandleAllCurrentEvents=false) at vcl/qt6/../qt5/QtInstance.cxx:496
    #75 0x00007fffe5841da1 in QtInstance::DoYield (this=0x5555555f8540, bWait=true, bHandleAllCurrentEvents=false) at vcl/qt6/../qt5/QtInstance.cxx:518
    #76 0x00007fffee2ee966 in InnerYield (i_bWait=true, i_bAllEvents=false) at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:389
    #77 0x00007fffee2ee1ef in Application::Yield () at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:502
    #78 0x00007fffee2edfd0 in Application::Execute () at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:364
    #79 0x00007ffff7b228b5 in desktop::Desktop::Main (this=0x7fffffffd540) at /home/michi/development/git/libreoffice/desktop/source/app/app.cxx:1681
    #80 0x00007fffee3179d6 in ImplSVMain () at /home/michi/development/git/libreoffice/vcl/source/app/svmain.cxx:230
    #81 0x00007fffee3194f9 in SVMain () at /home/michi/development/git/libreoffice/vcl/source/app/svmain.cxx:248
    #82 0x00007ffff7b9c86a in soffice_main () at /home/michi/development/git/libreoffice/desktop/source/app/sofficemain.cxx:122
    #83 0x0000555555555a2d in sal_main () at /home/michi/development/git/libreoffice/desktop/source/app/main.c:51
    #84 0x0000555555555a07 in main (argc=2, argv=0x7fffffffd748) at /home/michi/development/git/libreoffice/desktop/source/app/main.c:49

Change-Id: I5ecf1c0e0f60b5f215bb21894e98f93ce4516e07
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/197468
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
bise86 pushed a commit to bise86/LibreOffice that referenced this pull request Sep 29, 2026
... and position for each document"

The changes to LoadEnv in

    commit 8ce2cf3
    Date:   Mon May 12 01:29:55 2025 +0700

        tdf#41777 Add window size and position for each document

to create new frames when loading existing documents from
the start center and close the backing window cause
crashes for the tdf#170399 scenario of starting the template manager
from the start center and then editing a template by selecting
the "Edit" entry from its context menu.

Revert the changes to that class for now, to fix the crashes.

In a quick test with the gen VCL plugin, this causes documents
opened from the start center to no longer be restored in the
position that they were in previously, while opening documents
directly (i.e. not from start center) still results in them
getting restored at the previous location. (Tested with two
different documents that were saved and closed in different
locations on the screen and both were restored at their
original location.)

This partially reverts commit 8ce2cf3.

Backtrace for the gen VCL plugin without this commit in place:

    warn:legacy.osl:835647:835647:vcl/source/window/window.cxx:307: Window ( 14VclDrawingArea()) with live SystemWindows destroyed:  18MenuFloatingWindow()
    Window ( 14VclDrawingArea()) with live SystemWindows destroyed:  18MenuFloatingWindow()

    Thread 1 "soffice.bin" received signal SIGABRT, Aborted.
    __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44
    ⚠ warning: 44  ./nptl/pthread_kill.c: No such file or directory
    (gdb) bt
    #0  __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44
    LibreOffice#1  0x00007ffff769749f in __pthread_kill_internal (threadid=<optimized out>, signo=6) at ./nptl/pthread_kill.c:89
    LibreOffice#2  0x00007ffff7640942 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
    LibreOffice#3  0x00007ffff76284ac in __GI_abort () at ./stdlib/abort.c:77
    LibreOffice#4  0x00007fffee2339db in SalAbort (rErrorText="Window ( 14VclDrawingArea()) with live SystemWindows destroyed:  18MenuFloatingWindow()", bDumpCore=true) at /home/michi/development/git/libreoffice/vcl/source/app/salplug.cxx:403
    LibreOffice#5  0x00007fffee2ff4b1 in Application::Abort (rErrorText="Window ( 14VclDrawingArea()) with live SystemWindows destroyed:  18MenuFloatingWindow()") at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:300
    LibreOffice#6  0x00007fffedc25c54 in vcl::Window::dispose (this=0x5555573055d0) at /home/michi/development/git/libreoffice/vcl/source/window/window.cxx:308
    LibreOffice#7  0x00007fffedc9e1c6 in Control::dispose (this=0x5555573055d0) at /home/michi/development/git/libreoffice/vcl/source/control/ctrl.cxx:62
    LibreOffice#8  0x00007fffedea0d53 in VclReferenceBase::disposeOnce (this=0x555557305890) at /home/michi/development/git/libreoffice/vcl/source/outdev/vclreferencebase.cxx:38
    LibreOffice#9  0x00007fffefd29a75 in VclPtr<vcl::Window>::disposeAndClear (this=0x7ffffffe72d0) at include/vcl/vclptr.hxx:208
    LibreOffice#10 0x00007ffff0069f57 in UnoWrapper::WindowDestroyed (this=0x5555568aaf90, pWindow=0x555557168d30) at /home/michi/development/git/libreoffice/toolkit/source/helper/unowrapper.cxx:250
    LibreOffice#11 0x00007fffedc24eca in vcl::Window::dispose (this=0x555557168d30) at /home/michi/development/git/libreoffice/vcl/source/window/window.cxx:217
    LibreOffice#12 0x00007fffedea0d53 in VclReferenceBase::disposeOnce (this=0x555557168d80) at /home/michi/development/git/libreoffice/vcl/source/outdev/vclreferencebase.cxx:38
    LibreOffice#13 0x00007fffefd29a75 in VclPtr<vcl::Window>::disposeAndClear (this=0x7ffffffe8798) at include/vcl/vclptr.hxx:208
    LibreOffice#14 0x00007fffefd1c382 in VCLXWindow::dispose (this=0x5555577d6d80) at /home/michi/development/git/libreoffice/toolkit/source/awt/vclxwindow.cxx:905
    LibreOffice#15 0x00007ffff0069ec2 in UnoWrapper::WindowDestroyed (this=0x5555568aaf90, pWindow=0x5555573c4dd0) at /home/michi/development/git/libreoffice/toolkit/source/helper/unowrapper.cxx:244
    LibreOffice#16 0x00007fffedc24eca in vcl::Window::dispose (this=0x5555573c4dd0) at /home/michi/development/git/libreoffice/vcl/source/window/window.cxx:217
    LibreOffice#17 0x00007fffedafd800 in VclScrolledWindow::dispose (this=0x5555573c4dd0) at /home/michi/development/git/libreoffice/vcl/source/window/layout.cxx:1926
    LibreOffice#18 0x00007fffedea0d53 in VclReferenceBase::disposeOnce (this=0x5555573c4e48) at /home/michi/development/git/libreoffice/vcl/source/outdev/vclreferencebase.cxx:38
    LibreOffice#19 0x00007fffefd29a75 in VclPtr<vcl::Window>::disposeAndClear (this=0x7ffffffe9eb8) at include/vcl/vclptr.hxx:208
    LibreOffice#20 0x00007fffefd1c382 in VCLXWindow::dispose (this=0x55555788b020) at /home/michi/development/git/libreoffice/toolkit/source/awt/vclxwindow.cxx:905
    LibreOffice#21 0x00007ffff0069ec2 in UnoWrapper::WindowDestroyed (this=0x5555568aaf90, pWindow=0x555557722300) at /home/michi/development/git/libreoffice/toolkit/source/helper/unowrapper.cxx:244
    LibreOffice#22 0x00007fffedc24eca in vcl::Window::dispose (this=0x555557722300) at /home/michi/development/git/libreoffice/vcl/source/window/window.cxx:217
    LibreOffice#23 0x00007fffedea0d53 in VclReferenceBase::disposeOnce (this=0x555557722350) at /home/michi/development/git/libreoffice/vcl/source/outdev/vclreferencebase.cxx:38
    LibreOffice#24 0x00007fffefd29a75 in VclPtr<vcl::Window>::disposeAndClear (this=0x7ffffffeb5b8) at include/vcl/vclptr.hxx:208
    LibreOffice#25 0x00007fffefd1c382 in VCLXWindow::dispose (this=0x5555577a9df0) at /home/michi/development/git/libreoffice/toolkit/source/awt/vclxwindow.cxx:905
    LibreOffice#26 0x00007ffff0069ec2 in UnoWrapper::WindowDestroyed (this=0x5555568aaf90, pWindow=0x55555772fe50) at /home/michi/development/git/libreoffice/toolkit/source/helper/unowrapper.cxx:244
    LibreOffice#27 0x00007fffedc24eca in vcl::Window::dispose (this=0x55555772fe50) at /home/michi/development/git/libreoffice/vcl/source/window/window.cxx:217
    LibreOffice#28 0x00007fffedafb566 in VclFrame::dispose (this=0x55555772fe50) at /home/michi/development/git/libreoffice/vcl/source/window/layout.cxx:1493
    LibreOffice#29 0x00007fffedea0d53 in VclReferenceBase::disposeOnce (this=0x55555772fea8) at /home/michi/development/git/libreoffice/vcl/source/outdev/vclreferencebase.cxx:38
    LibreOffice#30 0x00007fffefd29a75 in VclPtr<vcl::Window>::disposeAndClear (this=0x7ffffffeccd8) at include/vcl/vclptr.hxx:208
    LibreOffice#31 0x00007fffefd1c382 in VCLXWindow::dispose (this=0x5555577c1ac0) at /home/michi/development/git/libreoffice/toolkit/source/awt/vclxwindow.cxx:905
    LibreOffice#32 0x00007ffff0069ec2 in UnoWrapper::WindowDestroyed (this=0x5555568aaf90, pWindow=0x5555572db4d0) at /home/michi/development/git/libreoffice/toolkit/source/helper/unowrapper.cxx:244
    LibreOffice#33 0x00007fffedc24eca in vcl::Window::dispose (this=0x5555572db4d0) at /home/michi/development/git/libreoffice/vcl/source/window/window.cxx:217
    LibreOffice#34 0x00007fffedea0d53 in VclReferenceBase::disposeOnce (this=0x5555572db520) at /home/michi/development/git/libreoffice/vcl/source/outdev/vclreferencebase.cxx:38
    LibreOffice#35 0x00007fffefd29a75 in VclPtr<vcl::Window>::disposeAndClear (this=0x7ffffffee3d8) at include/vcl/vclptr.hxx:208
    LibreOffice#36 0x00007fffefd1c382 in VCLXWindow::dispose (this=0x5555577c5650) at /home/michi/development/git/libreoffice/toolkit/source/awt/vclxwindow.cxx:905
    LibreOffice#37 0x00007ffff0069ec2 in UnoWrapper::WindowDestroyed (this=0x5555568aaf90, pWindow=0x5555576ebfe0) at /home/michi/development/git/libreoffice/toolkit/source/helper/unowrapper.cxx:244
    LibreOffice#38 0x00007fffedc24eca in vcl::Window::dispose (this=0x5555576ebfe0) at /home/michi/development/git/libreoffice/vcl/source/window/window.cxx:217
    LibreOffice#39 0x00007fffedea0d53 in VclReferenceBase::disposeOnce (this=0x5555576ec030) at /home/michi/development/git/libreoffice/vcl/source/outdev/vclreferencebase.cxx:38
    LibreOffice#40 0x00007fffefd29a75 in VclPtr<vcl::Window>::disposeAndClear (this=0x7ffffffefad8) at include/vcl/vclptr.hxx:208
    LibreOffice#41 0x00007fffefd1c382 in VCLXWindow::dispose (this=0x5555577c8d10) at /home/michi/development/git/libreoffice/toolkit/source/awt/vclxwindow.cxx:905
    LibreOffice#42 0x00007ffff0069ec2 in UnoWrapper::WindowDestroyed (this=0x5555568aaf90, pWindow=0x555557806110) at /home/michi/development/git/libreoffice/toolkit/source/helper/unowrapper.cxx:244
    LibreOffice#43 0x00007fffedc24eca in vcl::Window::dispose (this=0x555557806110) at /home/michi/development/git/libreoffice/vcl/source/window/window.cxx:217
    LibreOffice#44 0x00007fffedbc4b04 in SystemWindow::dispose (this=0x555557806110) at /home/michi/development/git/libreoffice/vcl/source/window/syswin.cxx:119
    LibreOffice#45 0x00007fffeda8e38c in Dialog::dispose (this=0x555557806110) at /home/michi/development/git/libreoffice/vcl/source/window/dialog.cxx:632
    LibreOffice#46 0x00007fffedea0d53 in VclReferenceBase::disposeOnce (this=0x5555578061f0) at /home/michi/development/git/libreoffice/vcl/source/outdev/vclreferencebase.cxx:38
    LibreOffice#47 0x00007fffefd29a75 in VclPtr<vcl::Window>::disposeAndClear (this=0x7fffffff1338) at include/vcl/vclptr.hxx:208
    LibreOffice#48 0x00007fffefd1c382 in VCLXWindow::dispose (this=0x555557897d70) at /home/michi/development/git/libreoffice/toolkit/source/awt/vclxwindow.cxx:905
    LibreOffice#49 0x00007ffff0069ec2 in UnoWrapper::WindowDestroyed (this=0x5555568aaf90, pWindow=0x5555578924d0) at /home/michi/development/git/libreoffice/toolkit/source/helper/unowrapper.cxx:244
    LibreOffice#50 0x00007fffedc24eca in vcl::Window::dispose (this=0x5555578924d0) at /home/michi/development/git/libreoffice/vcl/source/window/window.cxx:217
    LibreOffice#51 0x00007fffed9c1dc4 in ImplBorderWindow::dispose (this=0x5555578924d0) at /home/michi/development/git/libreoffice/vcl/source/window/brdwin.cxx:1615
    LibreOffice#52 0x00007fffedea0d53 in VclReferenceBase::disposeOnce (this=0x555557892530) at /home/michi/development/git/libreoffice/vcl/source/outdev/vclreferencebase.cxx:38
    LibreOffice#53 0x00007fffefd29a75 in VclPtr<vcl::Window>::disposeAndClear (this=0x7fffffff2b68) at include/vcl/vclptr.hxx:208
    LibreOffice#54 0x00007ffff006a6a7 in UnoWrapper::WindowDestroyed (this=0x5555568aaf90, pWindow=0x555556ef0dc0) at /home/michi/development/git/libreoffice/toolkit/source/helper/unowrapper.cxx:308
    LibreOffice#55 0x00007fffedc24eca in vcl::Window::dispose (this=0x555556ef0dc0) at /home/michi/development/git/libreoffice/vcl/source/window/window.cxx:217
    LibreOffice#56 0x00007fffedbc4b04 in SystemWindow::dispose (this=0x555556ef0dc0) at /home/michi/development/git/libreoffice/vcl/source/window/syswin.cxx:119
    LibreOffice#57 0x00007fffedc596c1 in WorkWindow::dispose (this=0x555556ef0dc0) at /home/michi/development/git/libreoffice/vcl/source/window/wrkwin.cxx:127
    LibreOffice#58 0x00007fffedea0d53 in VclReferenceBase::disposeOnce (this=0x555556ef0e80) at /home/michi/development/git/libreoffice/vcl/source/outdev/vclreferencebase.cxx:38
    LibreOffice#59 0x00007fffefd29a75 in VclPtr<vcl::Window>::disposeAndClear (this=0x7fffffff40e8) at include/vcl/vclptr.hxx:208
    LibreOffice#60 0x00007fffefd1c382 in VCLXWindow::dispose (this=0x5555570cde30) at /home/michi/development/git/libreoffice/toolkit/source/awt/vclxwindow.cxx:905
    LibreOffice#61 0x00007ffff49f5fd9 in (anonymous namespace)::XFrameImpl::disposing (this=0x555556dd1610) at /home/michi/development/git/libreoffice/framework/source/services/frame.cxx:2184
    LibreOffice#62 0x00007ffff573a1f0 in cppu::WeakComponentImplHelperBase::dispose (this=0x555556dd1610) at /home/michi/development/git/libreoffice/cppuhelper/source/implbase.cxx:104
    LibreOffice#63 0x00007ffff4a02ba5 in cppu::PartialWeakComponentImplHelper<com::sun::star::lang::XServiceInfo, com::sun::star::frame::XFrame2, com::sun::star::awt::XWindowListener, com::sun::star::awt::XTopWindowListener, com::sun::star::awt::XFocusListener, com::sun::star::document::XActionLockable, com::sun::star::util::XCloseable, com::sun::star::frame::XComponentLoader, com::sun::star::frame::XTitle, com::sun::star::frame::XTitleChangeBroadcaster, com::sun::star::beans::XPropertySet, com::sun::star::beans::XPropertySetInfo>::dispose (this=0x555556dd1610) at include/cppuhelper/compbase.hxx:90
    LibreOffice#64 0x00007ffff49fb4d5 in (anonymous namespace)::XFrameImpl::close (this=0x555556dd1610, bDeliverOwnership=0 '\000') at /home/michi/development/git/libreoffice/framework/source/services/frame.cxx:1731
    LibreOffice#65 0x00007ffff4829850 in framework::pattern::frame::closeIt (xResource=uno::Reference to ((anonymous namespace)::XFrameImpl *) 0x555556dd1680) at framework/source/inc/pattern/frame.hxx:57
    LibreOffice#66 0x00007ffff49b92fd in framework::LoadEnv::impl_reactForLoadingState (this=0x7fffffff57b8) at /home/michi/development/git/libreoffice/framework/source/loadenv/loadenv.cxx:1655
    LibreOffice#67 0x00007ffff49b8cf6 in framework::LoadEnv::impl_setResult (this=0x7fffffff57b8, bResult=true) at /home/michi/development/git/libreoffice/framework/source/loadenv/loadenv.cxx:537
    LibreOffice#68 0x00007ffff49b8b31 in framework::LoadEnv::impl_loadContent (this=0x7fffffff57b8) at /home/michi/development/git/libreoffice/framework/source/loadenv/loadenv.cxx:1184
    #69 0x00007ffff49b5c85 in framework::LoadEnv::start (this=0x7fffffff57b8) at /home/michi/development/git/libreoffice/framework/source/loadenv/loadenv.cxx:417
    #70 0x00007ffff49b3982 in framework::LoadEnv::startLoading
        (this=0x7fffffff57b8, sURL="file:///home/michi/development/git/libreoffice/instdir/share/template/common/officorr/Modern_business_letter_sans_serif.ott", lMediaDescriptor=uno::Sequence of length 3 = {...}, xBaseFrame=uno::Reference to (framework::Desktop *) 0x5555568ac098, sTarget="_default", nSearchFlags=0, eFeature=LoadEnvFeatures::WorkWithUI) at /home/michi/development/git/libreoffice/framework/source/loadenv/loadenv.cxx:313
    #71 0x00007ffff49b2282 in framework::LoadEnv::loadComponentFromURL
        (xLoader=uno::Reference to (framework::Desktop *) 0x5555568ac0a8, xContext=uno::Reference to (cppu::(anonymous namespace)::ComponentContext *) 0x55555559d808, sURL="file:///home/michi/development/git/libreoffice/instdir/share/template/common/officorr/Modern_business_letter_sans_serif.ott", sTarget="_default", nSearchFlags=0, lArgs=uno::Sequence of length 3 = {...}) at /home/michi/development/git/libreoffice/framework/source/loadenv/loadenv.cxx:169
    #72 0x00007ffff49e45d2 in framework::Desktop::loadComponentFromURL
        (this=0x5555568ac030, sURL="file:///home/michi/development/git/libreoffice/instdir/share/template/common/officorr/Modern_business_letter_sans_serif.ott", sTargetFrameName="_default", nSearchFlags=0, lArguments=uno::Sequence of length 3 = {...}) at /home/michi/development/git/libreoffice/framework/source/services/desktop.cxx:594
    #73 0x00007ffff49e4734 in non-virtual thunk to framework::Desktop::loadComponentFromURL(rtl::OUString const&, rtl::OUString const&, int, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&) ()
        at /home/michi/development/git/libreoffice/instdir/program/libfwklo.so
    #74 0x00007ffff3c6ef72 in SfxTemplateManagerDlg::EditTemplateHdl (this=0x7fffffffa218, rTemplatePath="file:///home/michi/development/git/libreoffice/instdir/share/template/common/officorr/Modern_business_letter_sans_serif.ott")
        at /home/michi/development/git/libreoffice/sfx2/source/doc/templatedlg.cxx:715
    #75 0x00007ffff3c67eed in SfxTemplateManagerDlg::LinkStubEditTemplateHdl (instance=0x7fffffffa218, data="file:///home/michi/development/git/libreoffice/instdir/share/template/common/officorr/Modern_business_letter_sans_serif.ott")
        at /home/michi/development/git/libreoffice/sfx2/source/doc/templatedlg.cxx:704
    #76 0x00007ffff36af081 in Link<rtl::OUString const&, void>::Call (this=0x7fffffffa520, data="file:///home/michi/development/git/libreoffice/instdir/share/template/common/officorr/Modern_business_letter_sans_serif.ott")
        at include/tools/link.hxx:105
    #77 0x00007ffff382c9ab in TemplateDlgLocalView::ContextMenuSelectHdl (this=0x7fffffffa320, rIdent=u"edit") at /home/michi/development/git/libreoffice/sfx2/source/control/templatedlglocalview.cxx:154
    #78 0x00007ffff382c66a in TemplateDlgLocalView::createContextMenu (this=0x7fffffffa320, bIsDefault=false, bIsBuiltIn=true, bIsSingleSel=true, rDefaultImg="res/odt_16_8.png")
        at /home/michi/development/git/libreoffice/sfx2/source/control/templatedlglocalview.cxx:140
    #79 0x00007ffff3c6e710 in SfxTemplateManagerDlg::CreateContextMenuHdl (this=0x7fffffffa218, pItem=0x55555788ca90) at /home/michi/development/git/libreoffice/sfx2/source/doc/templatedlg.cxx:680
    #80 0x00007ffff3c67e5d in SfxTemplateManagerDlg::LinkStubCreateContextMenuHdl (instance=0x7fffffffa218, data=0x55555788ca90) at /home/michi/development/git/libreoffice/sfx2/source/doc/templatedlg.cxx:649
    #81 0x00007ffff381bce1 in Link<TemplateViewItem*, void>::Call (this=0x7fffffffa4e0, data=0x55555788ca90) at include/tools/link.hxx:105
    #82 0x00007ffff3816e34 in TemplateLocalView::Command (this=0x7fffffffa320, rCEvt=...) at /home/michi/development/git/libreoffice/sfx2/source/control/templatelocalview.cxx:718
    #83 0x00007fffee228e11 in weld::CustomWeld::DoCommand (this=0x55555779d480, rPos=...) at /home/michi/development/git/libreoffice/vcl/source/app/customweld.cxx:102
    #84 0x00007fffee228b1d in weld::CustomWeld::LinkStubDoCommand (instance=0x55555779d480, data=...) at /home/michi/development/git/libreoffice/vcl/source/app/customweld.cxx:100
    #85 0x00007fffeda99ed6 in Link<CommandEvent const&, bool>::Call (this=0x555557703ef0, data=...) at include/tools/link.hxx:105
    #86 0x00007fffee2813f1 in weld::Widget::signal_command (this=0x555557703ee0, rCEvt=...) at include/vcl/weld/weld.hxx:109
    #87 0x00007fffee247e74 in SalInstanceWidget::CommandHdl (this=0x555557703eb0, rEvent=...) at /home/michi/development/git/libreoffice/vcl/source/app/salvtables.cxx:819
    #88 0x00007fffee244ccd in SalInstanceWidget::LinkStubCommandHdl (instance=0x555557703eb0, data=...) at /home/michi/development/git/libreoffice/vcl/source/app/salvtables.cxx:817
    #89 0x00007fffeda99ed6 in Link<CommandEvent const&, bool>::Call (this=0x5555577f1080, data=...) at include/tools/link.hxx:105
    #90 0x00007fffedc2f524 in vcl::Window::Command (this=0x5555573055d0, rCEvt=...) at /home/michi/development/git/libreoffice/vcl/source/window/window.cxx:1933
    #91 0x00007fffedc4df45 in ImplCallCommand (pChild=..., nEvt=CommandEventId::ContextMenu, pData=0x0, bMouse=true, pPos=0x7fffffff7950) at /home/michi/development/git/libreoffice/vcl/source/window/winproc.cxx:258
    #92 0x00007fffedc4d68c in ImplHandleMouseEvent (xWindow=..., nSVEvent=NotifyEventType::MOUSEBUTTONDOWN, bMouseLeave=false, nX=125, nY=130, nMsgTime=71004093, nCode=4, nMode=MouseEventModifiers::NONE)
        at /home/michi/development/git/libreoffice/vcl/source/window/winproc.cxx:827
    #93 0x00007fffedc51581 in ImplHandleSalMouseButtonDown (pWindow=0x5555578924d0, pEvent=0x7fffffff8998) at /home/michi/development/git/libreoffice/vcl/source/window/winproc.cxx:2367
    #94 0x00007fffedc501f1 in ImplWindowFrameProc (_pWindow=0x5555578924d0, nEvent=SalEvent::MouseButtonDown, pEvent=0x7fffffff8998) at /home/michi/development/git/libreoffice/vcl/source/window/winproc.cxx:2705
    #95 0x00007fffe6215dcc in SalFrame::CallCallback (this=0x555557805e30, nEvent=SalEvent::MouseButtonDown, pEvent=0x7fffffff8998) at vcl/inc/salframe.hxx:310
    #96 0x00007fffe62be199 in X11SalFrame::HandleMouseEvent (this=0x555557805e30, pEvent=0x7fffffff8e68) at /home/michi/development/git/libreoffice/vcl/unx/generic/window/salframe.cxx:2575
    #97 0x00007fffe62c1e97 in X11SalFrame::Dispatch (this=0x555557805e30, pEvent=0x7fffffff8e68) at /home/michi/development/git/libreoffice/vcl/unx/generic/window/salframe.cxx:3642
    #98 0x00007fffe6231f7b in SalX11Display::Dispatch (this=0x555556884440, pEvent=0x7fffffff8e68) at /home/michi/development/git/libreoffice/vcl/unx/generic/app/saldisp.cxx:1966
    #99 0x00007fffe6231802 in SalX11Display::Yield (this=0x555556884440) at /home/michi/development/git/libreoffice/vcl/unx/generic/app/saldisp.cxx:1865
    #100 0x00007fffe62267df in DisplayYield (fd=5, data=0x555556884440) at /home/michi/development/git/libreoffice/vcl/unx/generic/app/saldisp.cxx:317
    #101 0x00007fffe622235c in (anonymous namespace)::YieldEntry::HandleNextEvent (this=0x7fffe63191e8 <yieldTable+200>) at /home/michi/development/git/libreoffice/vcl/unx/generic/app/saldata.cxx:559
    #102 0x00007fffe6222261 in SalXLib::Yield (this=0x5555555a3b00, bWait=true, bHandleAllCurrentEvents=false) at /home/michi/development/git/libreoffice/vcl/unx/generic/app/saldata.cxx:751
    #103 0x00007fffe623f29d in X11SalInstance::DoYield (this=0x5555555a1ba0, bWait=true, bHandleAllCurrentEvents=false) at /home/michi/development/git/libreoffice/vcl/unx/generic/app/salinst.cxx:189
    #104 0x00007fffee300306 in InnerYield (i_bWait=true, i_bAllEvents=false) at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:389
    #105 0x00007fffee2ffb8f in Application::Yield () at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:502
    #106 0x00007fffeda927db in Dialog::Execute (this=0x555557806110) at /home/michi/development/git/libreoffice/vcl/source/window/dialog.cxx:1079
    #107 0x00007fffee2505ee in SalInstanceDialog::run (this=0x5555575f5100) at /home/michi/development/git/libreoffice/vcl/source/app/salvtables.cxx:1859
    #108 0x00007fffee6b4c6e in weld::DialogController::run (this=0x7fffffffa218) at /home/michi/development/git/libreoffice/vcl/source/weld/DialogController.cxx:16
    #109 0x00007ffff3c68a94 in SfxTemplateManagerDlg::run (this=0x7fffffffa218) at /home/michi/development/git/libreoffice/sfx2/source/doc/templatedlg.cxx:262
    #110 0x00007ffff36578af in SfxApplication::NewDocExec_Impl (this=0x555556dbccf0, rReq=...) at /home/michi/development/git/libreoffice/sfx2/source/appl/appopen.cxx:473
    #111 0x00007ffff3650dd5 in SfxStubSfxApplicationNewDocExec_Impl (pShell=0x555556dbccf0, rReq=...) at workdir/SdiTarget/sfx2/sdi/sfxslots.hxx:1310
    #112 0x00007ffff37aa26e in SfxDispatcher::Call_Impl (this=0x555556979a30, rShell=..., rSlot=..., rReq=..., bRecord=true) at /home/michi/development/git/libreoffice/sfx2/source/control/dispatch.cxx:256
    #113 0x00007ffff37b0156 in SfxDispatcher::PostMsgHandler (this=0x555556979a30, pReq=std::unique_ptr<SfxRequest> = {...}) at /home/michi/development/git/libreoffice/sfx2/source/control/dispatch.cxx:997
    #114 0x00007ffff3ca5458 in SfxHintPoster::DoEvent_Impl (this=0x555556db3930, pPostedHint=0x5555576ed980) at /home/michi/development/git/libreoffice/sfx2/source/notify/hintpost.cxx:74
    #115 0x00007ffff3ca539d in SfxHintPoster::LinkStubDoEvent_Impl (instance=0x555556db3930, data=0x5555576ed980) at /home/michi/development/git/libreoffice/sfx2/source/notify/hintpost.cxx:54
    #116 0x00007fffedc583f1 in Link<void*, void>::Call (this=0x5555577cabb8, data=0x5555576ed980) at include/tools/link.hxx:105
    #117 0x00007fffedc53d11 in ImplHandleUserEvent (pSVEvent=0x5555577cabb0) at /home/michi/development/git/libreoffice/vcl/source/window/winproc.cxx:2314
    #118 0x00007fffedc50c3f in ImplWindowFrameProc (_pWindow=0x555556db2f40, nEvent=SalEvent::UserEvent, pEvent=0x5555577cabb0) at /home/michi/development/git/libreoffice/vcl/source/window/winproc.cxx:2871
    #119 0x00007fffee830cbc in SalFrame::CallCallback (this=0x555556b048a0, nEvent=SalEvent::UserEvent, pEvent=0x5555577cabb0) at vcl/inc/salframe.hxx:310
    #120 0x00007fffee85721f in SalGenericDisplay::ProcessEvent (this=0x555556884440, aEvent=...) at /home/michi/development/git/libreoffice/vcl/unx/generic/app/gendisp.cxx:66
    #121 0x00007fffee234c9d in SalUserEventList::DispatchUserEvents(bool)::$_0::operator()() const (this=0x7fffffffb390) at /home/michi/development/git/libreoffice/vcl/source/app/salusereventlist.cxx:119
    #122 0x00007fffee234b6b in SalUserEventList::DispatchUserEvents (this=0x555556884440, bHandleAllCurrentEvents=false) at /home/michi/development/git/libreoffice/vcl/source/app/salusereventlist.cxx:120
    #123 0x00007fffee857175 in SalGenericDisplay::DispatchInternalEvent (this=0x555556884440, bHandleAllCurrentEvent=false) at /home/michi/development/git/libreoffice/vcl/unx/generic/app/gendisp.cxx:51
    #124 0x00007fffe6231784 in SalX11Display::Yield (this=0x555556884440) at /home/michi/development/git/libreoffice/vcl/unx/generic/app/saldisp.cxx:1856
    #125 0x00007fffe62267df in DisplayYield (fd=5, data=0x555556884440) at /home/michi/development/git/libreoffice/vcl/unx/generic/app/saldisp.cxx:317
    #126 0x00007fffe622235c in (anonymous namespace)::YieldEntry::HandleNextEvent (this=0x7fffe63191e8 <yieldTable+200>) at /home/michi/development/git/libreoffice/vcl/unx/generic/app/saldata.cxx:559
    #127 0x00007fffe6221bc9 in SalXLib::Yield (this=0x5555555a3b00, bWait=true, bHandleAllCurrentEvents=false) at /home/michi/development/git/libreoffice/vcl/unx/generic/app/saldata.cxx:655
    #128 0x00007fffe623f29d in X11SalInstance::DoYield (this=0x5555555a1ba0, bWait=true, bHandleAllCurrentEvents=false) at /home/michi/development/git/libreoffice/vcl/unx/generic/app/salinst.cxx:189
    #129 0x00007fffee300306 in InnerYield (i_bWait=true, i_bAllEvents=false) at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:389
    #130 0x00007fffee2ffb8f in Application::Yield () at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:502
    #131 0x00007fffee2ff970 in Application::Execute () at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:364
    #132 0x00007ffff7b228b5 in desktop::Desktop::Main (this=0x7fffffffd550) at /home/michi/development/git/libreoffice/desktop/source/app/app.cxx:1681
    #133 0x00007fffee329376 in ImplSVMain () at /home/michi/development/git/libreoffice/vcl/source/app/svmain.cxx:230
    #134 0x00007fffee32ae99 in SVMain () at /home/michi/development/git/libreoffice/vcl/source/app/svmain.cxx:248
    #135 0x00007ffff7b9c86a in soffice_main () at /home/michi/development/git/libreoffice/desktop/source/app/sofficemain.cxx:122
    #136 0x0000555555555a2d in sal_main () at /home/michi/development/git/libreoffice/desktop/source/app/main.c:51
    #137 0x0000555555555a07 in main (argc=1, argv=0x7fffffffd758) at /home/michi/development/git/libreoffice/desktop/source/app/main.c:49

Change-Id: I06da3836405b46671785824fbcee8db863048685
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/197637
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
bise86 pushed a commit to bise86/LibreOffice that referenced this pull request Sep 29, 2026
As has been done almost everywhere else already, switch
from defining (skeleton) tab pages in the .ui file for the
database "Advanced Settings" dialog and adding the actual
content only later.

Instead, completely have the logic to add them (including
the tab label to use) in C++ code, as is done elsewhere.

This prevents the situation where trying to remove
the tab page that was defined in the UI file but
isn't known to the SfxTabDialogController yet
would result in an assert getting triggered when using
the qt6 VCL plugin with SAL_VCL_QT_USE_WELDED_WIDGETS=1
when triggering the dialog for a case where the
"Generated Values" tab page isn't meant to be shown.

Seen with upcoming commit

    Change-Id: I2eab17ed0aff12aa3c650f35c8a1b7d737091842
    Author: Michael Weghorn <m.weghorn@posteo.de>
    Date:   Mon Mar 9 21:00:01 2026 +0100

        tdf#130857 qt weld: Support DB "Advanced Settings" dialog

(See the commit message of that commit for more details,
but don't apply the extra local change mentioned in there
so that the "Generated Values" tab page will not be added.)

Backtrace how the

    assert(!m_pImpl->aData.empty() && "no Pages registered");

at the beginning of SfxTabDialogController::DeactivatePage
would be triggered otherwise:

    Thread 1 received signal SIGABRT, Aborted.
    __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44
    ⚠ warning: 44  ./nptl/pthread_kill.c: No such file or directory
    (rr) bt
    #0  __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44
    LibreOffice#1  0x00007f0bdc8a147f in __pthread_kill_internal (threadid=<optimized out>, signo=6) at ./nptl/pthread_kill.c:89
    LibreOffice#2  0x00007f0bdc84a942 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
    LibreOffice#3  0x00007f0bdc8324ac in __GI_abort () at ./stdlib/abort.c:77
    LibreOffice#4  0x00007f0bdc832420 in __assert_fail_base (fmt=<optimized out>, assertion=<optimized out>, file=<optimized out>, line=<optimized out>, function=0x7f0bd847b283 "bool SfxTabDialogController::DeactivatePage(std::u16string_view)")
        at ./assert/assert.c:118
    LibreOffice#5  0x00007f0bd8bc655d in SfxTabDialogController::DeactivatePage (this=0x55f6d18af070, aPage=u"generated") at /home/michi/development/git/libreoffice/sfx2/source/dialog/tabdlg.cxx:372
    LibreOffice#6  0x00007f0bd8bc64aa in SfxTabDialogController::DeactivatePageHdl (this=0x55f6d18af070, rPage="generated") at /home/michi/development/git/libreoffice/sfx2/source/dialog/tabdlg.cxx:358
    LibreOffice#7  0x00007f0bd8bc474d in SfxTabDialogController::LinkStubDeactivatePageHdl (instance=0x55f6d18af070, data="generated") at /home/michi/development/git/libreoffice/sfx2/source/dialog/tabdlg.cxx:356
    LibreOffice#8  0x00007f0bca4f6ee6 in Link<rtl::OUString const&, bool>::Call (this=0x55f6d18aebd8, data="generated") at include/tools/link.hxx:105
    LibreOffice#9  0x00007f0bca4f135e in QtInstanceNotebook::currentTabChanged (this=0x55f6d18ae9e0) at vcl/qt6/../qt5/QtInstanceNotebook.cxx:191
    LibreOffice#10 0x00007f0bca4f7a91 in QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QtInstanceNotebook::*)()>::call(void (QtInstanceNotebook::*)(), QtInstanceNotebook*, void**)::{lambda()LibreOffice#1}::operator()() const (this=0x7ffecd74f740) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:128
    LibreOffice#11 0x00007f0bca4f79c9 in QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QtInstanceNotebook::*)()>::call(void (QtInstanceNotebook::*)(), QtInstanceNotebook*, void**)::{lambda()LibreOffice#1}>(void**, QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QtInstanceNotebook::*)()>::call(void (QtInstanceNotebook::*)(), QtInstanceNotebook*, void**)::{lambda()LibreOffice#1}&&) (args=0x7ffecd74fb20, fn=...) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:66
    LibreOffice#12 0x00007f0bca4f78fb in QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QtInstanceNotebook::*)()>::call(void (QtInstanceNotebook::*)(), QtInstanceNotebook*, void**)
        (f=(void (QtInstanceNotebook::*)(class QtInstanceNotebook * const)) 0x7f0bca4f1300 <QtInstanceNotebook::currentTabChanged()>, o=0x55f6d18ae9e0, arg=0x7ffecd74fb20)
        at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:127
    LibreOffice#13 0x00007f0bca4f787d in QtPrivate::FunctionPointer<void (QtInstanceNotebook::*)()>::call<QtPrivate::List<>, void>(void (QtInstanceNotebook::*)(), QtInstanceNotebook*, void**)
        (f=(void (QtInstanceNotebook::*)(class QtInstanceNotebook * const)) 0x7f0bca4f1300 <QtInstanceNotebook::currentTabChanged()>, o=0x55f6d18ae9e0, arg=0x7ffecd74fb20)
        at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:175
    LibreOffice#14 0x00007f0bca4f77a6 in QtPrivate::QCallableObject<void (QtInstanceNotebook::*)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*)
        (which=1, this_=0x55f6d1899530, r=0x55f6d18ae9e0, a=0x7ffecd74fb20, ret=0x0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:546
    LibreOffice#15 0x00007f0bc92e95f2 in QtPrivate::QSlotObjectBase::call (this=0x55f6d1899530, r=0x55f6d18ae9e0, a=0x7ffecd74fb20) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:462
    LibreOffice#16 0x00007f0bc951c112 in doActivate<false> (sender=0x55f6d1e562e0, signal_index=7, argv=0x7ffecd74fb20) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4372
    LibreOffice#17 0x00007f0bc95124b3 in QMetaObject::activate (sender=0x55f6d1e562e0, m=0x7f0bc7f7bcb0 <QTabWidget::staticMetaObject>, local_signal_index=0, argv=0x7ffecd74fb20)
        at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4432
    LibreOffice#18 0x00007f0bc73a69fb in QMetaObject::activate<void, int> (sender=0x55f6d1e562e0, mo=0x7f0bc7f7bcb0 <QTabWidget::staticMetaObject>, local_signal_index=0, ret=0x0, args=@0x7ffecd74fb64: 0) at qtbase/src/corelib/kernel/qobjectdefs.h:320
    LibreOffice#19 0x00007f0bc77fde78 in QTabWidget::currentChanged (this=0x55f6d1e562e0, _t1=0) at qtbase/src/widgets/Widgets_autogen/include/moc_qtabwidget.cpp:263
    LibreOffice#20 0x00007f0bc77fdc4b in QTabWidgetPrivate::showTab (this=0x55f6d1889c50, index=0) at /home/michi/development/git/qt5/qtbase/src/widgets/widgets/qtabwidget.cpp:761
    LibreOffice#21 0x00007f0bc780118a in QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, QtPrivate::List<int>, void, void (QTabWidgetPrivate::*)(int)>::call(void (QTabWidgetPrivate::*)(int), QTabWidgetPrivate*, void**)::{lambda()LibreOffice#1}::operator()() const (this=0x7ffecd74fc30) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:128
    LibreOffice#22 0x00007f0bc7800ffd in QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, QtPrivate::List<int>, void, void (QTabWidgetPrivate::*)(int)>::call(void (QTabWidgetPrivate::*)(int), QTabWidgetPrivate*, void**)::{lambda()LibreOffice#1}>(void**, QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, QtPrivate::List<int>, void, void (QTabWidgetPrivate::*)(int)>::call(void (QTabWidgetPrivate::*)(int), QTabWidgetPrivate*, void**)::{lambda()LibreOffice#1}&&) (args=0x7ffecd750030, fn=...) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:66
    LibreOffice#23 0x00007f0bc7800f87 in QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, QtPrivate::List<int>, void, void (QTabWidgetPrivate::*)(int)>::call
        (f=(void (QTabWidgetPrivate::*)(class QTabWidgetPrivate * const, int)) 0x7f0bc77fdbe0 <QTabWidgetPrivate::showTab(int)>, o=0x55f6d1889c50, arg=0x7ffecd750030) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:127
    LibreOffice#24 0x00007f0bc7800ef1 in QtPrivate::FunctionPointer<void (QTabWidgetPrivate::*)(int)>::call<QtPrivate::List<int>, void>
        (f=(void (QTabWidgetPrivate::*)(class QTabWidgetPrivate * const, int)) 0x7f0bc77fdbe0 <QTabWidgetPrivate::showTab(int)>, o=0x55f6d1889c50, arg=0x7ffecd750030) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:175
    LibreOffice#25 0x00007f0bc7800e20 in QtPrivate::QPrivateSlotObject<void (QTabWidgetPrivate::*)(int), QtPrivate::List<int>, void>::impl (which=1, this_=0x55f6d1d6ecb0, r=0x55f6d1e562e0, a=0x7ffecd750030, ret=0x0)
        at qtbase/src/corelib/kernel/qobject_p.h:273
    LibreOffice#26 0x00007f0bc92e95f2 in QtPrivate::QSlotObjectBase::call (this=0x55f6d1d6ecb0, r=0x55f6d1e562e0, a=0x7ffecd750030) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:462
    LibreOffice#27 0x00007f0bc951c112 in doActivate<false> (sender=0x55f6d0aa9aa0, signal_index=7, argv=0x7ffecd750030) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4372
    LibreOffice#28 0x00007f0bc95124b3 in QMetaObject::activate (sender=0x55f6d0aa9aa0, m=0x7f0bc7f7a098 <QTabBar::staticMetaObject>, local_signal_index=0, argv=0x7ffecd750030)
        at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4432
    LibreOffice#29 0x00007f0bc73a69fb in QMetaObject::activate<void, int> (sender=0x55f6d0aa9aa0, mo=0x7f0bc7f7a098 <QTabBar::staticMetaObject>, local_signal_index=0, ret=0x0, args=@0x7ffecd750074: 0) at qtbase/src/corelib/kernel/qobjectdefs.h:320
    LibreOffice#30 0x00007f0bc77c3308 in QTabBar::currentChanged (this=0x55f6d0aa9aa0, _t1=0) at qtbase/src/widgets/Widgets_autogen/include/moc_qtabbar.cpp:269
    LibreOffice#31 0x00007f0bc77c27af in QTabBar::setCurrentIndex (this=0x55f6d0aa9aa0, index=0) at /home/michi/development/git/qt5/qtbase/src/widgets/widgets/qtabbar.cpp:1469
    LibreOffice#32 0x00007f0bc77c2f07 in QTabBar::removeTab (this=0x55f6d0aa9aa0, index=0) at /home/michi/development/git/qt5/qtbase/src/widgets/widgets/qtabbar.cpp:1096
    LibreOffice#33 0x00007f0bc77fc3ea in QTabWidgetPrivate::removeTab (this=0x55f6d1889c50, index=0) at /home/michi/development/git/qt5/qtbase/src/widgets/widgets/qtabwidget.cpp:767
    LibreOffice#34 0x00007f0bc780118a in QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, QtPrivate::List<int>, void, void (QTabWidgetPrivate::*)(int)>::call(void (QTabWidgetPrivate::*)(int), QTabWidgetPrivate*, void**)::{lambda()LibreOffice#1}::operator()() const (this=0x7ffecd7502b0) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:128
    LibreOffice#35 0x00007f0bc7800ffd in QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, QtPrivate::List<int>, void, void (QTabWidgetPrivate::*)(int)>::call(void (QTabWidgetPrivate::*)(int), QTabWidgetPrivate*, void**)::{lambda()LibreOffice#1}>(void**, QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, QtPrivate::List<int>, void, void (QTabWidgetPrivate::*)(int)>::call(void (QTabWidgetPrivate::*)(int), QTabWidgetPrivate*, void**)::{lambda()LibreOffice#1}&&) (args=0x7ffecd7506b0, fn=...) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:66
    LibreOffice#36 0x00007f0bc7800f87 in QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, QtPrivate::List<int>, void, void (QTabWidgetPrivate::*)(int)>::call
        (f=(void (QTabWidgetPrivate::*)(class QTabWidgetPrivate * const, int)) 0x7f0bc77fc3b0 <QTabWidgetPrivate::removeTab(int)>, o=0x55f6d1889c50, arg=0x7ffecd7506b0) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:127
    LibreOffice#37 0x00007f0bc7800ef1 in QtPrivate::FunctionPointer<void (QTabWidgetPrivate::*)(int)>::call<QtPrivate::List<int>, void>
        (f=(void (QTabWidgetPrivate::*)(class QTabWidgetPrivate * const, int)) 0x7f0bc77fc3b0 <QTabWidgetPrivate::removeTab(int)>, o=0x55f6d1889c50, arg=0x7ffecd7506b0) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:175
    LibreOffice#38 0x00007f0bc7800e20 in QtPrivate::QPrivateSlotObject<void (QTabWidgetPrivate::*)(int), QtPrivate::List<int>, void>::impl (which=1, this_=0x55f6d1d73e10, r=0x55f6d1e562e0, a=0x7ffecd7506b0, ret=0x0)
        at qtbase/src/corelib/kernel/qobject_p.h:273
    LibreOffice#39 0x00007f0bc92e95f2 in QtPrivate::QSlotObjectBase::call (this=0x55f6d1d73e10, r=0x55f6d1e562e0, a=0x7ffecd7506b0) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:462
    LibreOffice#40 0x00007f0bc951c112 in doActivate<false> (sender=0x55f6d1e56310, signal_index=8, argv=0x7ffecd7506b0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4372
    LibreOffice#41 0x00007f0bc95124b3 in QMetaObject::activate (sender=0x55f6d1e56310, m=0x7f0bc7f796e0 <QStackedWidget::staticMetaObject>, local_signal_index=1, argv=0x7ffecd7506b0)
        at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4432
    LibreOffice#42 0x00007f0bc73a69fb in QMetaObject::activate<void, int> (sender=0x55f6d1e56310, mo=0x7f0bc7f796e0 <QStackedWidget::staticMetaObject>, local_signal_index=1, ret=0x0, args=@0x7ffecd7506f4: 0)
        at qtbase/src/corelib/kernel/qobjectdefs.h:320
    LibreOffice#43 0x00007f0bc77b6c5d in QStackedWidget::widgetRemoved (this=0x55f6d1e56310, _t1=0) at qtbase/src/widgets/Widgets_autogen/include/moc_qstackedwidget.cpp:194
    LibreOffice#44 0x00007f0bc77b7dda in QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, QtPrivate::List<int>, void, void (QStackedWidget::*)(int)>::call(void (QStackedWidget::*)(int), QStackedWidget*, void**)::{lambda()LibreOffice#1}::operator()() const (this=0x7ffecd750780) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:128
    LibreOffice#45 0x00007f0bc77b7ced in QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, QtPrivate::List<int>, void, void (QStackedWidget::*)(int)>::call(void (QStackedWidget::*)(int), QStackedWidget*, void**)::{lambda()LibreOffice#1}>(void**, QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, QtPrivate::List<int>, void, void (QStackedWidget::*)(int)>::call(void (QStackedWidget::*)(int), QStackedWidget*, void**)::{lambda()LibreOffice#1}&&) (args=0x7ffecd750b70, fn=...) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:66
    LibreOffice#46 0x00007f0bc77b7c07 in QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, QtPrivate::List<int>, void, void (QStackedWidget::*)(int)>::call
        (f=(void (QStackedWidget::*)(class QStackedWidget * const, int)) 0x7f0bc77b6c20 <QStackedWidget::widgetRemoved(int)>, o=0x55f6d1e56310, arg=0x7ffecd750b70) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:127
    LibreOffice#47 0x00007f0bc77b7b71 in QtPrivate::FunctionPointer<void (QStackedWidget::*)(int)>::call<QtPrivate::List<int>, void>
        (f=(void (QStackedWidget::*)(class QStackedWidget * const, int)) 0x7f0bc77b6c20 <QStackedWidget::widgetRemoved(int)>, o=0x55f6d1e56310, arg=0x7ffecd750b70) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:175
    LibreOffice#48 0x00007f0bc77b7a9b in QtPrivate::QCallableObject<void (QStackedWidget::*)(int), QtPrivate::List<int>, void>::impl (which=1, this_=0x55f6d18a6a70, r=0x55f6d1e56310, a=0x7ffecd750b70, ret=0x0)
        at qtbase/src/corelib/kernel/qobjectdefs_impl.h:546
    LibreOffice#49 0x00007f0bc92e95f2 in QtPrivate::QSlotObjectBase::call (this=0x55f6d18a6a70, r=0x55f6d1e56310, a=0x7ffecd750b70) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:462
    LibreOffice#50 0x00007f0bc951c112 in doActivate<false> (sender=0x55f6d1d94df0, signal_index=3, argv=0x7ffecd750b70) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4372
    LibreOffice#51 0x00007f0bc95124b3 in QMetaObject::activate (sender=0x55f6d1d94df0, m=0x7f0bc7f64618 <QStackedLayout::staticMetaObject>, local_signal_index=0, argv=0x7ffecd750b70)
        at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4432
    LibreOffice#52 0x00007f0bc73a69fb in QMetaObject::activate<void, int> (sender=0x55f6d1d94df0, mo=0x7f0bc7f64618 <QStackedLayout::staticMetaObject>, local_signal_index=0, ret=0x0, args=@0x7ffecd750bb4: 0)
        at qtbase/src/corelib/kernel/qobjectdefs.h:320
    LibreOffice#53 0x00007f0bc7445098 in QStackedLayout::widgetRemoved (this=0x55f6d1d94df0, _t1=0) at qtbase/src/widgets/Widgets_autogen/include/moc_qstackedlayout.cpp:185
    LibreOffice#54 0x00007f0bc7444faf in QStackedLayout::takeAt (this=0x55f6d1d94df0, index=0) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qstackedlayout.cpp:261
    LibreOffice#55 0x00007f0bc743414c in QLayout::removeWidget (this=0x55f6d1d94df0, widget=0x55f6cfb71cb0) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qlayout.cpp:1479
    LibreOffice#56 0x00007f0bc77b6e8d in QStackedWidget::removeWidget (this=0x55f6d1e56310, widget=0x55f6cfb71cb0) at /home/michi/development/git/qt5/qtbase/src/widgets/widgets/qstackedwidget.cpp:177
    LibreOffice#57 0x00007f0bc77fda72 in QTabWidget::removeTab (this=0x55f6d1e562e0, index=0) at /home/michi/development/git/qt5/qtbase/src/widgets/widgets/qtabwidget.cpp:632
    LibreOffice#58 0x00007f0bca4f4a63 in QtInstanceNotebook::remove_page(rtl::OUString const&)::$_0::operator()() const (this=0x7ffecd750e60) at vcl/qt6/../qt5/QtInstanceNotebook.cxx:104
    LibreOffice#59 0x00007f0bca4f4a25 in std::__invoke_impl<void, QtInstanceNotebook::remove_page(rtl::OUString const&)::$_0&>(std::__invoke_other, QtInstanceNotebook::remove_page(rtl::OUString const&)::$_0&) (__f=...)
        at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/invoke.h:63
    LibreOffice#60 0x00007f0bca4f49d5 in std::__invoke_r<void, QtInstanceNotebook::remove_page(rtl::OUString const&)::$_0&>(QtInstanceNotebook::remove_page(rtl::OUString const&)::$_0&) (__fn=...)
        at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/invoke.h:113
    LibreOffice#61 0x00007f0bca4f48ed in std::_Function_handler<void(), QtInstanceNotebook::remove_page(rtl::OUString const&)::$_0>::_M_invoke (__functor=...) at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/std_function.h:292
    LibreOffice#62 0x00007f0bca44a4de in std::function<void()>::operator() (this=0x7ffecd750e60) at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/std_function.h:593
    LibreOffice#63 0x00007f0bca44102f in QtInstance::RunInMainThread (this=0x55f6ce948eb0, func=...) at vcl/qt6/../qt5/QtInstance.cxx:209
    LibreOffice#64 0x00007f0bca4f24fa in QtInstanceNotebook::remove_page (this=0x55f6d18ae9e0, rIdent="generated") at vcl/qt6/../qt5/QtInstanceNotebook.cxx:104
    LibreOffice#65 0x00007f0bd8bc99ad in SfxTabDialogController::RemoveTabPage (this=0x55f6d18af070, rId="generated") at /home/michi/development/git/libreoffice/sfx2/source/dialog/tabdlg.cxx:827
    LibreOffice#66 0x00007f0b8f42863d in dbaui::AdvancedSettingsDialog::AdvancedSettingsDialog
        (this=0x55f6d18af070, pParent=0x55f6d158ae20, _pItems=0x55f6d15af940, _rxContext=uno::Reference to (cppu::(anonymous namespace)::ComponentContext *) 0x55f6ce92c458, _aDataSourceName=uno::Any("string": "file:///home/michi/Documents/New%20Database90.odb")) at /home/michi/development/git/libreoffice/dbaccess/source/ui/dlg/advancedsettings.cxx:381
    LibreOffice#67 0x00007f0b8f6da456 in std::make_unique<dbaui::AdvancedSettingsDialog, weld::Window*, SfxItemSet*, com::sun::star::uno::Reference<com::sun::star::uno::XComponentContext>&, com::sun::star::uno::Any&>
        (__args=@0x7ffecd751248: 0x55f6d158ae20, __args=@0x7ffecd751240: 0x55f6d15af940, __args=uno::Reference to (cppu::(anonymous namespace)::ComponentContext *) 0x55f6ce92c458, __args=uno::Any("string": "file:///home/michi/Documents/New%20Database90.odb")) at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/unique_ptr.h:1084
    LibreOffice#68 0x00007f0b8f6d9e1f in dbaui::(anonymous namespace)::OAdvancedSettingsDialog::createDialog (this=0x55f6d15971d0, rParent=uno::Reference to (VCLXTopWindow *) 0x55f6d01bc780)
        at /home/michi/development/git/libreoffice/dbaccess/source/ui/uno/AdvancedSettingsDlg.cxx:103
    #69 0x00007f0bd586da5e in svt::OGenericUnoDialog::impl_ensureDialog_lck (this=0x55f6d15971d0) at /home/michi/development/git/libreoffice/svtools/source/uno/genericunodialog.cxx:169
    #70 0x00007f0bd586dcec in svt::OGenericUnoDialog::execute (this=0x55f6d15971d0) at /home/michi/development/git/libreoffice/svtools/source/uno/genericunodialog.cxx:200
    #71 0x00007f0b8f23e1a9 in dbaui::OApplicationController::openDialog (this=0x55f6d01db510, _sServiceName="com.sun.star.sdb.AdvancedDatabaseSettingsDialog")
        at /home/michi/development/git/libreoffice/dbaccess/source/ui/app/AppControllerGen.cxx:205
    #72 0x00007f0b8f1ea90a in dbaui::OApplicationController::Execute (this=0x55f6d01db510, _nId=12256, aArgs=empty uno::Sequence) at /home/michi/development/git/libreoffice/dbaccess/source/ui/app/AppController.cxx:1294
    #73 0x00007f0b8f3363a3 in dbaui::OGenericUnoController::executeChecked (this=0x55f6d01db510, _rCommand=..., aArgs=empty uno::Sequence) at /home/michi/development/git/libreoffice/dbaccess/source/ui/browser/genericcontroller.cxx:974
    #74 0x00007f0b8f3331da in dbaui::OGenericUnoController::dispatch (this=0x55f6d01db510, _aURL=..., aArgs=empty uno::Sequence) at /home/michi/development/git/libreoffice/dbaccess/source/ui/browser/genericcontroller.cxx:586
    #75 0x00007f0bd9d06c74 in framework::(anonymous namespace)::AsyncMenuExecute (data=0x55f6d1e5cae0) at /home/michi/development/git/libreoffice/framework/source/uielement/menubarmanager.cxx:793
    #76 0x00007f0bd2d7b301 in Link<void*, void>::Call (this=0x55f6d1e5bba8, data=0x55f6d1e5cae0) at include/tools/link.hxx:105
    #77 0x00007f0bd2d76c21 in ImplHandleUserEvent (pSVEvent=0x55f6d1e5bba0) at /home/michi/development/git/libreoffice/vcl/source/window/winproc.cxx:2314
    #78 0x00007f0bd2d73b4f in ImplWindowFrameProc (_pWindow=0x55f6cfb62b50, nEvent=SalEvent::UserEvent, pEvent=0x55f6d1e5bba0) at /home/michi/development/git/libreoffice/vcl/source/window/winproc.cxx:2871
    #79 0x00007f0bca42228c in SalFrame::CallCallback (this=0x55f6cfc41890, nEvent=SalEvent::UserEvent, pEvent=0x55f6d1e5bba0) at vcl/inc/salframe.hxx:310
    #80 0x00007f0bca4441cf in QtInstance::ProcessEvent (this=0x55f6ce948eb0, aEvent=...) at vcl/qt6/../qt5/QtInstance.cxx:614
    #81 0x00007f0bd3350b9d in SalUserEventList::DispatchUserEvents(bool)::$_0::operator()() const (this=0x7ffecd752cd0) at /home/michi/development/git/libreoffice/vcl/source/app/salusereventlist.cxx:119
    #82 0x00007f0bd3350a6b in SalUserEventList::DispatchUserEvents (this=0x55f6ce948f18, bHandleAllCurrentEvents=false) at /home/michi/development/git/libreoffice/vcl/source/app/salusereventlist.cxx:120
    #83 0x00007f0bca4407d1 in QtInstance::ImplYield (this=0x55f6ce948eb0, bWait=true, bHandleAllCurrentEvents=false) at vcl/qt6/../qt5/QtInstance.cxx:510
    #84 0x00007f0bca443d91 in QtInstance::DoYield (this=0x55f6ce948eb0, bWait=true, bHandleAllCurrentEvents=false) at vcl/qt6/../qt5/QtInstance.cxx:532
    #85 0x00007f0bd3419006 in InnerYield (i_bWait=true, i_bAllEvents=false) at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:390
    #86 0x00007f0bd341888f in Application::Yield () at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:503
    #87 0x00007f0bd3418670 in Application::Execute () at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:365
    #88 0x00007f0bdcb22c05 in desktop::Desktop::Main (this=0x7ffecd754880) at /home/michi/development/git/libreoffice/desktop/source/app/app.cxx:1680
    #89 0x00007f0bd3441d56 in ImplSVMain () at /home/michi/development/git/libreoffice/vcl/source/app/svmain.cxx:231
    #90 0x00007f0bd3443889 in SVMain () at /home/michi/development/git/libreoffice/vcl/source/app/svmain.cxx:249
    #91 0x00007f0bdcb9cc6a in soffice_main () at /home/michi/development/git/libreoffice/desktop/source/app/sofficemain.cxx:122
    #92 0x000055f6b5a4b9fd in sal_main () at /home/michi/development/git/libreoffice/desktop/source/app/main.c:51
    #93 0x000055f6b5a4b9d7 in main (argc=2, argv=0x7ffecd754a88) at /home/michi/development/git/libreoffice/desktop/source/app/main.c:49

Change-Id: I3dc605a965589abf4dbcdf289460aa31507df30a
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/201362
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
bise86 pushed a commit to bise86/LibreOffice that referenced this pull request Sep 29, 2026
Don't first create a Bitmap, write that to a stream
and then load the QPixmap from that stream, but
directly get the stream and load the QPixmap from it.

This should not only be more efficient, but not
trying to create the intermediate Bitmap object also avoids
triggering an infinite recursion when done (too)
early on startup, which was seen when using
loadQPixmapIcon in QtFrame::SetIcon.

(getPixbuf in the gtk vcl plugin implementation
in vcl/unx/gtk3/gtkinst.cxx also does similarly.)

Sample local change to trigger the infinite recursion
previously:

    diff --git a/vcl/qt5/QtFrame.cxx b/vcl/qt5/QtFrame.cxx
    index 6d0c0ac..b646fd7694dd 100644
    --- a/vcl/qt5/QtFrame.cxx
    +++ b/vcl/qt5/QtFrame.cxx
    @@ -344,6 +344,8 @@ void QtFrame::SetIcon(sal_uInt16 nIcon)
             || !isWindow())
             return;

    +    loadQPixmapIcon(u"res/writer128.png"_ustr);
    +
         const QString sAppIcon = toQString(IconHelper::GetAppIconName(nIcon));
         QIcon aIcon = QIcon::fromTheme(sAppIcon);
         m_pQWidget->window()->setWindowIcon(aIcon);

Then, starting e.g. Writer would previosuly trigger an
infinite recursion. Partial backtrace:

    Thread 1 received signal SIGSEGV, Segmentation fault.
    0x00007f1c8790834f in QObject::event (this=0x5593589a5a80, e=0x7ffe98d56258) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:1452
    1452        switch (e->type()) {
    (rr) bt 100
    #0  0x00007f1c8790834f in QObject::event (this=0x5593589a5a80, e=0x7ffe98d56258) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:1452
    LibreOffice#1  0x00007f1c85872cbd in QWidget::event (this=0x5593589a5a80, event=0x7ffe98d56258) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qwidget.cpp:9467
    LibreOffice#2  0x00007f1c85af8b85 in QMainWindow::event (this=0x5593589a5a80, event=0x7ffe98d56258) at /home/michi/development/git/qt5/qtbase/src/widgets/widgets/qmainwindow.cpp:1272
    LibreOffice#3  0x00007f1c857b1a20 in QApplicationPrivate::notify_helper (this=0x559356428970, receiver=0x5593589a5a80, e=0x7ffe98d56258) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qapplication.cpp:3276
    LibreOffice#4  0x00007f1c857b58fb in QApplication::notify (this=0x5593563ce910, receiver=0x5593589a5a80, e=0x7ffe98d56258) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qapplication.cpp:3222
    LibreOffice#5  0x00007f1c87838739 in QCoreApplication::notifyInternal2 (receiver=0x5593589a5a80, event=0x7ffe98d56258) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1113
    LibreOffice#6  0x00007f1c878393a9 in QCoreApplication::sendEvent (receiver=0x5593589a5a80, event=0x7ffe98d56258) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1553
    LibreOffice#7  0x00007f1c85854857 in QWidget::setParent (this=0x5593589a5cb0, parent=0x5593589a5a80, f=...) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qwidget.cpp:10901
    LibreOffice#8  0x00007f1c858746e9 in QWidget::setParent (this=0x5593589a5cb0, parent=0x5593589a5a80) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qwidget.cpp:10742
    LibreOffice#9  0x00007f1c8583080f in QLayout::addChildWidget (this=0x5593589a75a0, w=0x5593589a5cb0) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qlayout.cpp:856
    LibreOffice#10 0x00007f1c85b0a1b0 in QMainWindowLayout::setCentralWidget (this=0x5593589a75a0, widget=0x5593589a5cb0) at /home/michi/development/git/qt5/qtbase/src/widgets/widgets/qmainwindowlayout.cpp:2860
    LibreOffice#11 0x00007f1c85af7299 in QMainWindow::setCentralWidget (this=0x5593589a5a80, widget=0x5593589a5cb0) at /home/michi/development/git/qt5/qtbase/src/widgets/widgets/qmainwindow.cpp:555
    LibreOffice#12 0x00007f1c8880d74b in QtFrame::QtFrame (this=0x5593589a6e80, pParent=0x0, nStyle=SalFrameStyleFlags::NOICON, bUseCairo=true) at vcl/qt6/../qt5/QtFrame.cxx:143
    LibreOffice#13 0x00007f1c8884480d in QtInstance::CreateFrame(SalFrame*, SalFrameStyleFlags)::$_0::operator()() const (this=0x5593589a6e60) at vcl/qt6/../qt5/QtInstance.cxx:396
    LibreOffice#14 0x00007f1c88844785 in std::__invoke_impl<void, QtInstance::CreateFrame(SalFrame*, SalFrameStyleFlags)::$_0&>(std::__invoke_other, QtInstance::CreateFrame(SalFrame*, SalFrameStyleFlags)::$_0&) (__f=...)
        at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/invoke.h:63
    LibreOffice#15 0x00007f1c88844745 in std::__invoke_r<void, QtInstance::CreateFrame(SalFrame*, SalFrameStyleFlags)::$_0&>(QtInstance::CreateFrame(SalFrame*, SalFrameStyleFlags)::$_0&) (__fn=...)
        at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/invoke.h:113
    LibreOffice#16 0x00007f1c8884462d in std::_Function_handler<void(), QtInstance::CreateFrame(SalFrame*, SalFrameStyleFlags)::$_0>::_M_invoke (__functor=...) at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/std_function.h:292
    LibreOffice#17 0x00007f1c8884674e in std::function<void()>::operator() (this=0x7ffe98d567e8) at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/std_function.h:593
    LibreOffice#18 0x00007f1c8883d46f in QtInstance::RunInMainThread (this=0x559356428580, func=...) at vcl/qt6/../qt5/QtInstance.cxx:210
    LibreOffice#19 0x00007f1c8883f91b in QtInstance::CreateFrame (this=0x559356428580, pParent=0x0, nStyle=SalFrameStyleFlags::NOICON) at vcl/qt6/../qt5/QtInstance.cxx:395
    LibreOffice#20 0x00007f1c911468d6 in vcl::Window::ImplInit (this=0x5593589a6620, pParent=0x0, nStyle=274877906944, pSystemParentData=0x0) at /home/michi/development/git/libreoffice/vcl/source/window/window.cxx:1059
    LibreOffice#21 0x00007f1c90ee2de7 in ImplBorderWindow::ImplInit (this=0x5593589a6620, pParent=0x0, nStyle=274877906944, nTypeStyle=BorderWindowStyle::Frame, pSystemParentData=0x0)
        at /home/michi/development/git/libreoffice/vcl/source/window/brdwin.cxx:1568
    LibreOffice#22 0x00007f1c90ee3368 in ImplBorderWindow::ImplBorderWindow (this=0x5593589a6620, pParent=0x0, pSystemParentData=0x0, nStyle=274877906944, nTypeStyle=BorderWindowStyle::Frame)
        at /home/michi/development/git/libreoffice/vcl/source/window/brdwin.cxx:1597
    LibreOffice#23 0x00007f1c9117cb19 in VclPtrInstance<ImplBorderWindow>::VclPtrInstance<vcl::Window*&, SystemParentData*&, long&, BorderWindowStyle&>
        (this=0x7ffe98d56da0, arg=@0x7ffe98d56dc0: 0x0, arg=@0x7ffe98d56db0: 0x0, arg=@0x7ffe98d56db8: 274877906944, arg=@0x7ffe98d56dac: BorderWindowStyle::Frame) at include/vcl/vclptr.hxx:274
    LibreOffice#24 0x00007f1c9117b405 in WorkWindow::ImplInit (this=0x5593589a5d30, pParent=0x0, nStyle=274877906944, pSystemParentData=0x0) at /home/michi/development/git/libreoffice/vcl/source/window/wrkwin.cxx:51
    LibreOffice#25 0x00007f1c9117bc67 in WorkWindow::WorkWindow (this=0x5593589a5d30, pParent=0x0, nStyle=274877906944) at /home/michi/development/git/libreoffice/vcl/source/window/wrkwin.cxx:95
    LibreOffice#26 0x00007f1c9182e653 in VclPtr<WorkWindow>::Create<decltype(nullptr), long const&>(decltype(nullptr)&&, long const&) (arg=<error reading variable: Attempt to dereference a generic pointer.>, arg=@0x7f1c90505ea8: 274877906944)
        at include/vcl/vclptr.hxx:153
    LibreOffice#27 0x00007f1c9182b1bd in ImplGetDefaultContextWindow () at /home/michi/development/git/libreoffice/vcl/source/app/svdata.cxx:283
    LibreOffice#28 0x00007f1c9182af8a in ImplGetDefaultWindow () at /home/michi/development/git/libreoffice/vcl/source/app/svdata.cxx:264
    LibreOffice#29 0x00007f1c9181c62d in Application::GetDefaultDevice () at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:1111
    LibreOffice#30 0x00007f1c916fc79d in ImageRequestParameters::scalePercentage (this=0x7ffe98d57970) at /home/michi/development/git/libreoffice/vcl/source/image/ImplImageTree.cxx:79
    LibreOffice#31 0x00007f1c916ffc08 in (anonymous namespace)::createVariant (rParameters=...) at /home/michi/development/git/libreoffice/vcl/source/image/ImplImageTree.cxx:382
    LibreOffice#32 0x00007f1c916ff343 in ImplImageTree::doLoadImage (this=0x559357ba6d30, rParameters=...) at /home/michi/development/git/libreoffice/vcl/source/image/ImplImageTree.cxx:428
    LibreOffice#33 0x00007f1c916ff0d4 in ImplImageTree::loadImage (this=0x559357ba6d30, rName="res/writer128.png", rStyle="breeze", rBitmap=..., localized=true, eFlags=ImageLoadFlags::NONE, nScalePercentage=-1)
        at /home/michi/development/git/libreoffice/vcl/source/image/ImplImageTree.cxx:365
    LibreOffice#34 0x00007f1c916faa21 in ImageTree::loadImage (this=0x7f1c929bc3f0 <ImageTree::get()::s_ImageTree>, rName="res/writer128.png", rStyle="breeze", rBitmap=..., bLocalized=true, nScalePercentage=-1, eFlags=ImageLoadFlags::NONE)
        at /home/michi/development/git/libreoffice/vcl/source/image/ImageTree.cxx:47
    LibreOffice#35 0x00007f1c916faaac in ImageTree::loadImage (this=0x7f1c929bc3f0 <ImageTree::get()::s_ImageTree>, rName="res/writer128.png", rStyle="breeze", rBitmap=..., bLocalized=true, eFlags=ImageLoadFlags::NONE)
        at /home/michi/development/git/libreoffice/vcl/source/image/ImageTree.cxx:54
    LibreOffice#36 0x00007f1c91671656 in Bitmap::loadFromIconTheme (this=0x7ffe98d57ed0, rIconName="res/writer128.png") at /home/michi/development/git/libreoffice/vcl/source/bitmap/bitmap.cxx:228
    LibreOffice#37 0x00007f1c91671543 in Bitmap::Bitmap (this=0x7ffe98d57ed0, rIconName="res/writer128.png") at /home/michi/development/git/libreoffice/vcl/source/bitmap/bitmap.cxx:217
    LibreOffice#38 0x00007f1c887bf2a2 in loadQPixmapIcon (rIconName="res/writer128.png") at include/vcl/qt/QtUtils.hxx:80
    LibreOffice#39 0x00007f1c8880e04d in QtFrame::SetIcon (this=0x5593589a4420, nIcon=1) at vcl/qt6/../qt5/QtFrame.cxx:347
    LibreOffice#40 0x00007f1c8880d88c in QtFrame::QtFrame (this=0x5593589a4420, pParent=0x0, nStyle=SalFrameStyleFlags::NOICON, bUseCairo=true) at vcl/qt6/../qt5/QtFrame.cxx:156
    LibreOffice#41 0x00007f1c8884480d in QtInstance::CreateFrame(SalFrame*, SalFrameStyleFlags)::$_0::operator()() const (this=0x5593589a4400) at vcl/qt6/../qt5/QtInstance.cxx:396
    LibreOffice#42 0x00007f1c88844785 in std::__invoke_impl<void, QtInstance::CreateFrame(SalFrame*, SalFrameStyleFlags)::$_0&>(std::__invoke_other, QtInstance::CreateFrame(SalFrame*, SalFrameStyleFlags)::$_0&) (__f=...)
        at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/invoke.h:63
    LibreOffice#43 0x00007f1c88844745 in std::__invoke_r<void, QtInstance::CreateFrame(SalFrame*, SalFrameStyleFlags)::$_0&>(QtInstance::CreateFrame(SalFrame*, SalFrameStyleFlags)::$_0&) (__fn=...)
        at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/invoke.h:113
    LibreOffice#44 0x00007f1c8884462d in std::_Function_handler<void(), QtInstance::CreateFrame(SalFrame*, SalFrameStyleFlags)::$_0>::_M_invoke (__functor=...) at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/std_function.h:292
    LibreOffice#45 0x00007f1c8884674e in std::function<void()>::operator() (this=0x7ffe98d583a8) at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/std_function.h:593
    LibreOffice#46 0x00007f1c8883d46f in QtInstance::RunInMainThread (this=0x559356428580, func=...) at vcl/qt6/../qt5/QtInstance.cxx:210
    LibreOffice#47 0x00007f1c8883f91b in QtInstance::CreateFrame (this=0x559356428580, pParent=0x0, nStyle=SalFrameStyleFlags::NOICON) at vcl/qt6/../qt5/QtInstance.cxx:395
    LibreOffice#48 0x00007f1c911468d6 in vcl::Window::ImplInit (this=0x5593589a3bc0, pParent=0x0, nStyle=274877906944, pSystemParentData=0x0) at /home/michi/development/git/libreoffice/vcl/source/window/window.cxx:1059
    LibreOffice#49 0x00007f1c90ee2de7 in ImplBorderWindow::ImplInit (this=0x5593589a3bc0, pParent=0x0, nStyle=274877906944, nTypeStyle=BorderWindowStyle::Frame, pSystemParentData=0x0)
        at /home/michi/development/git/libreoffice/vcl/source/window/brdwin.cxx:1568
    LibreOffice#50 0x00007f1c90ee3368 in ImplBorderWindow::ImplBorderWindow (this=0x5593589a3bc0, pParent=0x0, pSystemParentData=0x0, nStyle=274877906944, nTypeStyle=BorderWindowStyle::Frame)
        at /home/michi/development/git/libreoffice/vcl/source/window/brdwin.cxx:1597
    LibreOffice#51 0x00007f1c9117cb19 in VclPtrInstance<ImplBorderWindow>::VclPtrInstance<vcl::Window*&, SystemParentData*&, long&, BorderWindowStyle&>
        (this=0x7ffe98d58960, arg=@0x7ffe98d58980: 0x0, arg=@0x7ffe98d58970: 0x0, arg=@0x7ffe98d58978: 274877906944, arg=@0x7ffe98d5896c: BorderWindowStyle::Frame) at include/vcl/vclptr.hxx:274
    LibreOffice#52 0x00007f1c9117b405 in WorkWindow::ImplInit (this=0x5593589a32d0, pParent=0x0, nStyle=274877906944, pSystemParentData=0x0) at /home/michi/development/git/libreoffice/vcl/source/window/wrkwin.cxx:51
    LibreOffice#53 0x00007f1c9117bc67 in WorkWindow::WorkWindow (this=0x5593589a32d0, pParent=0x0, nStyle=274877906944) at /home/michi/development/git/libreoffice/vcl/source/window/wrkwin.cxx:95
    LibreOffice#54 0x00007f1c9182e653 in VclPtr<WorkWindow>::Create<decltype(nullptr), long const&>(decltype(nullptr)&&, long const&) (arg=<error reading variable: Attempt to dereference a generic pointer.>, arg=@0x7f1c90505ea8: 274877906944)
        at include/vcl/vclptr.hxx:153
    LibreOffice#55 0x00007f1c9182b1bd in ImplGetDefaultContextWindow () at /home/michi/development/git/libreoffice/vcl/source/app/svdata.cxx:283
    LibreOffice#56 0x00007f1c9182af8a in ImplGetDefaultWindow () at /home/michi/development/git/libreoffice/vcl/source/app/svdata.cxx:264
    LibreOffice#57 0x00007f1c9181c62d in Application::GetDefaultDevice () at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:1111
    LibreOffice#58 0x00007f1c916fc79d in ImageRequestParameters::scalePercentage (this=0x7ffe98d59530) at /home/michi/development/git/libreoffice/vcl/source/image/ImplImageTree.cxx:79
    LibreOffice#59 0x00007f1c916ffc08 in (anonymous namespace)::createVariant (rParameters=...) at /home/michi/development/git/libreoffice/vcl/source/image/ImplImageTree.cxx:382
    LibreOffice#60 0x00007f1c916ff343 in ImplImageTree::doLoadImage (this=0x559357ba6d30, rParameters=...) at /home/michi/development/git/libreoffice/vcl/source/image/ImplImageTree.cxx:428
    LibreOffice#61 0x00007f1c916ff0d4 in ImplImageTree::loadImage (this=0x559357ba6d30, rName="res/writer128.png", rStyle="breeze", rBitmap=..., localized=true, eFlags=ImageLoadFlags::NONE, nScalePercentage=-1)
        at /home/michi/development/git/libreoffice/vcl/source/image/ImplImageTree.cxx:365
    LibreOffice#62 0x00007f1c916faa21 in ImageTree::loadImage (this=0x7f1c929bc3f0 <ImageTree::get()::s_ImageTree>, rName="res/writer128.png", rStyle="breeze", rBitmap=..., bLocalized=true, nScalePercentage=-1, eFlags=ImageLoadFlags::NONE)
        at /home/michi/development/git/libreoffice/vcl/source/image/ImageTree.cxx:47
    LibreOffice#63 0x00007f1c916faaac in ImageTree::loadImage (this=0x7f1c929bc3f0 <ImageTree::get()::s_ImageTree>, rName="res/writer128.png", rStyle="breeze", rBitmap=..., bLocalized=true, eFlags=ImageLoadFlags::NONE)
        at /home/michi/development/git/libreoffice/vcl/source/image/ImageTree.cxx:54
    LibreOffice#64 0x00007f1c91671656 in Bitmap::loadFromIconTheme (this=0x7ffe98d59a90, rIconName="res/writer128.png") at /home/michi/development/git/libreoffice/vcl/source/bitmap/bitmap.cxx:228
    LibreOffice#65 0x00007f1c91671543 in Bitmap::Bitmap (this=0x7ffe98d59a90, rIconName="res/writer128.png") at /home/michi/development/git/libreoffice/vcl/source/bitmap/bitmap.cxx:217
    LibreOffice#66 0x00007f1c887bf2a2 in loadQPixmapIcon (rIconName="res/writer128.png") at include/vcl/qt/QtUtils.hxx:80
    LibreOffice#67 0x00007f1c8880e04d in QtFrame::SetIcon (this=0x5593589a19c0, nIcon=1) at vcl/qt6/../qt5/QtFrame.cxx:347
    LibreOffice#68 0x00007f1c8880d88c in QtFrame::QtFrame (this=0x5593589a19c0, pParent=0x0, nStyle=SalFrameStyleFlags::NOICON, bUseCairo=true) at vcl/qt6/../qt5/QtFrame.cxx:156
    #69 0x00007f1c8884480d in QtInstance::CreateFrame(SalFrame*, SalFrameStyleFlags)::$_0::operator()() const (this=0x5593589a19a0) at vcl/qt6/../qt5/QtInstance.cxx:396
    #70 0x00007f1c88844785 in std::__invoke_impl<void, QtInstance::CreateFrame(SalFrame*, SalFrameStyleFlags)::$_0&>(std::__invoke_other, QtInstance::CreateFrame(SalFrame*, SalFrameStyleFlags)::$_0&) (__f=...)
        at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/invoke.h:63
    #71 0x00007f1c88844745 in std::__invoke_r<void, QtInstance::CreateFrame(SalFrame*, SalFrameStyleFlags)::$_0&>(QtInstance::CreateFrame(SalFrame*, SalFrameStyleFlags)::$_0&) (__fn=...)
        at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/invoke.h:113
    #72 0x00007f1c8884462d in std::_Function_handler<void(), QtInstance::CreateFrame(SalFrame*, SalFrameStyleFlags)::$_0>::_M_invoke (__functor=...) at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/std_function.h:292
    #73 0x00007f1c8884674e in std::function<void()>::operator() (this=0x7ffe98d59f68) at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/std_function.h:593
    #74 0x00007f1c8883d46f in QtInstance::RunInMainThread (this=0x559356428580, func=...) at vcl/qt6/../qt5/QtInstance.cxx:210
    #75 0x00007f1c8883f91b in QtInstance::CreateFrame (this=0x559356428580, pParent=0x0, nStyle=SalFrameStyleFlags::NOICON) at vcl/qt6/../qt5/QtInstance.cxx:395
    #76 0x00007f1c911468d6 in vcl::Window::ImplInit (this=0x5593589a1160, pParent=0x0, nStyle=274877906944, pSystemParentData=0x0) at /home/michi/development/git/libreoffice/vcl/source/window/window.cxx:1059
    #77 0x00007f1c90ee2de7 in ImplBorderWindow::ImplInit (this=0x5593589a1160, pParent=0x0, nStyle=274877906944, nTypeStyle=BorderWindowStyle::Frame, pSystemParentData=0x0)
        at /home/michi/development/git/libreoffice/vcl/source/window/brdwin.cxx:1568
    #78 0x00007f1c90ee3368 in ImplBorderWindow::ImplBorderWindow (this=0x5593589a1160, pParent=0x0, pSystemParentData=0x0, nStyle=274877906944, nTypeStyle=BorderWindowStyle::Frame)
        at /home/michi/development/git/libreoffice/vcl/source/window/brdwin.cxx:1597
    #79 0x00007f1c9117cb19 in VclPtrInstance<ImplBorderWindow>::VclPtrInstance<vcl::Window*&, SystemParentData*&, long&, BorderWindowStyle&>
        (this=0x7ffe98d5a520, arg=@0x7ffe98d5a540: 0x0, arg=@0x7ffe98d5a530: 0x0, arg=@0x7ffe98d5a538: 274877906944, arg=@0x7ffe98d5a52c: BorderWindowStyle::Frame) at include/vcl/vclptr.hxx:274
    #80 0x00007f1c9117b405 in WorkWindow::ImplInit (this=0x5593589a0870, pParent=0x0, nStyle=274877906944, pSystemParentData=0x0) at /home/michi/development/git/libreoffice/vcl/source/window/wrkwin.cxx:51
    #81 0x00007f1c9117bc67 in WorkWindow::WorkWindow (this=0x5593589a0870, pParent=0x0, nStyle=274877906944) at /home/michi/development/git/libreoffice/vcl/source/window/wrkwin.cxx:95
    #82 0x00007f1c9182e653 in VclPtr<WorkWindow>::Create<decltype(nullptr), long const&>(decltype(nullptr)&&, long const&) (arg=<error reading variable: Attempt to dereference a generic pointer.>, arg=@0x7f1c90505ea8: 274877906944)
        at include/vcl/vclptr.hxx:153
    #83 0x00007f1c9182b1bd in ImplGetDefaultContextWindow () at /home/michi/development/git/libreoffice/vcl/source/app/svdata.cxx:283
    #84 0x00007f1c9182af8a in ImplGetDefaultWindow () at /home/michi/development/git/libreoffice/vcl/source/app/svdata.cxx:264
    #85 0x00007f1c9181c62d in Application::GetDefaultDevice () at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:1111
    #86 0x00007f1c916fc79d in ImageRequestParameters::scalePercentage (this=0x7ffe98d5b0f0) at /home/michi/development/git/libreoffice/vcl/source/image/ImplImageTree.cxx:79
    #87 0x00007f1c916ffc08 in (anonymous namespace)::createVariant (rParameters=...) at /home/michi/development/git/libreoffice/vcl/source/image/ImplImageTree.cxx:382
    #88 0x00007f1c916ff343 in ImplImageTree::doLoadImage (this=0x559357ba6d30, rParameters=...) at /home/michi/development/git/libreoffice/vcl/source/image/ImplImageTree.cxx:428
    #89 0x00007f1c916ff0d4 in ImplImageTree::loadImage (this=0x559357ba6d30, rName="res/writer128.png", rStyle="breeze", rBitmap=..., localized=true, eFlags=ImageLoadFlags::NONE, nScalePercentage=-1)
        at /home/michi/development/git/libreoffice/vcl/source/image/ImplImageTree.cxx:365
    #90 0x00007f1c916faa21 in ImageTree::loadImage (this=0x7f1c929bc3f0 <ImageTree::get()::s_ImageTree>, rName="res/writer128.png", rStyle="breeze", rBitmap=..., bLocalized=true, nScalePercentage=-1, eFlags=ImageLoadFlags::NONE)
        at /home/michi/development/git/libreoffice/vcl/source/image/ImageTree.cxx:47
    #91 0x00007f1c916faaac in ImageTree::loadImage (this=0x7f1c929bc3f0 <ImageTree::get()::s_ImageTree>, rName="res/writer128.png", rStyle="breeze", rBitmap=..., bLocalized=true, eFlags=ImageLoadFlags::NONE)
        at /home/michi/development/git/libreoffice/vcl/source/image/ImageTree.cxx:54
    #92 0x00007f1c91671656 in Bitmap::loadFromIconTheme (this=0x7ffe98d5b650, rIconName="res/writer128.png") at /home/michi/development/git/libreoffice/vcl/source/bitmap/bitmap.cxx:228
    #93 0x00007f1c91671543 in Bitmap::Bitmap (this=0x7ffe98d5b650, rIconName="res/writer128.png") at /home/michi/development/git/libreoffice/vcl/source/bitmap/bitmap.cxx:217
    #94 0x00007f1c887bf2a2 in loadQPixmapIcon (rIconName="res/writer128.png") at include/vcl/qt/QtUtils.hxx:80
    #95 0x00007f1c8880e04d in QtFrame::SetIcon (this=0x55935899ef60, nIcon=1) at vcl/qt6/../qt5/QtFrame.cxx:347
    #96 0x00007f1c8880d88c in QtFrame::QtFrame (this=0x55935899ef60, pParent=0x0, nStyle=SalFrameStyleFlags::NOICON, bUseCairo=true) at vcl/qt6/../qt5/QtFrame.cxx:156
    #97 0x00007f1c8884480d in QtInstance::CreateFrame(SalFrame*, SalFrameStyleFlags)::$_0::operator()() const (this=0x55935899ef40) at vcl/qt6/../qt5/QtInstance.cxx:396
    #98 0x00007f1c88844785 in std::__invoke_impl<void, QtInstance::CreateFrame(SalFrame*, SalFrameStyleFlags)::$_0&>(std::__invoke_other, QtInstance::CreateFrame(SalFrame*, SalFrameStyleFlags)::$_0&) (__f=...)
        at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/invoke.h:63
    #99 0x00007f1c88844745 in std::__invoke_r<void, QtInstance::CreateFrame(SalFrame*, SalFrameStyleFlags)::$_0&>(QtInstance::CreateFrame(SalFrame*, SalFrameStyleFlags)::$_0&) (__fn=...)
        at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/invoke.h:113
    (More stack frames follow...)

Change-Id: I86af1c1d55aa3cbbcc708ccbefbff3556030819d
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/201486
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Tested-by: Jenkins
bise86 pushed a commit to bise86/LibreOffice that referenced this pull request Sep 29, 2026
As is the case in other weld methods, signals about
the change of the toggle status for entries in weld::TreeView
are not supposed to be emitted when the change happens
programatically and not by manual user interaction.

Therefore, disable notify events in weld::TreeView::set_toggle
by renaming the actual toolkit-specific implementations to
do_set_toggle and making the weld::TreeView::set_toggle
base class method block signals while calling
the virtual methods.

See also e.g. weld::TreeView::insert which
uses the same approach.

This aligns the behavior of the Qt implementation
with the other ones. For example, the vcl/SalInstanceTreeView
implementation only calls weld::TreeView::signal_toggled
from SalInstanceTreeView::ToggleHdl. That one is set
via SvLBoxButtonData::SetLink in the SalInstanceTreeView ctor.
The link is called in SvLBoxButtonData::CallLink, called from
SvLBoxButton::ClickHdl, which only gets called in response
to either mouse or keyboard events.

This fixes a nullptr deref seen with the qt6 VCL
plugin and env var SAL_VCL_QT_USE_WELDED_WIDGETS=1
for the following scenario:

* start Writer
* insert an Image via "Insert" -> "Image"
* with image selected, open context menu
* activate the "Insert Caption" context menu
  entry
* in the "Insert Caption" dialog, press the
  "Auto..." button

Crash/Backtrace without this commit in place:

    Thread 1 received signal SIGSEGV, Segmentation fault.
    rtl::OUString::isEmpty (this=0x18) at include/rtl/ustring.hxx:831
    831             return pData->length == 0;
    (rr) bt
    #0  rtl::OUString::isEmpty (this=0x18) at include/rtl/ustring.hxx:831
    LibreOffice#1  0x00007fd2dba98d4b in SwCaptionOptPage::UpdateEntry (this=0x55e123635a80, nSelEntry=0) at /home/michi/development/git/libreoffice/sw/source/ui/config/optload.cxx:1238
    LibreOffice#2  0x00007fd2dba9e0aa in SwCaptionOptPage::ToggleEntryHdl (this=0x55e123635a80, rRowCol={...}) at /home/michi/development/git/libreoffice/sw/source/ui/config/optload.cxx:1347
    LibreOffice#3  0x00007fd2dba9601d in SwCaptionOptPage::LinkStubToggleEntryHdl (instance=0x55e123635a80, data={...}) at /home/michi/development/git/libreoffice/sw/source/ui/config/optload.cxx:1345
    LibreOffice#4  0x00007fd37d724a91 in Link<std::pair<weld::TreeIter const&, int> const&, void>::Call (this=0x55e11e257910, data={...}) at include/tools/link.hxx:105
    LibreOffice#5  0x00007fd37d71d2f1 in weld::TreeView::signal_toggled (this=0x55e11e2578e8, rIterCol={...}) at include/vcl/weld/TreeView.hxx:109
    LibreOffice#6  0x00007fd37d7052dd in QtInstanceTreeView::handleDataChanged (this=0x55e11e2576c0, rTopLeft=..., rBottomRight=..., rRoles=...) at vcl/qt6/../qt5/QtInstanceTreeView.cxx:981
    LibreOffice#7  0x00007fd37d72529a in QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul, 1ul, 2ul>, QtPrivate::List<QModelIndex const&, QModelIndex const&, QList<int> const&>, void, void (QtInstanceTreeView::*)(QModelIndex const&, QModelIndex const&, QList<int> const&)>::call(void (QtInstanceTreeView::*)(QModelIndex const&, QModelIndex const&, QList<int> const&), QtInstanceTreeView*, void**)::{lambda()LibreOffice#1}::operator()() const (this=0x7ffdc7bcb6b0)
        at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:128
    LibreOffice#8  0x00007fd37d7251a9 in QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul, 1ul, 2ul>, QtPrivate::List<QModelIndex const&, QModelIndex const&, QList<int> const&>, void, void (QtInstanceTreeView::*)(QModelIndex const&, QModelIndex const&, QList<int> const&)>::call(void (QtInstanceTreeView::*)(QModelIndex const&, QModelIndex const&, QList<int> const&), QtInstanceTreeView*, void**)::{lambda()LibreOffice#1}>(void**, QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul, 1ul, 2ul>, QtPrivate::List<QModelIndex const&, QModelIndex const&, QList<int> const&>, void, void (QtInstanceTreeView::*)(QModelIndex const&, QModelIndex const&, QList<int> const&)>::call(void (QtInstanceTreeView::*)(QModelIndex const&, QModelIndex const&, QList<int> const&), QtInstanceTreeView*, void**)::{lambda()LibreOffice#1}&&) (args=0x7ffdc7bcbaa0, fn=...)
        at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:66
    LibreOffice#9  0x00007fd37d7250e3 in QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul, 1ul, 2ul>, QtPrivate::List<QModelIndex const&, QModelIndex const&, QList<int> const&>, void, void (QtInstanceTreeView::*)(QModelIndex const&, QModelIndex const&, QList<int> const&)>::call
        (f=(void (QtInstanceTreeView::*)(QtInstanceTreeView * const, const QModelIndex &, const QModelIndex &, const QList<int> &)) 0x7fd37d705170 <QtInstanceTreeView::handleDataChanged(QModelIndex const&, QModelIndex const&, QList<int> const&)>, o=0x55e11e2576c0, arg=0x7ffdc7bcbaa0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:127
    LibreOffice#10 0x00007fd37d72505d in QtPrivate::FunctionPointer<void (QtInstanceTreeView::*)(QModelIndex const&, QModelIndex const&, QList<int> const&)>::call<QtPrivate::List<QModelIndex const&, QModelIndex const&, QList<int> const&>, void>
        (f=(void (QtInstanceTreeView::*)(QtInstanceTreeView * const, const QModelIndex &, const QModelIndex &, const QList<int> &)) 0x7fd37d705170 <QtInstanceTreeView::handleDataChanged(QModelIndex const&, QModelIndex const&, QList<int> const&)>, o=0x55e11e2576c0, arg=0x7ffdc7bcbaa0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:175
    LibreOffice#11 0x00007fd37d724f86 in QtPrivate::QCallableObject<void (QtInstanceTreeView::*)(QModelIndex const&, QModelIndex const&, QList<int> const&), QtPrivate::List<QModelIndex const&, QModelIndex const&, QList<int> const&>, void>::impl
        (which=1, this_=0x55e1283a4630, r=0x55e11e2576c0, a=0x7ffdc7bcbaa0, ret=0x0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:546
    LibreOffice#12 0x00007fd37c4ee572 in QtPrivate::QSlotObjectBase::call (this=0x55e1283a4630, r=0x55e11e2576c0, a=0x7ffdc7bcbaa0) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:462
    LibreOffice#13 0x00007fd37c724c6c in doActivate<false> (sender=0x55e127fd8030, signal_index=3, argv=0x7ffdc7bcbaa0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4386
    LibreOffice#14 0x00007fd37c71af23 in QMetaObject::activate (sender=0x55e127fd8030, m=0x7fd37d100d10 <QAbstractItemModel::staticMetaObject>, local_signal_index=0, argv=0x7ffdc7bcbaa0)
        at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4447
    LibreOffice#15 0x00007fd37cbc76fe in QMetaObject::activate<void, QModelIndex, QModelIndex, QList<int> > (sender=0x55e127fd8030, mo=0x7fd37d100d10 <QAbstractItemModel::staticMetaObject>, local_signal_index=0, ret=0x0, args=..., args=..., args=...)
        at qtbase/src/corelib/kernel/qobjectdefs.h:320
    LibreOffice#16 0x00007fd37cbc27c0 in QAbstractItemModel::dataChanged (this=0x55e127fd8030, _t1=..., _t2=..., _t3=...) at qtbase/src/corelib/Core_autogen/include/moc_qabstractitemmodel.cpp:658
    LibreOffice#17 0x00007fd37cc6a184 in QSortFilterProxyModelPrivate::_q_sourceDataChanged (this=0x55e1285d77a0, source_top_left=..., source_bottom_right=..., roles=...)
        at /home/michi/development/git/qt5/qtbase/src/corelib/itemmodels/qsortfilterproxymodel.cpp:1627
    LibreOffice#18 0x00007fd37ccaf63e in QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul, 1ul, 2ul>, QtPrivate::List<QModelIndex const&, QModelIndex const&, QList<int> const&>, void, void (QSortFilterProxyModelPrivate::*)(QModelIndex const&, QModelIndex const&, QList<int> const&)>::call(void (QSortFilterProxyModelPrivate::*)(QModelIndex const&, QModelIndex const&, QList<int> const&), QSortFilterProxyModelPrivate*, void**)::{lambda()LibreOffice#1}::operator()() const
        (this=0x7ffdc7bcbff0) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:128
    LibreOffice#19 0x00007fd37ccaf59d in QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul, 1ul, 2ul>, QtPrivate::List<QModelIndex const&, QModelIndex const&, QList<int> const&>, void, void (QSortFilterProxyModelPrivate::*)(QModelIndex const&, QModelIndex const&, QList<int> const&)>::call(void (QSortFilterProxyModelPrivate::*)(QModelIndex const&, QModelIndex const&, QList<int> const&), QSortFilterProxyModelPrivate*, void**)::{lambda()LibreOffice#1}>(void**, QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul, 1ul, 2ul>, QtPrivate::List<QModelIndex const&, QModelIndex const&, QList<int> const&>, void, void (QSortFilterProxyModelPrivate::*)(QModelIndex const&, QModelIndex const&, QList<int> const&)>::call(void (QSortFilterProxyModelPrivate::*)(QModelIndex const&, QModelIndex const&, QList<int> const&), QSortFilterProxyModelPrivate*, void**)::{lambda()LibreOffice#1}&&)
        (args=0x7ffdc7bcc3f0, fn=...) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:66
    LibreOffice#20 0x00007fd37ccaf557 in QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul, 1ul, 2ul>, QtPrivate::List<QModelIndex const&, QModelIndex const&, QList<int> const&>, void, void (QSortFilterProxyModelPrivate::*)(QModelIndex const&, QModelIndex const&, QList<int> const&)>::call
        (f=(void (QSortFilterProxyModelPrivate::*)(QSortFilterProxyModelPrivate * const, const QModelIndex &, const QModelIndex &, const QList<int> &)) 0x7fd37cc691f0 <QSortFilterProxyModelPrivate::_q_sourceDataChanged(QModelIndex const&, QModelIndex const&, QList<int> const&)>, o=0x55e1285d77a0, arg=0x7ffdc7bcc3f0) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:127
    LibreOffice#21 0x00007fd37ccaf4c1 in QtPrivate::FunctionPointer<void (QSortFilterProxyModelPrivate::*)(QModelIndex const&, QModelIndex const&, QList<int> const&)>::call<QtPrivate::List<QModelIndex const&, QModelIndex const&, QList<int> const&>, void>
        (f=(void (QSortFilterProxyModelPrivate::*)(QSortFilterProxyModelPrivate * const, const QModelIndex &, const QModelIndex &, const QList<int> &)) 0x7fd37cc691f0 <QSortFilterProxyModelPrivate::_q_sourceDataChanged(QModelIndex const&, QModelIndex const&, QList<int> const&)>, o=0x55e1285d77a0, arg=0x7ffdc7bcc3f0) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:175
    LibreOffice#22 0x00007fd37ccaf3f0 in QtPrivate::QPrivateSlotObject<void (QSortFilterProxyModelPrivate::*)(QModelIndex const&, QModelIndex const&, QList<int> const&), QtPrivate::List<QModelIndex const&, QModelIndex const&, QList<int> const&>, void>::impl (which=1, this_=0x55e127fd8a30, r=0x55e127fd8030, a=0x7ffdc7bcc3f0, ret=0x0) at qtbase/src/corelib/kernel/qobject_p.h:273
    LibreOffice#23 0x00007fd37c4ee572 in QtPrivate::QSlotObjectBase::call (this=0x55e127fd8a30, r=0x55e127fd8030, a=0x7ffdc7bcc3f0) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:462
    LibreOffice#24 0x00007fd37c724c6c in doActivate<false> (sender=0x55e127fd75c0, signal_index=3, argv=0x7ffdc7bcc3f0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4386
    LibreOffice#25 0x00007fd37c71af23 in QMetaObject::activate (sender=0x55e127fd75c0, m=0x7fd37d100d10 <QAbstractItemModel::staticMetaObject>, local_signal_index=0, argv=0x7ffdc7bcc3f0)
        at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4447
    LibreOffice#26 0x00007fd37cbc76fe in QMetaObject::activate<void, QModelIndex, QModelIndex, QList<int> > (sender=0x55e127fd75c0, mo=0x7fd37d100d10 <QAbstractItemModel::staticMetaObject>, local_signal_index=0, ret=0x0, args=..., args=..., args=...)
        at qtbase/src/corelib/kernel/qobjectdefs.h:320
    LibreOffice#27 0x00007fd37cbc27c0 in QAbstractItemModel::dataChanged (this=0x55e127fd75c0, _t1=..., _t2=..., _t3=...) at qtbase/src/corelib/Core_autogen/include/moc_qabstractitemmodel.cpp:658
    LibreOffice#28 0x00007fd37ba75cdd in QStandardItemModelPrivate::itemChanged (this=0x55e127fd8430, item=0x55e128008f00, roles=...) at /home/michi/development/git/qt5/qtbase/src/gui/itemmodels/qstandarditemmodel.cpp:568
    LibreOffice#29 0x00007fd37ba78c11 in QStandardItem::setData (this=0x55e128008f00, value=..., role=10) at /home/michi/development/git/qt5/qtbase/src/gui/itemmodels/qstandarditemmodel.cpp:909
    LibreOffice#30 0x00007fd37ba791dd in QStandardItem::setCheckable (this=0x55e128008f00, checkable=true) at /home/michi/development/git/qt5/qtbase/src/gui/itemmodels/qstandarditemmodel.cpp:1345
    LibreOffice#31 0x00007fd37d712230 in QtInstanceTreeView::set_toggle(weld::TreeIter const&, TriState, int)::$_0::operator()() const (this=0x55e128009370) at vcl/qt6/../qt5/QtInstanceTreeView.cxx:364
    LibreOffice#32 0x00007fd37d7121a5 in std::__invoke_impl<void, QtInstanceTreeView::set_toggle(weld::TreeIter const&, TriState, int)::$_0&>(std::__invoke_other, QtInstanceTreeView::set_toggle(weld::TreeIter const&, TriState, int)::$_0&) (__f=...)
        at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/invoke.h:63
    LibreOffice#33 0x00007fd37d712165 in std::__invoke_r<void, QtInstanceTreeView::set_toggle(weld::TreeIter const&, TriState, int)::$_0&>(QtInstanceTreeView::set_toggle(weld::TreeIter const&, TriState, int)::$_0&) (__fn=...)
        at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/invoke.h:113
    LibreOffice#34 0x00007fd37d71203d in std::_Function_handler<void(), QtInstanceTreeView::set_toggle(weld::TreeIter const&, TriState, int)::$_0>::_M_invoke (__functor=...)
        at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/std_function.h:292
    LibreOffice#35 0x00007fd37d62b07e in std::function<void()>::operator() (this=0x7ffdc7bcc838) at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/std_function.h:593
    LibreOffice#36 0x00007fd37d62282f in QtInstance::RunInMainThread (this=0x55e11e0d3580, func=...) at vcl/qt6/../qt5/QtInstance.cxx:216
    LibreOffice#37 0x00007fd37d708783 in QtInstanceTreeView::set_toggle (this=0x55e11e2576c0, rIter=..., eState=TRISTATE_FALSE, nCol=-1) at vcl/qt6/../qt5/QtInstanceTreeView.cxx:362
    LibreOffice#38 0x00007fd386df11c3 in weld::TreeView::set_toggle (this=0x55e11e2578e8, row=0, eState=TRISTATE_FALSE, col=-1) at /home/michi/development/git/libreoffice/vcl/source/weld/TreeView.cxx:37
    LibreOffice#39 0x00007fd2dba97561 in SwCaptionOptPage::Reset (this=0x55e123635a80, rSet=0x7ffdc7bccec0) at /home/michi/development/git/libreoffice/sw/source/ui/config/optload.cxx:1100
    LibreOffice#40 0x00007fd38c0d8c50 in SfxSingleTabDialogController::SetTabPage (this=0x7ffdc7bcce68, xTabPage=std::unique_ptr<SfxTabPage> = {...}) at /home/michi/development/git/libreoffice/sfx2/source/dialog/basedlgs.cxx:269
    LibreOffice#41 0x00007fd2dba930fd in SwCaptionOptDlg::SwCaptionOptDlg (this=0x7ffdc7bcce68, pParent=0x55e1282eefa0, rSet=SfxItemSet of pool 0x55e11fee13b0 with parent 0x0 and Which ranges: [(1, 165), (1000, 1253), (4021, 4081)])
        at /home/michi/development/git/libreoffice/sw/source/ui/config/optload.cxx:857
    LibreOffice#42 0x00007fd2dbc1e524 in SwCaptionDialog::CaptionHdl (this=0x55e12817af00) at /home/michi/development/git/libreoffice/sw/source/ui/frmdlg/cption.cxx:376
    LibreOffice#43 0x00007fd2dbc1cc1d in SwCaptionDialog::LinkStubCaptionHdl (instance=0x55e12817af00, data=...) at /home/michi/development/git/libreoffice/sw/source/ui/frmdlg/cption.cxx:373
    LibreOffice#44 0x00007fd37d66c901 in Link<weld::Button&, void>::Call (this=0x55e128105858, data=...) at include/tools/link.hxx:105
    LibreOffice#45 0x00007fd37d66be5c in weld::Button::signal_clicked (this=0x55e128105850) at include/vcl/weld/Button.hxx:37
    LibreOffice#46 0x00007fd37d669b7d in QtInstanceButton::buttonClicked (this=0x55e1281056b0) at vcl/qt6/../qt5/QtInstanceButton.cxx:114
    LibreOffice#47 0x00007fd37d66cd21 in QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QtInstanceButton::*)()>::call(void (QtInstanceButton::*)(), QtInstanceButton*, void**)::{lambda()LibreOffice#1}::operator()() const (this=0x7ffdc7bcd0b0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:128
    LibreOffice#48 0x00007fd37d66cc59 in QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QtInstanceButton::*)()>::call(void (QtInstanceButton::*)(), QtInstanceButton*, void**)::{lambda()LibreOffice#1}>(void**, QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QtInstanceButton::*)()>::call(void (QtInstanceButton::*)(), QtInstanceButton*, void**)::{lambda()LibreOffice#1}&&)
        (args=0x7ffdc7bcd490, fn=...) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:66
    LibreOffice#49 0x00007fd37d66cb8b in QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QtInstanceButton::*)()>::call(void (QtInstanceButton::*)(), QtInstanceButton*, void**)
        (f=(void (QtInstanceButton::*)(QtInstanceButton * const)) 0x7fd37d669b40 <QtInstanceButton::buttonClicked()>, o=0x55e1281056b0, arg=0x7ffdc7bcd490) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:127
    LibreOffice#50 0x00007fd37d66cb0d in QtPrivate::FunctionPointer<void (QtInstanceButton::*)()>::call<QtPrivate::List<>, void>(void (QtInstanceButton::*)(), QtInstanceButton*, void**)
        (f=(void (QtInstanceButton::*)(QtInstanceButton * const)) 0x7fd37d669b40 <QtInstanceButton::buttonClicked()>, o=0x55e1281056b0, arg=0x7ffdc7bcd490) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:175
    LibreOffice#51 0x00007fd37d66ca36 in QtPrivate::QCallableObject<void (QtInstanceButton::*)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*)
        (which=1, this_=0x55e1285a0ac0, r=0x55e1281056b0, a=0x7ffdc7bcd490, ret=0x0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:546
    LibreOffice#52 0x00007fd37c4ee572 in QtPrivate::QSlotObjectBase::call (this=0x55e1285a0ac0, r=0x55e1281056b0, a=0x7ffdc7bcd490) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:462
    LibreOffice#53 0x00007fd37c724c6c in doActivate<false> (sender=0x55e1283c55e0, signal_index=9, argv=0x7ffdc7bcd490) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4386
    LibreOffice#54 0x00007fd37c71af23 in QMetaObject::activate (sender=0x55e1283c55e0, m=0x7fd37b190f60 <QAbstractButton::staticMetaObject>, local_signal_index=2, argv=0x7ffdc7bcd490)
        at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4447
    LibreOffice#55 0x00007fd37a5a7bcb in QMetaObject::activate<void, bool> (sender=0x55e1283c55e0, mo=0x7fd37b190f60 <QAbstractButton::staticMetaObject>, local_signal_index=2, ret=0x0, args=@0x7ffdc7bcd4d7: false)
        at qtbase/src/corelib/kernel/qobjectdefs.h:320
    LibreOffice#56 0x00007fd37a803742 in QAbstractButton::clicked (this=0x55e1283c55e0, _t1=false) at qtbase/src/widgets/Widgets_autogen/include/moc_qabstractbutton.cpp:254
    LibreOffice#57 0x00007fd37a803657 in QAbstractButtonPrivate::emitClicked (this=0x55e128483d30) at /home/michi/development/git/qt5/qtbase/src/widgets/widgets/qabstractbutton.cpp:382
    LibreOffice#58 0x00007fd37a8034af in QAbstractButtonPrivate::click (this=0x55e128483d30) at /home/michi/development/git/qt5/qtbase/src/widgets/widgets/qabstractbutton.cpp:375
    LibreOffice#59 0x00007fd37a8049df in QAbstractButton::mouseReleaseEvent (this=0x55e1283c55e0, e=0x7ffdc7bce8a0) at /home/michi/development/git/qt5/qtbase/src/widgets/widgets/qabstractbutton.cpp:984
    LibreOffice#60 0x00007fd37a673eed in QWidget::event (this=0x55e1283c55e0, event=0x7ffdc7bce8a0) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qwidget.cpp:8993
    LibreOffice#61 0x00007fd37a8047fc in QAbstractButton::event (this=0x55e1283c55e0, e=0x7ffdc7bce8a0) at /home/michi/development/git/qt5/qtbase/src/widgets/widgets/qabstractbutton.cpp:941
    LibreOffice#62 0x00007fd37a988051 in QPushButton::event (this=0x55e1283c55e0, e=0x7ffdc7bce8a0) at /home/michi/development/git/qt5/qtbase/src/widgets/widgets/qpushbutton.cpp:697
    LibreOffice#63 0x00007fd37a5b2db0 in QApplicationPrivate::notify_helper (this=0x55e11e0d3900, receiver=0x55e1283c55e0, e=0x7ffdc7bce8a0) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qapplication.cpp:3264
    LibreOffice#64 0x00007fd37a5b4a4c in QApplication::notify (this=0x55e11e0792f0, receiver=0x55e1283c55e0, e=0x7ffdc7bce8a0) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qapplication.cpp:2744
    LibreOffice#65 0x00007fd37c63e8b9 in QCoreApplication::notifyInternal2 (receiver=0x55e1283c55e0, event=0x7ffdc7bce8a0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1117
    LibreOffice#66 0x00007fd37c63f5b9 in QCoreApplication::sendSpontaneousEvent (receiver=0x55e1283c55e0, event=0x7ffdc7bce8a0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1576
    LibreOffice#67 0x00007fd37a5b36d3 in QApplicationPrivate::sendMouseEvent
        (receiver=0x55e1283c55e0, event=0x7ffdc7bce8a0, alienWidget=0x55e1283c55e0, nativeWidget=0x55e124371270, buttonDown=0x7fd37b1cd6b0 <qt_button_down>, lastMouseReceiver=..., spontaneous=true, onlyDispatchEnterLeave=false)
        at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qapplication.cpp:2343
    LibreOffice#68 0x00007fd37a6b373d in QWidgetWindow::handleMouseEvent (this=0x55e125710bd0, event=0x7ffdc7bcf998) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qwidgetwindow.cpp:696
    #69 0x00007fd37a6b1da7 in QWidgetWindow::event (this=0x55e125710bd0, event=0x7ffdc7bcf998) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qwidgetwindow.cpp:301
    #70 0x00007fd37a5b2db0 in QApplicationPrivate::notify_helper (this=0x55e11e0d3900, receiver=0x55e125710bd0, e=0x7ffdc7bcf998) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qapplication.cpp:3264
    #71 0x00007fd37a5b6caf in QApplication::notify (this=0x55e11e0792f0, receiver=0x55e125710bd0, e=0x7ffdc7bcf998) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qapplication.cpp:3214
    #72 0x00007fd37c63e8b9 in QCoreApplication::notifyInternal2 (receiver=0x55e125710bd0, event=0x7ffdc7bcf998) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1117
    #73 0x00007fd37c63f5b9 in QCoreApplication::sendSpontaneousEvent (receiver=0x55e125710bd0, event=0x7ffdc7bcf998) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1576
    #74 0x00007fd37b477f07 in QGuiApplicationPrivate::processMouseEvent (e=0x55e1281f8d90) at /home/michi/development/git/qt5/qtbase/src/gui/kernel/qguiapplication.cpp:2513
    #75 0x00007fd37b477041 in QGuiApplicationPrivate::processWindowSystemEvent (e=0x55e1281f8d90) at /home/michi/development/git/qt5/qtbase/src/gui/kernel/qguiapplication.cpp:2237
    #76 0x00007fd37b565bcd in QWindowSystemInterface::sendWindowSystemEvents (flags=...) at /home/michi/development/git/qt5/qtbase/src/gui/kernel/qwindowsysteminterface.cpp:1112
    #77 0x00007fd37bdc179b in userEventSourceDispatch (source=0x55e11e0ed250) at /home/michi/development/git/qt5/qtbase/src/gui/platform/unix/qeventdispatcher_glib.cpp:39
    #78 0x00007fd38150f68e in g_main_dispatch (context=context@entry=0x7fd370000fd0) at ../../../glib/gmain.c:3591
    #79 0x00007fd381512a1f in g_main_context_dispatch_unlocked (context=0x7fd370000fd0) at ../../../glib/gmain.c:4451
    #80 g_main_context_iterate_unlocked (context=context@entry=0x7fd370000fd0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../../../glib/gmain.c:4516
    #81 0x00007fd3815131b0 in g_main_context_iteration (context=0x7fd370000fd0, may_block=1) at ../../../glib/gmain.c:4582
    #82 0x00007fd37ccd3c9b in QEventDispatcherGlib::processEvents (this=0x55e11e079ad0, flags=...) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:402
    #83 0x00007fd37bdc1598 in QPAEventDispatcherGlib::processEvents (this=0x55e11e079ad0, flags=...) at /home/michi/development/git/qt5/qtbase/src/gui/platform/unix/qeventdispatcher_glib.cpp:90
    #84 0x00007fd37d622092 in QtInstance::ImplYield (this=0x55e11e0d3580, bWait=true, bHandleAllCurrentEvents=false) at vcl/qt6/../qt5/QtInstance.cxx:467
    #85 0x00007fd37d625251 in QtInstance::DoYield (this=0x55e11e0d3580, bWait=true, bHandleAllCurrentEvents=false) at vcl/qt6/../qt5/QtInstance.cxx:478
    #86 0x00007fd386a28a26 in InnerYield (i_bWait=true, i_bAllEvents=false) at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:389
    #87 0x00007fd386a282af in Application::Yield () at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:502
    #88 0x00007fd386a28090 in Application::Execute () at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:364
    #89 0x00007fd39011f0f5 in desktop::Desktop::Main (this=0x7ffdc7bd1b40) at /home/michi/development/git/libreoffice/desktop/source/app/app.cxx:1679
    #90 0x00007fd386a51c0c in ImplSVMainRun () at /home/michi/development/git/libreoffice/vcl/source/app/svmain.cxx:234
    #91 0x00007fd37d62d751 in SalInstance::SVMainRun (this=0x55e11e0d3590) at vcl/inc/salinst.hxx:108
    #92 0x00007fd386a51132 in ImplSVMain () at /home/michi/development/git/libreoffice/vcl/source/app/svmain.cxx:221
    #93 0x00007fd386a52cc9 in SVMain () at /home/michi/development/git/libreoffice/vcl/source/app/svmain.cxx:252
    #94 0x00007fd39019916a in soffice_main () at /home/michi/development/git/libreoffice/desktop/source/app/sofficemain.cxx:122
    #95 0x000055e0e26279fd in sal_main () at /home/michi/development/git/libreoffice/desktop/source/app/main.c:51
    #96 0x000055e0e26279d7 in main (argc=2, argv=0x7ffdc7bd1d48) at /home/michi/development/git/libreoffice/desktop/source/app/main.c:49

Change-Id: Idc24e1eacdb512ec288476712a53fd5dc606f246
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/207156
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
cyberluke pushed a commit to cyberluke/libreoffice-fork that referenced this pull request Sep 30, 2026
…webview-test-build

fix: build the WebViewMessageHandler test only where CEF is configured
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants