From 715448611dcb6da20ac9b7ae22eda38ec0736f5d Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Sat, 11 Jan 2020 16:41:24 +0000 Subject: [PATCH] Fix potential divide-by-zero (from Coverity scan). --- pcbnew/eagle_plugin.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/pcbnew/eagle_plugin.cpp b/pcbnew/eagle_plugin.cpp index 618e0f90b5..cfd7dff01c 100644 --- a/pcbnew/eagle_plugin.cpp +++ b/pcbnew/eagle_plugin.cpp @@ -1820,15 +1820,19 @@ void EAGLE_PLUGIN::packagePolygon( MODULE* aModule, wxXmlNode* aTree ) const double radius = sqrt( pow( center.x - kicad_x( v1.x ), 2 ) + pow( center.y - kicad_y( v1.y ), 2 ) ); - // If we are curving, we need at least 2 segments otherwise - // delta_angle == angle - double delta_angle = angle / std::max( - 2, GetArcToSegmentCount( KiROUND( radius ), - ARC_HIGH_DEF, *v1.curve ) - 1 ); + // Don't allow a zero-radius curve + if( KiROUND( radius ) == 0 ) + radius = 1.0; - for( double a = end_angle + angle; - fabs( a - end_angle ) > fabs( delta_angle ); - a -= delta_angle ) + int segCount = GetArcToSegmentCount( KiROUND( radius ), ARC_HIGH_DEF, *v1.curve ) - 1; + + // If we are curving, we need at least 2 segments otherwise delta == angle + if( segCount < 2 ) + segCount = 2; + + double delta = angle / segCount; + + for( double a = end_angle + angle; fabs( a - end_angle ) > fabs( delta ); a -= delta ) { pts.push_back( wxPoint( KiROUND( radius * cos( a ) ),