From cfb3c942d7a84086e976df97ff0342f482d9967f Mon Sep 17 00:00:00 2001 From: jean-pierre charras Date: Wed, 30 Oct 2013 21:07:52 +0100 Subject: [PATCH] Pcbnew: fix a crash when a non ascii char (i.e. a char having a code > 127) is found in a text (see Bug #1246340). Could be only a temporary fix (tested only with French non ascii chars). --- common/gal/stroke_font.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/common/gal/stroke_font.cpp b/common/gal/stroke_font.cpp index 655a16c33f..2ec1b43a0d 100644 --- a/common/gal/stroke_font.cpp +++ b/common/gal/stroke_font.cpp @@ -244,8 +244,13 @@ void STROKE_FONT::Draw( std::string aText, const VECTOR2D& aPosition, double aRo GLYPH_LIST::iterator glyphIt = m_glyphs.begin(); std::deque::iterator bbIt = m_glyphBoundingBoxes.begin(); - advance( glyphIt, (int) ( *chIt ) - (int) ' ' ); - advance( bbIt, (int) ( *chIt ) - (int) ' ' ); + unsigned dd = (unsigned) ((unsigned char) *chIt ) - (unsigned) ' '; + + if( dd >= m_glyphBoundingBoxes.size() ) + dd = '?' - ' '; + + advance( glyphIt, dd ); + advance( bbIt, dd ); GLYPH glyph = *glyphIt; @@ -297,7 +302,13 @@ VECTOR2D STROKE_FONT::computeTextSize( const std::string& aText ) const continue; std::deque::const_iterator bbIt = m_glyphBoundingBoxes.begin(); - advance( bbIt, (int) ( *chIt ) - (int) ' ' ); + unsigned dd = (unsigned) ((unsigned char)*chIt) - (unsigned) ' '; + + if( dd >= m_glyphBoundingBoxes.size() ) + dd = '?' - ' '; + + advance( bbIt, dd ); + result.x += m_scaleFactor * m_glyphSize.x * bbIt->GetEnd().x; }