Author: jghali
Date: Fri Sep  1 10:49:39 2017
New Revision: 22151

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=22151
Log:
fix potential crashes in charstyle widget caused by unexpected languages 
strings such as "fr_FR.UTF-8"

Modified:
    branches/Version14x/Scribus/scribus/scribusapp.cpp
    branches/Version14x/Scribus/scribus/util.cpp
    branches/Version14x/Scribus/scribus/util.h

Modified: branches/Version14x/Scribus/scribus/scribusapp.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=22151&path=/branches/Version14x/Scribus/scribus/scribusapp.cpp
==============================================================================
--- branches/Version14x/Scribus/scribus/scribusapp.cpp  (original)
+++ branches/Version14x/Scribus/scribus/scribusapp.cpp  Fri Sep  1 10:49:39 2017
@@ -35,14 +35,15 @@
 #include <QLocale>
 #include <QTextStream>
 
+#include "commonstrings.h"
 #include "scribusapp.h"
 #include "scribuscore.h"
 #include "scpaths.h"
 #include "prefsfile.h"
 #include "langmgr.h"
 #include "prefsmanager.h"
-#include "commonstrings.h"
 #include "upgradechecker.h"
+#include "util.h"
 
 #if defined(_WIN32)
 #include <windows.h>
@@ -281,6 +282,7 @@
                                PrefsContext* userprefsContext = 
prefsFile->getContext("user_preferences");
                                if (userprefsContext) {
                                        QString prefslang = 
userprefsContext->get("gui_language","");
+                                       prefslang = cleanupLang(prefslang);
                                        if (!prefslang.isEmpty())
                                                langs.push_back(prefslang);
                                }
@@ -290,11 +292,23 @@
        }
 
        if (!(lang = ::getenv("LC_ALL")).isEmpty())
-               langs.push_back(lang);
+       {
+               lang = cleanupLang(lang);
+               if (!lang.isEmpty())
+                       langs.push_back(lang);
+       }
        if (!(lang = ::getenv("LC_MESSAGES")).isEmpty())
-               langs.push_back(lang);
+       {
+               lang = cleanupLang(lang);
+               if (!lang.isEmpty())
+                       langs.push_back(lang);
+       }
        if (!(lang = ::getenv("LANG")).isEmpty())
-               langs.push_back(lang);
+       {
+               lang = cleanupLang(lang);
+               if (!lang.isEmpty())
+                       langs.push_back(lang);
+       }
 
 #if defined(_WIN32)
        wchar_t out[256];
@@ -317,7 +331,7 @@
        }
 #endif
 
-       langs.push_back(QString(QLocale::system().name()));
+       langs.push_back(QLocale::system().name());
 
        // remove duplicate entries...
        QStringList::Iterator it = langs.end();

Modified: branches/Version14x/Scribus/scribus/util.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=22151&path=/branches/Version14x/Scribus/scribus/util.cpp
==============================================================================
--- branches/Version14x/Scribus/scribus/util.cpp        (original)
+++ branches/Version14x/Scribus/scribus/util.cpp        Fri Sep  1 10:49:39 2017
@@ -50,6 +50,16 @@
 void sDebug(QString message)
 {
        qDebug("%s", message.toAscii().constData());
+}
+
+QString cleanupLang(const QString& lang)
+{
+       int dotIndex = lang.indexOf(QChar('.'));
+       if (dotIndex < 0)
+               return lang;
+
+       QString cleanLang = lang.left(dotIndex);
+       return cleanLang;
 }
 
 int System(const QString exename, const QStringList & args, const QString 
fileStdErr, const QString fileStdOut, bool* cancel)

Modified: branches/Version14x/Scribus/scribus/util.h
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=22151&path=/branches/Version14x/Scribus/scribus/util.h
==============================================================================
--- branches/Version14x/Scribus/scribus/util.h  (original)
+++ branches/Version14x/Scribus/scribus/util.h  Fri Sep  1 10:49:39 2017
@@ -37,7 +37,10 @@
 class  ScStreamFilter;
 struct CopyPasteBuffer;
 
-// class Foi;
+/*!
+\brief Cleanup language strings from extensions such as ".UTF-8" we can get 
from environment variables
+*/
+QString cleanupLang(const QString& lang);
 
 /*! \brief Compare double values by pre-multiplying by 10000 and converting to 
long if possible.
 If premultiplication does not allow to store result in a long value, perform a 
standard comparison.


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

Reply via email to