sw/source/filter/ww8/sprmids.hxx | 1 + sw/source/filter/ww8/ww8par2.cxx | 8 -------- sw/source/filter/ww8/ww8scan.cxx | 21 +++++++-------------- 3 files changed, 8 insertions(+), 22 deletions(-)
New commits: commit 475be6f24ec3190ed3476319371efc815cfbe2dd Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Fri Mar 11 17:03:41 2022 +0000 Commit: Michael Stahl <michael.st...@allotropia.de> CommitDate: Mon Mar 14 12:50:06 2022 +0100 ofz#45488 get WW8+ calculation of sprmTDefTable length right we have the calculation correct for WW7- which is what the special L_VAR2 case is for, but for the WW8+ variant that wasn't understood. Change-Id: Ic9dde07223386df796f57dd1f33e69d16d3abf21 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/131395 Tested-by: Jenkins Tested-by: Caolán McNamara <caol...@redhat.com> Reviewed-by: Caolán McNamara <caol...@redhat.com> (cherry picked from commit 13f2e8ab8d1d8b33f3208f82d21d61250f81057d) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/131360 Reviewed-by: Michael Stahl <michael.st...@allotropia.de> diff --git a/sw/source/filter/ww8/sprmids.hxx b/sw/source/filter/ww8/sprmids.hxx index ac1d33cf8a80..1d023c3424a9 100644 --- a/sw/source/filter/ww8/sprmids.hxx +++ b/sw/source/filter/ww8/sprmids.hxx @@ -66,6 +66,7 @@ const sal_uInt16 LN_SGprfIhdt = 0x3014; const sal_uInt16 LN_SBCustomize = 0x301e; const sal_uInt16 LN_SPropRMark = 0xd227; const sal_uInt16 LN_SFFacingCol = 0x3229; +const sal_uInt16 LN_TDefTable = 0xd608; const sal_uInt16 LN_TDefTable10 = 0xd606; const sal_uInt16 LN_THTMLProps = 0x740c; const sal_uInt16 LN_TSetBrc10 = 0xd626; diff --git a/sw/source/filter/ww8/ww8par2.cxx b/sw/source/filter/ww8/ww8par2.cxx index 52ad77c6c6ec..3f3c3adfb74f 100644 --- a/sw/source/filter/ww8/ww8par2.cxx +++ b/sw/source/filter/ww8/ww8par2.cxx @@ -1141,14 +1141,6 @@ WW8TabBandDesc::WW8TabBandDesc( WW8TabBandDesc const & rBand ) // ReadDef reads the cell position and the borders of a band void WW8TabBandDesc::ReadDef(bool bVer67, const sal_uInt8* pS, short nLen) { - if (!bVer67) - { - //the ww8 version of this is unusual in masquerading as a srpm with a - //single byte len arg while it really has a word len arg, after this - //increment nLen is correct to describe the remaining amount of data - pS++; - } - --nLen; //reduce len by expected nCols arg if (nLen < 0) return; diff --git a/sw/source/filter/ww8/ww8scan.cxx b/sw/source/filter/ww8/ww8scan.cxx index cf81cc434560..71c424bf4546 100644 --- a/sw/source/filter/ww8/ww8scan.cxx +++ b/sw/source/filter/ww8/ww8scan.cxx @@ -704,7 +704,7 @@ const wwSprmSearcher *wwSprmParser::GetWW8SprmSearcher() {NS_sprm::LN_TDefTable10, { 0, L_VAR} }, // "sprmTDefTable10" tap.rgdxaCenter, // tap.rgtc;complex InfoRow<NS_sprm::TDyaRowHeight>(), // tap.dyaRowHeight;dya;word; - InfoRow<NS_sprm::TDefTable>(), // tap.rgtc;complex + {NS_sprm::LN_TDefTable, { 0, L_VAR2} }, // "sprmTDefTable" tap.rgtc;complex InfoRow<NS_sprm::TDefTableShd80>(), // tap.rgshd;complex InfoRow<NS_sprm::TTlp>(), // tap.tlp;TLP;4 bytes; InfoRow<NS_sprm::TFBiDi>(), // ;;; @@ -8413,18 +8413,6 @@ sal_uInt16 wwSprmParser::GetSprmTailLen(sal_uInt16 nId, const sal_uInt8* pSprm, nL = 2 + 4 * nDel + 3 * nIns; } break; - case 0xD608: - { - sal_uInt8 nIndex = 1 + mnDelta; - if (nIndex + 1 >= nRemLen) - { - SAL_WARN("sw.ww8", "sprm longer than remaining bytes, doc or parser is wrong"); - nL = 0; - } - else - nL = SVBT16ToUInt16(&pSprm[nIndex]); - break; - } default: switch (aSprm.nVari) { @@ -8448,8 +8436,13 @@ sal_uInt16 wwSprmParser::GetSprmTailLen(sal_uInt16 nId, const sal_uInt8* pSprm, nCount = 0; } else + { nCount = SVBT16ToUInt16(&pSprm[nIndex]); - nL = static_cast< sal_uInt16 >(nCount + aSprm.nLen - 1); + SAL_WARN_IF(nCount < 1, "sw.ww8", "length should have been at least 1"); + if (nCount) + --nCount; + } + nL = static_cast<sal_uInt16>(nCount + aSprm.nLen); break; } default: