sw/source/core/text/itratr.cxx | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-)
New commits: commit 09e86f7cef6ca3e2ca451cbbae439006820c71d4 Author: Michael Stahl <michael.st...@cib.de> AuthorDate: Thu Nov 28 12:35:40 2019 +0100 Commit: Michael Stahl <michael.st...@cib.de> CommitDate: Thu Nov 28 17:41:35 2019 +0100 sw: fix asserts from SwSubFont::GetTextSize_() on ooo54042-1.doc The function gets passed a single CH_TXT_ATR_FIELDSTART but it looks like this is a problem in SwTextNode::GetMinMaxSize(). That one should just skip over the CH_TXT_ATR_FIELD* basically, since it's only interested in the text; also CH_TXT_ATR_INPUTFIELD* while at it. Also adapt the SwTextFrame::GetScalingOfSelectedText(), as indicated by the comment. Change-Id: Idf24e84f000406d265e73441de643b022c0b3cff Reviewed-on: https://gerrit.libreoffice.org/83997 Tested-by: Jenkins Reviewed-by: Michael Stahl <michael.st...@cib.de> (cherry picked from commit e7c0f65753e04d2de3dbac56fbe86ce0b6aed9b2) Reviewed-on: https://gerrit.libreoffice.org/84009 diff --git a/sw/source/core/text/itratr.cxx b/sw/source/core/text/itratr.cxx index a27701186c1a..4933bce92c9f 100644 --- a/sw/source/core/text/itratr.cxx +++ b/sw/source/core/text/itratr.cxx @@ -1061,8 +1061,17 @@ void SwTextNode::GetMinMaxSize( sal_uLong nIndex, sal_uLong& rMin, sal_uLong &rM CH_TAB != (cChar = m_Text[sal_Int32(nStop)]) && CH_BREAK != cChar && CHAR_HARDBLANK != cChar && CHAR_HARDHYPHEN != cChar && CHAR_SOFTHYPHEN != cChar && + CH_TXT_ATR_INPUTFIELDSTART != cChar && + CH_TXT_ATR_INPUTFIELDEND != cChar && + CH_TXT_ATR_FORMELEMENT != cChar && + CH_TXT_ATR_FIELDSTART != cChar && + CH_TXT_ATR_FIELDSEP != cChar && + CH_TXT_ATR_FIELDEND != cChar && !pHint ) { + // this looks like some defensive programming to handle dummy char + // with missing hint? but it's rather silly because it may pass the + // dummy char to lcl_MinMaxString in that case... if( ( CH_TXTATR_BREAKWORD != cChar && CH_TXTATR_INWORD != cChar ) || ( nullptr == ( pHint = aIter.GetAttr( nStop ) ) ) ) ++nStop; @@ -1184,6 +1193,16 @@ void SwTextNode::GetMinMaxSize( sal_uLong nIndex, sal_uLong& rMin, sal_uLong &rM aIter.SeekAndChgAttrIter( ++nIdx, pOut ); } break; + case CH_TXT_ATR_INPUTFIELDSTART: + case CH_TXT_ATR_INPUTFIELDEND: + case CH_TXT_ATR_FORMELEMENT: + case CH_TXT_ATR_FIELDSTART: + case CH_TXT_ATR_FIELDSEP: + case CH_TXT_ATR_FIELDEND: + { // just skip it and continue with the content... + aIter.SeekAndChgAttrIter( ++nIdx, pOut ); + } + break; } } if( static_cast<long>(rMax) < aArg.nRowWidth ) @@ -1296,6 +1315,12 @@ sal_uInt16 SwTextFrame::GetScalingOfSelectedText( CHAR_HARDBLANK == cChar || CHAR_HARDHYPHEN == cChar || CHAR_SOFTHYPHEN == cChar || + CH_TXT_ATR_INPUTFIELDSTART == cChar || + CH_TXT_ATR_INPUTFIELDEND == cChar || + CH_TXT_ATR_FORMELEMENT == cChar || + CH_TXT_ATR_FIELDSTART == cChar || + CH_TXT_ATR_FIELDSEP == cChar || + CH_TXT_ATR_FIELDEND == cChar || ( (CH_TXTATR_BREAKWORD == cChar || CH_TXTATR_INWORD == cChar) && (nullptr == (pHint = aIter.GetAttr(nStop))) @@ -1371,8 +1396,17 @@ sal_uInt16 SwTextFrame::GetScalingOfSelectedText( } } // end of switch nIdx++; - } // end of while - } + } + else if (CH_TXT_ATR_INPUTFIELDSTART == cChar || + CH_TXT_ATR_INPUTFIELDEND == cChar || + CH_TXT_ATR_FORMELEMENT == cChar || + CH_TXT_ATR_FIELDSTART == cChar || + CH_TXT_ATR_FIELDSEP == cChar || + CH_TXT_ATR_FIELDEND == cChar) + { // just skip it and continue with the content... + ++nIdx; + } + } // end of while nWidth = std::max( nWidth, nProWidth ); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits