diff -up qt-everywhere-opensource-src-4.8.7/src/svg/qsvghandler.cpp.me qt-everywhere-opensource-src-4.8.7/src/svg/qsvghandler.cpp --- qt-everywhere-opensource-src-4.8.7/src/svg/qsvghandler.cpp.me 2021-03-09 14:23:00.636840796 +0100 +++ qt-everywhere-opensource-src-4.8.7/src/svg/qsvghandler.cpp 2021-03-09 21:34:46.240482104 +0100 @@ -68,6 +68,7 @@ #include "private/qmath_p.h" #include "float.h" +#include QT_BEGIN_NAMESPACE @@ -630,15 +631,10 @@ static qreal toDouble(const QChar *&str) if (neg) val = -val; } else { -#if defined(Q_WS_QWS) && !defined(Q_OS_VXWORKS) - if(sizeof(qreal) == sizeof(float)) - val = strtof(temp, 0); - else -#endif - { - bool ok = false; - val = qstrtod(temp, 0, &ok); - } + val = QByteArray::fromRawData(temp, pos).toDouble(); + // Do not tolerate values too wild to be represented normally by floats + if (std::fpclassify(float(val)) != FP_NORMAL) + val = 0; } return val; @@ -2945,6 +2941,8 @@ static QSvgStyleProperty *createRadialGr ncy = toDouble(cy); if (!r.isEmpty()) nr = toDouble(r); + if (nr < 0.5) + nr = 0.5; qreal nfx = ncx; if (!fx.isEmpty())