Author: craig
Date: Fri Dec 29 17:02:50 2017
New Revision: 22294

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=22294
Log:
Fix Coverity 1396748 / 1396753

Modified:
    trunk/Scribus/scribus/text/boxes.cpp

Modified: trunk/Scribus/scribus/text/boxes.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=22294&path=/trunk/Scribus/scribus/text/boxes.cpp
==============================================================================
--- trunk/Scribus/scribus/text/boxes.cpp        (original)
+++ trunk/Scribus/scribus/text/boxes.cpp        Fri Dec 29 17:02:50 2017
@@ -753,21 +753,24 @@
 {
        if (firstChar() != lastChar())
        {
+               BreakIterator *it = StoryText::getGraphemeIterator();
+               QString text(story.text(firstChar(), lastChar() - firstChar() + 
1));
+               it->setText(const_cast<UChar*>(text.utf16()));
                int count = 0;
-               BreakIterator *it = StoryText::getGraphemeIterator();
-               QString text = story.text(firstChar(), lastChar() - firstChar() 
+ 1);
-               it->setText((const UChar*)text.utf16());
                while (it->next() != BreakIterator::DONE)
                        count++;
+               if (count == 0)
+                       qFatal("GlyphBox::pointToPosition: divide by zero 
error");
+
                bool rtlLayout = m_glyphRun.hasFlag(ScLayout_RightToLeft);
-
                double componentWidth = width() / count;
                for (int i = 0; i < count; i++)
                {
                        double componentX;
-                       componentX = x() + (componentWidth * i);
                        if (rtlLayout)
                                componentX = x() + width() - (componentWidth * 
(i + 1));
+                       else
+                               componentX = x() + (componentWidth * i);
 
                        if ((coord.x() >= componentX && coord.x() <= componentX 
+ componentWidth))
                        {
@@ -793,33 +796,35 @@
 
 QLineF GlyphBox::positionToPoint(int pos, const StoryText& story) const
 {
-       double xPos;
-
+       double xPos = 0.0;
        if (firstChar() != lastChar())
        {
-               int count = 0;
                int index = 0;
                BreakIterator *it = StoryText::getGraphemeIterator();
-               QString text = story.text(firstChar(), lastChar() - firstChar() 
+ 1);
-               it->setText((const UChar*)text.utf16());
+               QString text(story.text(firstChar(), lastChar() - firstChar() + 
1));
+               it->setText(const_cast<UChar*>(text.utf16()));
+               int count = 0;
                while (it->next() != BreakIterator::DONE)
                {
                        count++;
                        if (pos - firstChar() == it->current())
                                index = count;
                }
+               if (count == 0)
+                       qFatal("GlyphBox::positionToPoint: divide by zero 
error");
 
                double componentWidth = width() / count;
-
-               xPos = x() + (componentWidth * index);
                if (m_glyphRun.hasFlag(ScLayout_RightToLeft))
                        xPos = x() + width() - (componentWidth * index);
+               else
+                       xPos = x() + (componentWidth * index);
        }
        else
        {
-               xPos = x();
                if (m_glyphRun.hasFlag(ScLayout_RightToLeft))
                        xPos = x() + width();
+               else
+                       xPos = x();
        }
 
        return QLineF(xPos, y(), xPos, y() + height());


_______________________________________________
scribus-commit mailing list
[email protected]
http://lists.scribus.net/mailman/listinfo/scribus-commit

Reply via email to