sw/qa/extras/ooxmlexport/data/tdf158436.docx |binary
 sw/qa/extras/ooxmlexport/ooxmlexport14.cxx   |    6 ++++++
 sw/source/core/text/guess.cxx                |    5 ++++-
 3 files changed, 10 insertions(+), 1 deletion(-)

New commits:
commit 7059a1858ddb044c5f3f0c8e0386d3e1d9dd2b5f
Author:     László Németh <nem...@numbertext.org>
AuthorDate: Mon Dec 4 15:33:14 2023 +0100
Commit:     László Németh <nem...@numbertext.org>
CommitDate: Mon Dec 4 21:41:04 2023 +0100

    tdf#119908 tdf#158439 sw smart justify: fix freezing with NBSP
    
    Stop shrinking during underflow, because it resulted
    endless layout loop, e.g. when a very short word followed
    by a no-break space.
    
    Regression from commit 7d08767b890e723cd502b1c61d250924f695eb98
    "tdf#130088 tdf#119908 smart justify: fix DOCX line count + compat opt."
    
    Change-Id: Id832b7fdbc01453a30067995e14e5430b0a15232
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/160316
    Tested-by: László Németh <nem...@numbertext.org>
    Reviewed-by: László Németh <nem...@numbertext.org>

diff --git a/sw/qa/extras/ooxmlexport/data/tdf158436.docx 
b/sw/qa/extras/ooxmlexport/data/tdf158436.docx
new file mode 100644
index 000000000000..8cdcd21b4c1a
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf158436.docx differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx 
b/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx
index d9ef6b8a48d0..0656bb868795 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx
@@ -1408,6 +1408,12 @@ DECLARE_OOXMLEXPORT_TEST(testTdf130088, "tdf130088.docx")
     CPPUNIT_ASSERT_EQUAL(1, getPages());
 }
 
+DECLARE_OOXMLEXPORT_TEST(testTdf158436, "tdf158436.docx")
+{
+    // This resulted freezing
+    CPPUNIT_ASSERT_EQUAL(1, getPages());
+}
+
 CPPUNIT_TEST_FIXTURE(Test, testHyphenationAuto)
 {
     loadAndReload("hyphenation.odt");
diff --git a/sw/source/core/text/guess.cxx b/sw/source/core/text/guess.cxx
index 5e66b366c63f..37a2147d0987 100644
--- a/sw/source/core/text/guess.cxx
+++ b/sw/source/core/text/guess.cxx
@@ -82,7 +82,10 @@ bool SwTextGuess::Guess( const SwTextPortion& rPor, 
SwTextFormatInfo &rInf,
 
     // allow shrinking, i.e. more text in justified lines, depending on the 
justification algorithm
     if ( rAdjust == SvxAdjust::Block && 
rInf.GetTextFrame()->GetDoc().getIDocumentSettingAccess().get(
-                    DocumentSettingId::JUSTIFY_LINES_WITH_SHRINKING))
+                    DocumentSettingId::JUSTIFY_LINES_WITH_SHRINKING) &&
+         // tdf#158436 avoid shrinking at underflow, e.g. no-break space
+         // after a very short word resulted endless loop
+         !rInf.IsUnderflow() )
     {
         // allow up to 2% shrinking of the line
         nLineWidth = nLineWidth / 0.98 + rInf.X() / 0.98 - rInf.X();

Reply via email to