[Libreoffice-commits] core.git: Branch 'distro/escriba/escriba-5.2' - sw/qa sw/source

Miklos Vajna vmiklos at collabora.co.uk
Thu Oct 26 07:21:29 UTC 2017


 sw/qa/extras/uiwriter/data/tdf113445.fodt |  348 ++++++++++++++++++++++++++++++
 sw/qa/extras/uiwriter/uiwriter.cxx        |   37 +++
 sw/source/core/layout/sectfrm.cxx         |   15 +
 sw/source/core/layout/tabfrm.cxx          |   16 -
 4 files changed, 405 insertions(+), 11 deletions(-)

New commits:
commit 1bf9f8693d61d9abe0dee19d1207b6fb1ca35639
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Wed Oct 25 17:48:32 2017 +0200

    tdf#113445 sw: avoid hitting loop control with a dozen of in-table sections
    
    The bugdoc has an (outer) table containing a single cell, which has an
    (inner) table with 12 cells, all content is inside sections, one section
    / cell.
    
    This relatively simple setup can already hit the loop control in
    lcl_RecalcRow(), as the SwLayNotify dtor always does invalidation in an
    async way, so the loop control's counter is incremented after each and
    every table cell.
    
    Instead of increasing the max tolerance in lcl_RecalcRow() (one can
    easily construct a document where the bug is still there even if the max
    is set to 100 instead of the current 10 iterations), just calculate the
    lower synchronously.
    
    Reviewed-on: https://gerrit.libreoffice.org/43848
    Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>
    Tested-by: Jenkins <ci at libreoffice.org>
    
    Conflicts:
            sw/qa/extras/uiwriter/uiwriter.cxx
    
    (cherry picked from commit cb8b20ab3aa3f790d4979385874cdd4e2a87221b)
    
    Change-Id: Ifbffe13e5f2f237e1578bdd3e17d4d8b7c34806d

diff --git a/sw/qa/extras/uiwriter/data/tdf113445.fodt b/sw/qa/extras/uiwriter/data/tdf113445.fodt
new file mode 100644
index 000000000000..b6c3de4bd516
--- /dev/null
+++ b/sw/qa/extras/uiwriter/data/tdf113445.fodt
@@ -0,0 +1,348 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oas
 is:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rpt="http://openoffice.org/2005/report" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:officeooo="http://openoffice.org/2009/office" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:formx="urn:openoffice:names:
 experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:css3t="http://www.w3.org/TR/css3-text/" office:version="1.2" office:mimetype="application/vnd.oasis.opendocument.text">
+  <office:meta>
+    <meta:generator>LibreOfficeDev/6.0.0.0.alpha1$Linux_X86_64 LibreOffice_project/54a0f24d1650637efb4557c0f72a9978bc9acc96</meta:generator>
+    <meta:creation-date>2014-11-10T09:45:40.73</meta:creation-date>
+    <dc:date>2017-10-02T14:36:23</dc:date>
+    <meta:editing-cycles>4</meta:editing-cycles>
+    <meta:editing-duration>PT1.570S</meta:editing-duration>
+    <meta:document-statistic meta:character-count="15144" meta:image-count="1" meta:non-whitespace-character-count="12952" meta:object-count="0" meta:page-count="6" meta:paragraph-count="498" meta:table-count="28" meta:word-count="2586"/>
+  </office:meta>
+  <office:settings>
+    <config:config-item-set config:name="ooo:view-settings">
+      <config:config-item config:name="ViewAreaTop" config:type="long">0</config:config-item>
+      <config:config-item config:name="ViewAreaLeft" config:type="long">0</config:config-item>
+      <config:config-item config:name="ViewAreaWidth" config:type="long">45563</config:config-item>
+      <config:config-item config:name="ViewAreaHeight" config:type="long">12305</config:config-item>
+      <config:config-item config:name="ShowRedlineChanges" config:type="boolean">true</config:config-item>
+      <config:config-item config:name="InBrowseMode" config:type="boolean">false</config:config-item>
+      <config:config-item-map-indexed config:name="Views">
+        <config:config-item-map-entry>
+          <config:config-item config:name="ViewId" config:type="string">view2</config:config-item>
+          <config:config-item config:name="ViewLeft" config:type="long">4069</config:config-item>
+          <config:config-item config:name="ViewTop" config:type="long">901</config:config-item>
+          <config:config-item config:name="VisibleLeft" config:type="long">0</config:config-item>
+          <config:config-item config:name="VisibleTop" config:type="long">0</config:config-item>
+          <config:config-item config:name="VisibleRight" config:type="long">45561</config:config-item>
+          <config:config-item config:name="VisibleBottom" config:type="long">12303</config:config-item>
+          <config:config-item config:name="ZoomType" config:type="short">0</config:config-item>
+          <config:config-item config:name="ViewLayoutColumns" config:type="short">0</config:config-item>
+          <config:config-item config:name="ViewLayoutBookMode" config:type="boolean">false</config:config-item>
+          <config:config-item config:name="ZoomFactor" config:type="short">100</config:config-item>
+          <config:config-item config:name="IsSelectedFrame" config:type="boolean">false</config:config-item>
+          <config:config-item config:name="AnchoredTextOverflowLegacy" config:type="boolean">false</config:config-item>
+        </config:config-item-map-entry>
+      </config:config-item-map-indexed>
+    </config:config-item-set>
+    <config:config-item-set config:name="ooo:configuration-settings">
+      <config:config-item config:name="PrintProspect" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="PrintLeftPages" config:type="boolean">true</config:config-item>
+      <config:config-item config:name="PrintGraphics" config:type="boolean">true</config:config-item>
+      <config:config-item config:name="PrintPageBackground" config:type="boolean">true</config:config-item>
+      <config:config-item config:name="PrintControls" config:type="boolean">true</config:config-item>
+      <config:config-item config:name="PrintAnnotationMode" config:type="short">0</config:config-item>
+      <config:config-item config:name="PrintRightPages" config:type="boolean">true</config:config-item>
+      <config:config-item config:name="PrintFaxName" config:type="string"/>
+      <config:config-item config:name="PrintPaperFromSetup" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="PrintTextPlaceholder" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="ApplyParagraphMarkFormatToNumbering" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="PrintReversed" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="TabOverMargin" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="EmbedFonts" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="SurroundTextWrapSmall" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="BackgroundParaOverDrawings" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="ClippedPictures" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="FloattableNomargins" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="UnbreakableNumberings" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="EmbedSystemFonts" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="TabOverflow" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="PrintTables" config:type="boolean">true</config:config-item>
+      <config:config-item config:name="PrintSingleJobs" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="SmallCapsPercentage66" config:type="boolean">true</config:config-item>
+      <config:config-item config:name="CollapseEmptyCellPara" config:type="boolean">true</config:config-item>
+      <config:config-item config:name="TreatSingleColumnBreakAsPageBreak" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="MathBaselineAlignment" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="AddFrameOffsets" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="IsLabelDocument" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="PrinterName" config:type="string"/>
+      <config:config-item config:name="OutlineLevelYieldsNumbering" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="MsWordCompTrailingBlanks" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="IgnoreFirstLineIndentInNumbering" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="UpdateFromTemplate" config:type="boolean">true</config:config-item>
+      <config:config-item config:name="PrintBlackFonts" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="TableRowKeep" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="EmbeddedDatabaseName" config:type="string"/>
+      <config:config-item config:name="IgnoreTabsAndBlanksForLineCalculation" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="UseOldPrinterMetrics" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="InvertBorderSpacing" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="SaveGlobalDocumentLinks" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="TabsRelativeToIndent" config:type="boolean">true</config:config-item>
+      <config:config-item config:name="Rsid" config:type="int">353015</config:config-item>
+      <config:config-item config:name="PrintProspectRTL" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="PrintEmptyPages" config:type="boolean">true</config:config-item>
+      <config:config-item config:name="ApplyUserData" config:type="boolean">true</config:config-item>
+      <config:config-item config:name="PrintHiddenText" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="AddParaTableSpacingAtStart" config:type="boolean">true</config:config-item>
+      <config:config-item config:name="FieldAutoUpdate" config:type="boolean">true</config:config-item>
+      <config:config-item config:name="UseOldNumbering" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="AddParaTableSpacing" config:type="boolean">true</config:config-item>
+      <config:config-item config:name="CharacterCompressionType" config:type="short">0</config:config-item>
+      <config:config-item config:name="SaveVersionOnClose" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="ChartAutoUpdate" config:type="boolean">true</config:config-item>
+      <config:config-item config:name="PrinterIndependentLayout" config:type="string">high-resolution</config:config-item>
+      <config:config-item config:name="IsKernAsianPunctuation" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="UseFormerObjectPositioning" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="AddVerticalFrameOffsets" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="SubtractFlysAnchoredAtFlys" config:type="boolean">true</config:config-item>
+      <config:config-item config:name="AddParaSpacingToTableCells" config:type="boolean">true</config:config-item>
+      <config:config-item config:name="AddExternalLeading" config:type="boolean">true</config:config-item>
+      <config:config-item config:name="CurrentDatabaseDataSource" config:type="string">writer-data-source-ooxml</config:config-item>
+      <config:config-item config:name="AllowPrintJobCancel" config:type="boolean">true</config:config-item>
+      <config:config-item config:name="ProtectForm" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="UseFormerLineSpacing" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="PrintDrawings" config:type="boolean">true</config:config-item>
+      <config:config-item config:name="UseFormerTextWrapping" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="UnxForceZeroExtLeading" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="TabAtLeftIndentForParagraphsInList" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="RedlineProtectionKey" config:type="base64Binary"/>
+      <config:config-item config:name="PropLineSpacingShrinksFirstLine" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="ConsiderTextWrapOnObjPos" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="RsidRoot" config:type="int">104774</config:config-item>
+      <config:config-item config:name="StylesNoDefault" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="LinkUpdateMode" config:type="short">1</config:config-item>
+      <config:config-item config:name="AlignTabStopPosition" config:type="boolean">true</config:config-item>
+      <config:config-item config:name="DoNotJustifyLinesWithManualBreak" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="DoNotResetParaAttrsForNumFont" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="CurrentDatabaseCommandType" config:type="int">0</config:config-item>
+      <config:config-item config:name="LoadReadonly" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="DoNotCaptureDrawObjsOnPage" config:type="boolean">false</config:config-item>
+      <config:config-item config:name="CurrentDatabaseCommand" config:type="string"/>
+      <config:config-item config:name="PrinterSetup" config:type="base64Binary"/>
+      <config:config-item config:name="ClipAsCharacterAnchoredWriterFlyFrames" config:type="boolean">false</config:config-item>
+    </config:config-item-set>
+  </office:settings>
+  <office:scripts>
+    <office:script script:language="ooo:Basic">
+      <ooo:libraries xmlns:ooo="http://openoffice.org/2004/office" xmlns:xlink="http://www.w3.org/1999/xlink"/>
+    </office:script>
+  </office:scripts>
+  <office:font-face-decls>
+    <style:font-face style:name="OpenSymbol" svg:font-family="OpenSymbol"/>
+    <style:font-face style:name="Tahoma1" svg:font-family="Tahoma"/>
+    <style:font-face style:name="Tahoma2" svg:font-family="Tahoma" style:font-family-generic="system"/>
+    <style:font-face style:name="Liberation Serif" svg:font-family="'Liberation Serif'" style:font-family-generic="roman" style:font-pitch="variable"/>
+    <style:font-face style:name="Arial" svg:font-family="Arial" style:font-family-generic="swiss" style:font-pitch="variable"/>
+    <style:font-face style:name="Arial1" svg:font-family="Arial" style:font-adornments="Regular" style:font-family-generic="swiss" style:font-pitch="variable"/>
+    <style:font-face style:name="Arial Unicode MS" svg:font-family="'Arial Unicode MS'" style:font-family-generic="system" style:font-pitch="variable"/>
+    <style:font-face style:name="MS Mincho" svg:font-family="'MS Mincho'" style:font-family-generic="system" style:font-pitch="variable"/>
+    <style:font-face style:name="Tahoma" svg:font-family="Tahoma" style:font-family-generic="system" style:font-pitch="variable"/>
+  </office:font-face-decls>
+  <office:styles>
+    <style:default-style style:family="graphic">
+      <style:graphic-properties svg:stroke-color="#000000" draw:fill-color="#99ccff" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm" draw:start-line-spacing-vertical="0.283cm" draw:end-line-spacing-horizontal="0.283cm" draw:end-line-spacing-vertical="0.283cm" style:flow-with-text="true"/>
+      <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" style:font-independent-line-spacing="false">
+        <style:tab-stops/>
+      </style:paragraph-properties>
+      <style:text-properties style:use-window-font-color="true" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="en" fo:country="US" style:letter-kerning="true" style:font-name-asian="Arial Unicode MS" style:font-size-asian="12pt" style:language-asian="zxx" style:country-asian="none" style:font-name-complex="Tahoma" style:font-size-complex="12pt" style:language-complex="zxx" style:country-complex="none"/>
+    </style:default-style>
+    <style:default-style style:family="paragraph">
+      <style:paragraph-properties fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="1.251cm" style:writing-mode="page"/>
+      <style:text-properties style:use-window-font-color="true" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="en" fo:country="US" style:letter-kerning="true" style:font-name-asian="Arial Unicode MS" style:font-size-asian="12pt" style:language-asian="zxx" style:country-asian="none" style:font-name-complex="Tahoma" style:font-size-complex="12pt" style:language-complex="zxx" style:country-complex="none" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2"/>
+    </style:default-style>
+    <style:default-style style:family="table">
+      <style:table-properties table:border-model="collapsing"/>
+    </style:default-style>
+    <style:default-style style:family="table-row">
+      <style:table-row-properties fo:keep-together="always"/>
+    </style:default-style>
+    <style:style style:name="Standard" style:family="paragraph" style:class="text">
+      <style:text-properties fo:language="en" fo:country="GB"/>
+    </style:style>
+  </office:styles>
+  <office:automatic-styles>
+    <style:style style:name="Table1" style:family="table">
+      <style:table-properties style:width="16.662cm" table:align="margins"/>
+    </style:style>
+    <style:style style:name="Table1.A" style:family="table-column">
+      <style:table-column-properties style:column-width="16.662cm" style:rel-column-width="65535*"/>
+    </style:style>
+    <style:style style:name="Table1.1" style:family="table-row">
+      <style:table-row-properties fo:keep-together="auto"/>
+    </style:style>
+    <style:style style:name="Table1.A1" style:family="table-cell">
+      <style:table-cell-properties fo:padding="0cm" fo:border-left="0.05pt solid #000000" fo:border-right="0.05pt solid #000000" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
+    </style:style>
+    <style:style style:name="Table2" style:family="table">
+      <style:table-properties style:width="16.623cm" fo:margin-left="0cm" fo:margin-right="0.039cm" table:align="margins"/>
+    </style:style>
+    <style:style style:name="Table2.A" style:family="table-column">
+      <style:table-column-properties style:column-width="7.664cm" style:rel-column-width="30218*"/>
+    </style:style>
+    <style:style style:name="Table2.B" style:family="table-column">
+      <style:table-column-properties style:column-width="3.669cm" style:rel-column-width="14461*"/>
+    </style:style>
+    <style:style style:name="Table2.C" style:family="table-column">
+      <style:table-column-properties style:column-width="2.096cm" style:rel-column-width="8260*"/>
+    </style:style>
+    <style:style style:name="Table2.D" style:family="table-column">
+      <style:table-column-properties style:column-width="3.194cm" style:rel-column-width="12596*"/>
+    </style:style>
+    <style:style style:name="Table2.1" style:family="table-row">
+      <style:table-row-properties fo:keep-together="auto"/>
+    </style:style>
+    <style:style style:name="Table2.A1" style:family="table-cell">
+      <style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.05pt solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
+    </style:style>
+    <style:style style:name="Table2.D1" style:family="table-cell">
+      <style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.05pt solid #000000" fo:border-right="0.05pt solid #000000" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/>
+    </style:style>
+    <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Standard" style:master-page-name="PG_5f_Default">
+      <style:paragraph-properties style:page-number="auto"/>
+    </style:style>
+    <style:style style:name="Sect1" style:family="section">
+      <style:section-properties fo:background-color="#f2f9fb" style:editable="false">
+        <style:columns fo:column-count="1" fo:column-gap="0cm"/>
+        <style:background-image/>
+      </style:section-properties>
+    </style:style>
+    <style:page-layout style:name="pm3">
+      <style:page-layout-properties fo:page-width="21.001cm" fo:page-height="7.001cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="0.4cm" fo:margin-bottom="0.499cm" fo:margin-left="2.54cm" fo:margin-right="1.799cm" fo:border="none" fo:padding="0cm" style:shadow="none" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
+        <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="none" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
+      </style:page-layout-properties>
+      <style:header-style/>
+      <style:footer-style/>
+    </style:page-layout>
+  </office:automatic-styles>
+  <office:master-styles>
+    <style:master-page style:name="PG_5f_Default" style:display-name="PG_Default" style:page-layout-name="pm3"/>
+  </office:master-styles>
+  <office:body>
+    <office:text text:use-soft-page-breaks="true">
+      <office:forms form:automatic-focus="false" form:apply-design-mode="false"/>
+      <text:sequence-decls>
+        <text:sequence-decl text:display-outline-level="0" text:name="Illustration"/>
+        <text:sequence-decl text:display-outline-level="0" text:name="Table"/>
+        <text:sequence-decl text:display-outline-level="0" text:name="Text"/>
+        <text:sequence-decl text:display-outline-level="0" text:name="Drawing"/>
+      </text:sequence-decls>
+      <text:p text:style-name="P1"/>
+      <text:p text:style-name="Standard"/>
+      <text:p text:style-name="Standard"/>
+      <text:p text:style-name="Standard"/>
+      <text:p text:style-name="Standard"/>
+      <text:p text:style-name="Standard"/>
+      <text:p text:style-name="Standard"/>
+      <text:p text:style-name="Standard"/>
+      <text:p text:style-name="Standard"/>
+      <table:table table:name="Table1" table:style-name="Table1">
+        <table:table-column table:style-name="Table1.A"/>
+        <table:table-row table:style-name="Table1.1">
+          <table:table-cell table:style-name="Table1.A1" office:value-type="string">
+            <table:table table:name="Table2" table:style-name="Table2">
+              <table:table-column table:style-name="Table2.A"/>
+              <table:table-column table:style-name="Table2.B"/>
+              <table:table-column table:style-name="Table2.C"/>
+              <table:table-column table:style-name="Table2.D"/>
+              <table:table-row table:style-name="Table2.1">
+                <table:table-cell table:style-name="Table2.A1" office:value-type="string">
+                  <text:p text:style-name="Standard">Table2:A1</text:p>
+                </table:table-cell>
+                <table:table-cell table:style-name="Table2.A1" office:value-type="string">
+                  <text:p text:style-name="Standard">Table2:B1</text:p>
+                </table:table-cell>
+                <table:table-cell table:style-name="Table2.A1" office:value-type="string">
+                  <text:p text:style-name="Standard">Table2:C1</text:p>
+                </table:table-cell>
+                <table:table-cell table:style-name="Table2.D1" office:value-type="string">
+                  <text:p text:style-name="Standard">Table2:D1</text:p>
+                </table:table-cell>
+              </table:table-row>
+              <table:table-row table:style-name="Table2.1">
+                <table:table-cell table:style-name="Table2.A1" office:value-type="string">
+                  <text:p text:style-name="Standard">Table2:A2</text:p>
+                </table:table-cell>
+                <table:table-cell table:style-name="Table2.A1" office:value-type="string">
+                  <text:p text:style-name="Standard">Table2:B2</text:p>
+                </table:table-cell>
+                <table:table-cell table:style-name="Table2.A1" office:value-type="string">
+                  <text:p text:style-name="Standard">Table2:C2</text:p>
+                </table:table-cell>
+                <table:table-cell table:style-name="Table2.D1" office:value-type="string">
+                  <text:p text:style-name="Standard">Table2:D2</text:p>
+                </table:table-cell>
+              </table:table-row>
+              <table:table-row table:style-name="Table2.1">
+                <table:table-cell table:style-name="Table2.A1" office:value-type="string">
+                  <text:section text:style-name="Sect1" text:name="Section1">
+                    <text:p text:style-name="Standard"><text:soft-page-break/>Table2:A3</text:p>
+                  </text:section>
+                </table:table-cell>
+                <table:table-cell table:style-name="Table2.A1" office:value-type="string">
+                  <text:section text:style-name="Sect1" text:name="Section2">
+                    <text:p text:style-name="Standard">Table2:B3</text:p>
+                  </text:section>
+                </table:table-cell>
+                <table:table-cell table:style-name="Table2.A1" office:value-type="string">
+                  <text:section text:style-name="Sect1" text:name="Section3">
+                    <text:p text:style-name="Standard">Table2:C3</text:p>
+                  </text:section>
+                </table:table-cell>
+                <table:table-cell table:style-name="Table2.D1" office:value-type="string">
+                  <text:section text:style-name="Sect1" text:name="Section4">
+                    <text:p text:style-name="Standard">Table2:D3</text:p>
+                  </text:section>
+                </table:table-cell>
+              </table:table-row>
+              <table:table-row table:style-name="Table2.1">
+                <table:table-cell table:style-name="Table2.A1" office:value-type="string">
+                  <text:section text:style-name="Sect1" text:name="Section5">
+                    <text:p text:style-name="Standard">Table2:A4</text:p>
+                  </text:section>
+                </table:table-cell>
+                <table:table-cell table:style-name="Table2.A1" office:value-type="string">
+                  <text:section text:style-name="Sect1" text:name="Section6">
+                    <text:p text:style-name="Standard">Table2:B4</text:p>
+                  </text:section>
+                </table:table-cell>
+                <table:table-cell table:style-name="Table2.A1" office:value-type="string">
+                  <text:section text:style-name="Sect1" text:name="Section7">
+                    <text:p text:style-name="Standard">Table2:C4</text:p>
+                  </text:section>
+                </table:table-cell>
+                <table:table-cell table:style-name="Table2.D1" office:value-type="string">
+                  <text:section text:style-name="Sect1" text:name="Section8">
+                    <text:p text:style-name="Standard">Table2:D4</text:p>
+                  </text:section>
+                </table:table-cell>
+              </table:table-row>
+              <table:table-row table:style-name="Table2.1">
+                <table:table-cell table:style-name="Table2.A1" office:value-type="string">
+                  <text:section text:style-name="Sect1" text:name="Section9">
+                    <text:p text:style-name="Standard">Table2:A5</text:p>
+                  </text:section>
+                </table:table-cell>
+                <table:table-cell table:style-name="Table2.A1" office:value-type="string">
+                  <text:section text:style-name="Sect1" text:name="Section10">
+                    <text:p text:style-name="Standard">Table2:B5</text:p>
+                  </text:section>
+                </table:table-cell>
+                <table:table-cell table:style-name="Table2.A1" office:value-type="string">
+                  <text:section text:style-name="Sect1" text:name="Section11">
+                    <text:p text:style-name="Standard">Table2:C5</text:p>
+                  </text:section>
+                </table:table-cell>
+                <table:table-cell table:style-name="Table2.D1" office:value-type="string">
+                  <text:section text:style-name="Sect1" text:name="Section12">
+                    <text:p text:style-name="Standard">Table2:D5</text:p>
+                  </text:section>
+                </table:table-cell>
+              </table:table-row>
+            </table:table>
+            <text:p text:style-name="Standard"/>
+          </table:table-cell>
+        </table:table-row>
+      </table:table>
+      <text:p text:style-name="Standard"/>
+    </office:text>
+  </office:body>
+</office:document>
diff --git a/sw/qa/extras/uiwriter/uiwriter.cxx b/sw/qa/extras/uiwriter/uiwriter.cxx
index 4a1d89fc11d0..9a8c33c1adfb 100644
--- a/sw/qa/extras/uiwriter/uiwriter.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter.cxx
@@ -213,6 +213,7 @@ public:
     void testTdf112741();
     void testTdf112860();
     void testTdf113287();
+    void testTdf113445();
     void testLinesInSectionInTable();
     void testLinesMoveBackwardsInSectionInTable();
 
@@ -333,6 +334,7 @@ public:
     CPPUNIT_TEST(testTdf112741);
     CPPUNIT_TEST(testTdf112860);
     CPPUNIT_TEST(testTdf113287);
+    CPPUNIT_TEST(testTdf113445);
     CPPUNIT_TEST_SUITE_END();
 
 private:
@@ -3895,6 +3897,41 @@ void SwUiWriterTest::testTdf113287()
     CPPUNIT_ASSERT(nSectionTop > nCellTop);
 }
 
+void SwUiWriterTest::testTdf113445()
+{
+    // Force multiple-page view.
+    SwDoc* pDoc = createDoc("tdf113445.fodt");
+    SwDocShell* pDocShell = pDoc->GetDocShell();
+    SwView* pView = pDocShell->GetView();
+    pView->SetViewLayout(/*nColumns=*/2, /*bBookMode=*/false);
+    calcLayout();
+
+    xmlDocPtr pXmlDoc = parseLayoutDump();
+    assertXPath(pXmlDoc, "//page", 2);
+    sal_uInt32 nPage1Left = getXPath(pXmlDoc, "//page[1]/infos/bounds", "left").toUInt32();
+    sal_uInt32 nPage2Left = getXPath(pXmlDoc, "//page[2]/infos/bounds", "left").toUInt32();
+    // Make sure that page 2 is on the right hand side of page 1, not below it.
+    CPPUNIT_ASSERT(nPage2Left > nPage1Left);
+
+    // Insert a new paragaph at the start of the document.
+    SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+    pWrtShell->SttDoc();
+    pWrtShell->SplitNode();
+    discardDumpedLayout();
+    pXmlDoc = parseLayoutDump();
+
+    // Make sure that Table2:C5 and Table2:D5 has its section frame inside the cell frame.
+    sal_uInt32 nCell3Top = getXPath(pXmlDoc, "//page[2]/body/tab/row/cell/tab/row[4]/cell[3]/infos/bounds", "top").toUInt32();
+    sal_uInt32 nSection3Top = getXPath(pXmlDoc, "//page[2]/body/tab/row/cell/tab/row[4]/cell[3]/section/infos/bounds", "top").toUInt32();
+    CPPUNIT_ASSERT(nSection3Top > nCell3Top);
+    sal_uInt32 nCell4Top = getXPath(pXmlDoc, "//page[2]/body/tab/row/cell/tab/row[4]/cell[4]/infos/bounds", "top").toUInt32();
+    sal_uInt32 nSection4Top = getXPath(pXmlDoc, "//page[2]/body/tab/row/cell/tab/row[4]/cell[4]/section/infos/bounds", "top").toUInt32();
+    CPPUNIT_ASSERT(nSection4Top > nCell4Top);
+    // Also check if the two cells in the same row have the same top position.
+    // This was 4818, expected only 1672.
+    CPPUNIT_ASSERT_EQUAL(nCell3Top, nCell4Top);
+}
+
 void SwUiWriterTest::testTableInSectionInTable()
 {
     // The document has a table, containing a section, containing a nested
diff --git a/sw/source/core/layout/sectfrm.cxx b/sw/source/core/layout/sectfrm.cxx
index 217f44126e81..635d7fb92c17 100644
--- a/sw/source/core/layout/sectfrm.cxx
+++ b/sw/source/core/layout/sectfrm.cxx
@@ -705,7 +705,7 @@ void SwSectionFrame::MoveContentAndDelete( SwSectionFrame* pDel, bool bSave )
     }
 }
 
-void SwSectionFrame::MakeAll(vcl::RenderContext* /*pRenderContext*/)
+void SwSectionFrame::MakeAll(vcl::RenderContext* pRenderContext)
 {
     if ( IsJoinLocked() || IsColLocked() || StackHack::IsLocked() || StackHack::Count() > 50 )
         return;
@@ -776,6 +776,19 @@ void SwSectionFrame::MakeAll(vcl::RenderContext* /*pRenderContext*/)
     (void)rCol;
 #endif
     SwLayoutFrame::MakeAll(getRootFrame()->GetCurrShell()->GetOut());
+
+    if (IsInTab())
+    {
+        // In case the section is in a table, then calculate the lower right
+        // now. Just setting the valid size flag of the lower to false may not
+        // be enough, as lcl_RecalcRow() can call
+        // SwFrame::ValidateThisAndAllLowers(), and then we don't attempt
+        // calculating the proper position of the lower.
+        SwFrame* pLower = Lower();
+        if (pLower && !pLower->GetValidPosFlag())
+            pLower->Calc(pRenderContext);
+    }
+
     UnlockJoin();
     if( m_pSection && IsSuperfluous() )
         DelEmpty( false );
diff --git a/sw/source/core/layout/tabfrm.cxx b/sw/source/core/layout/tabfrm.cxx
index 0c6db983d50d..18838adf68a2 100644
--- a/sw/source/core/layout/tabfrm.cxx
+++ b/sw/source/core/layout/tabfrm.cxx
@@ -1550,11 +1550,9 @@ static void lcl_RecalcRow( SwRowFrame& rRow, long nBottom )
         {
             if ( ++nLoopControlRuns_2 > nLoopControlMax )
             {
-#if OSL_DEBUG_LEVEL > 1
-                OSL_ENSURE( 0 != nLoopControlStage_2, "LoopControl_2 in lcl_RecalcRow: Stage 1!" );
-                OSL_ENSURE( 1 != nLoopControlStage_2, "LoopControl_2 in lcl_RecalcRow: Stage 2!!" );
-                OSL_ENSURE( 2 >  nLoopControlStage_2, "LoopControl_2 in lcl_RecalcRow: Stage 3!!!" );
-#endif
+                SAL_WARN_IF(nLoopControlStage_2 == 0, "sw.layout", "LoopControl_2 in lcl_RecalcRow: Stage 1!");
+                SAL_WARN_IF(nLoopControlStage_2 == 1, "sw.layout", "LoopControl_2 in lcl_RecalcRow: Stage 2!!");
+                SAL_WARN_IF(nLoopControlStage_2 >= 2, "sw.layout", "LoopControl_2 in lcl_RecalcRow: Stage 3!!!");
                 rRow.ValidateThisAndAllLowers( nLoopControlStage_2++ );
                 nLoopControlRuns_2 = 0;
                 if( nLoopControlStage_2 > 2 )
@@ -1598,11 +1596,9 @@ static void lcl_RecalcRow( SwRowFrame& rRow, long nBottom )
             {
                 if ( ++nLoopControlRuns_1 > nLoopControlMax )
                 {
-#if OSL_DEBUG_LEVEL > 1
-                    OSL_ENSURE( 0 != nLoopControlStage_1, "LoopControl_1 in lcl_RecalcRow: Stage 1!" );
-                    OSL_ENSURE( 1 != nLoopControlStage_1, "LoopControl_1 in lcl_RecalcRow: Stage 2!!" );
-                    OSL_ENSURE( 2 >  nLoopControlStage_1, "LoopControl_1 in lcl_RecalcRow: Stage 3!!!" );
-#endif
+                    SAL_WARN_IF(nLoopControlStage_1 == 0, "sw.layout", "LoopControl_1 in lcl_RecalcRow: Stage 1!");
+                    SAL_WARN_IF(nLoopControlStage_1 == 1, "sw.layout", "LoopControl_1 in lcl_RecalcRow: Stage 2!!");
+                    SAL_WARN_IF(nLoopControlStage_1 >= 2, "sw.layout", "LoopControl_1 in lcl_RecalcRow: Stage 3!!!");
                     rRow.ValidateThisAndAllLowers( nLoopControlStage_1++ );
                     nLoopControlRuns_1 = 0;
                     if( nLoopControlStage_1 > 2 )


More information about the Libreoffice-commits mailing list