From ea7ff62816f6b1b8f788311fd037b6edb0f7bf44 Mon Sep 17 00:00:00 2001 From: Daria Ermakova Date: Wed, 18 Feb 2026 16:08:04 +0300 Subject: [PATCH] Fix bug 78772 --- .../OfficeDrawing/Shapetypes/ArcType.h | 2 +- .../Biff_structures/ODRAW/OfficeArtFOPTE.h | 80 ++++++++++--------- 2 files changed, 43 insertions(+), 39 deletions(-) diff --git a/MsBinaryFile/DocFile/OfficeDrawing/Shapetypes/ArcType.h b/MsBinaryFile/DocFile/OfficeDrawing/Shapetypes/ArcType.h index 9b986763f3..91346483bb 100644 --- a/MsBinaryFile/DocFile/OfficeDrawing/Shapetypes/ArcType.h +++ b/MsBinaryFile/DocFile/OfficeDrawing/Shapetypes/ArcType.h @@ -42,7 +42,7 @@ namespace DocFileFormat { ShapeConcentricFill = true; Joins = round; - Path = L"wr-21600,,21600,43200,,,21600,21600nfewr-21600,,21600,43200,,,21600,21600l,21600nsxe"; + Path = L"wr-21600,,21600,43200,,,21600,21600nfe"; Formulas.push_back( L"val #2"); Formulas.push_back( L"val #3"); diff --git a/MsBinaryFile/XlsFile/Format/Logic/Biff_structures/ODRAW/OfficeArtFOPTE.h b/MsBinaryFile/XlsFile/Format/Logic/Biff_structures/ODRAW/OfficeArtFOPTE.h index f9cfeda544..466136b320 100644 --- a/MsBinaryFile/XlsFile/Format/Logic/Biff_structures/ODRAW/OfficeArtFOPTE.h +++ b/MsBinaryFile/XlsFile/Format/Logic/Biff_structures/ODRAW/OfficeArtFOPTE.h @@ -1068,50 +1068,44 @@ public: { case ODRAW::rtLineTo: { - for (_UINT16 j = 0; j < m_arSegments[i].m_nCount; ++j) - { - if (valuePointer + 1 > m_arPoints.size()) - { - break; + if (valuePointer + 1 > m_arPoints.size()) + { + break; - strVmlPath += L"l"; - strVmlPath += std::to_wstring(m_arPoints[0].x); - strVmlPath += L","; - strVmlPath += std::to_wstring(m_arPoints[0].y); + strVmlPath += L"l"; + strVmlPath += std::to_wstring(m_arPoints[0].x); + strVmlPath += L","; + strVmlPath += std::to_wstring(m_arPoints[0].y); - ++valuePointer; - } - else - { - strVmlPath += L"l"; - strVmlPath += std::to_wstring(m_arPoints[valuePointer].x ); - strVmlPath += L","; - strVmlPath += std::to_wstring(m_arPoints[valuePointer].y ); + ++valuePointer; + } + else + { + strVmlPath += L"l"; + strVmlPath += std::to_wstring(m_arPoints[valuePointer].x ); + strVmlPath += L","; + strVmlPath += std::to_wstring(m_arPoints[valuePointer].y ); - ++valuePointer; - } - } + ++valuePointer; + } }break; case ODRAW::rtCurveTo: { - for (_UINT16 j = 0; j < m_arSegments[i].m_nCount; ++j) - { - if (valuePointer + 3 > m_arPoints.size()) - break; - strVmlPath += L"c"; - strVmlPath += std::to_wstring(m_arPoints[valuePointer].x ); - strVmlPath += L","; - strVmlPath += std::to_wstring(m_arPoints[valuePointer].y ); - strVmlPath += L","; - strVmlPath += std::to_wstring(m_arPoints[valuePointer + 1].x ); - strVmlPath += L","; - strVmlPath += std::to_wstring(m_arPoints[valuePointer + 1].y ); - strVmlPath += L","; - strVmlPath += std::to_wstring(m_arPoints[valuePointer + 2].x ); - strVmlPath += L","; - strVmlPath += std::to_wstring(m_arPoints[valuePointer + 2].y ); - valuePointer += 3; - } + if (valuePointer + 3 > m_arPoints.size()) + break; + strVmlPath += L"c"; + strVmlPath += std::to_wstring(m_arPoints[valuePointer].x ); + strVmlPath += L","; + strVmlPath += std::to_wstring(m_arPoints[valuePointer].y ); + strVmlPath += L","; + strVmlPath += std::to_wstring(m_arPoints[valuePointer + 1].x ); + strVmlPath += L","; + strVmlPath += std::to_wstring(m_arPoints[valuePointer + 1].y ); + strVmlPath += L","; + strVmlPath += std::to_wstring(m_arPoints[valuePointer + 2].x ); + strVmlPath += L","; + strVmlPath += std::to_wstring(m_arPoints[valuePointer + 2].y ); + valuePointer += 3; }break; case ODRAW::rtMoveTo: { @@ -1126,6 +1120,16 @@ public: } } break; + case ODRAW::rtNoFill: + { + strVmlPath += L"nf"; + } + break; + case ODRAW::rtNoStroke: + { + strVmlPath += L"ns"; + } + break; case ODRAW::rtClose: { strVmlPath += L"x";