hwpfilter/source/hwpreader.cxx | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-)
New commits: commit 94e8b4b6a5ca957e1426f47cda898f175932183c Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Sat Mar 5 14:05:54 2022 +0000 Commit: Caolán McNamara <caol...@redhat.com> CommitDate: Sat Mar 5 21:42:20 2022 +0100 ofz#45167 Integer-overflow Change-Id: Ib112686b192558421419a8695db9c3f35c5312da Reviewed-on: https://gerrit.libreoffice.org/c/core/+/131058 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caol...@redhat.com> diff --git a/hwpfilter/source/hwpreader.cxx b/hwpfilter/source/hwpreader.cxx index ff551174219f..a20d71b5c5c3 100644 --- a/hwpfilter/source/hwpreader.cxx +++ b/hwpfilter/source/hwpreader.cxx @@ -4054,22 +4054,26 @@ void HwpReader::makePictureDRAW(HWPDrawingObject *drawobj, Picture * hbox) mxList->addAttribute("svg:height", sXML_CDATA, OUString::number (WTMM( drawobj->extent.h )) + "mm"); if( drawobj->type == HWPDO_ADVANCED_ELLIPSE ){ - if( drawobj->u.arc.radial[0].x != drawobj->u.arc.radial[1].x - || drawobj->u.arc.radial[0].y != drawobj->u.arc.radial[1].y ){ - int Cx,Cy; - Cx = ( drawobj->offset2.x + drawobj->extent.w ) / 2; - Cy = ( drawobj->offset2.y + drawobj->extent.h ) / 2; - - double start_angle, end_angle; - start_angle = calcAngle( Cx, Cy, drawobj->u.arc.radial[0].x, drawobj->u.arc.radial[0].y ); - end_angle = calcAngle( Cx, Cy, drawobj->u.arc.radial[1].x, drawobj->u.arc.radial[1].y ); - if( drawobj->property.fill_color < 0xffffff ) - mxList->addAttribute("draw:kind", sXML_CDATA, "section"); - else - mxList->addAttribute("draw:kind", sXML_CDATA, "arc"); - mxList->addAttribute("draw:start-angle", sXML_CDATA, OUString::number(start_angle )); - mxList->addAttribute("draw:end-angle", sXML_CDATA, OUString::number(end_angle)); - } + if (drawobj->u.arc.radial[0].x != drawobj->u.arc.radial[1].x || + drawobj->u.arc.radial[0].y != drawobj->u.arc.radial[1].y) { + + int Cx, Cy; + if (!o3tl::checked_add(drawobj->offset2.x, drawobj->extent.w, Cx) && + !o3tl::checked_add(drawobj->offset2.y, drawobj->extent.h, Cy)) + { + Cx /= 2; + Cy /= 2; + + double start_angle = calcAngle( Cx, Cy, drawobj->u.arc.radial[0].x, drawobj->u.arc.radial[0].y ); + double end_angle = calcAngle( Cx, Cy, drawobj->u.arc.radial[1].x, drawobj->u.arc.radial[1].y ); + if( drawobj->property.fill_color < 0xffffff ) + mxList->addAttribute("draw:kind", sXML_CDATA, "section"); + else + mxList->addAttribute("draw:kind", sXML_CDATA, "arc"); + mxList->addAttribute("draw:start-angle", sXML_CDATA, OUString::number(start_angle )); + mxList->addAttribute("draw:end-angle", sXML_CDATA, OUString::number(end_angle)); + } + } } startEl("draw:ellipse"); mxList->clear();