diff options
Diffstat (limited to 'src/quick')
| -rw-r--r-- | src/quick/items/qquicktextdocument.cpp | 4 | ||||
| -rw-r--r-- | src/quick/util/qquickstyledtext.cpp | 19 |
2 files changed, 19 insertions, 4 deletions
diff --git a/src/quick/items/qquicktextdocument.cpp b/src/quick/items/qquicktextdocument.cpp index d11bae5919..798b0d0599 100644 --- a/src/quick/items/qquicktextdocument.cpp +++ b/src/quick/items/qquicktextdocument.cpp @@ -590,9 +590,9 @@ QSizeF QQuickTextImageHandler::intrinsicSize( { if (format.isImageFormat()) { QTextImageFormat imageFormat = format.toImageFormat(); - int width = qRound(imageFormat.width()); + int width = qRound(qBound(qreal(INT_MIN), imageFormat.width(), qreal(INT_MAX))); const bool hasWidth = imageFormat.hasProperty(QTextFormat::ImageWidth) && width > 0; - const int height = qRound(imageFormat.height()); + const int height = qRound(qBound(qreal(INT_MIN), imageFormat.height(), qreal(INT_MAX))); const bool hasHeight = imageFormat.hasProperty(QTextFormat::ImageHeight) && height > 0; const auto maxWidth = imageFormat.maximumWidth(); const bool hasMaxWidth = imageFormat.hasProperty(QTextFormat::ImageMaxWidth) && maxWidth.type() != QTextLength::VariableLength; diff --git a/src/quick/util/qquickstyledtext.cpp b/src/quick/util/qquickstyledtext.cpp index bb003c19a6..7d21c8999f 100644 --- a/src/quick/util/qquickstyledtext.cpp +++ b/src/quick/util/qquickstyledtext.cpp @@ -11,6 +11,11 @@ #include "qquickstyledtext_p.h" #include <QQmlContext> #include <QtGui/private/qtexthtmlparser_p.h> +#include <QtGui/private/qoutlinemapper_p.h> + +#ifndef QQUICKSTYLEDPARSER_COORD_LIMIT +# define QQUICKSTYLEDPARSER_COORD_LIMIT QT_RASTER_COORD_LIMIT +#endif Q_STATIC_LOGGING_CATEGORY(lcStyledText, "qt.quick.styledtext") @@ -660,9 +665,19 @@ void QQuickStyledTextPrivate::parseImageAttributes(const QChar *&ch, const QStri if (is_equal_ignoring_case(attr.first, QLatin1String("src"))) { image->url = QUrl(attr.second.toString()); } else if (is_equal_ignoring_case(attr.first, QLatin1String("width"))) { - image->size.setWidth(attr.second.toString().toInt()); + bool ok; + int v = attr.second.toString().toInt(&ok); + if (ok && v <= QQUICKSTYLEDPARSER_COORD_LIMIT) + image->size.setWidth(v); + else + qCWarning(lcStyledText) << "Invalid width provided for <img>"; } else if (is_equal_ignoring_case(attr.first, QLatin1String("height"))) { - image->size.setHeight(attr.second.toString().toInt()); + bool ok; + int v = attr.second.toString().toInt(&ok); + if (ok && v <= QQUICKSTYLEDPARSER_COORD_LIMIT) + image->size.setHeight(v); + else + qCWarning(lcStyledText) << "Invalid height provided for <img>"; } else if (is_equal_ignoring_case(attr.first, QLatin1String("align"))) { if (is_equal_ignoring_case(attr.second, QLatin1String("top"))) { image->align = QQuickStyledTextImgTag::Top; |
