diff options
Diffstat (limited to 'src/corelib/tools/qstring.cpp')
-rw-r--r-- | src/corelib/tools/qstring.cpp | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp index e0d2fc3a5e..b965e35175 100644 --- a/src/corelib/tools/qstring.cpp +++ b/src/corelib/tools/qstring.cpp @@ -40,6 +40,7 @@ #include <qtextcodec.h> #endif #include <private/qutfcodec_p.h> +#include <private/qlocale_tools_p.h> #include "qsimd_p.h" #include <qnumeric.h> #include <qdatastream.h> @@ -5885,13 +5886,17 @@ static uint parse_flag_characters(const char * &c) Q_DECL_NOTHROW static int parse_field_width(const char * &c) { - QString width_str; - while (*c != '\0' && qIsDigit(*c)) - width_str.append(QLatin1Char(*c++)); + Q_ASSERT(qIsDigit(*c)); // can't be negative - started with a digit // contains at least one digit - return width_str.toInt(); + const char *endp; + bool ok; + const qulonglong result = qstrtoull(c, &endp, 10, &ok); + c = endp; + while (qIsDigit(*c)) // preserve Qt 5.5 behavior of consuming all digits, no matter how many + ++c; + return ok && result < qulonglong(std::numeric_limits<int>::max()) ? int(result) : 0; } /*! |