From 9379e47831bd634aa046cf9a21542371ddde5c66 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Fri, 20 Nov 2020 15:58:04 +0100 Subject: Fix safe conversion Ensure the resulting QScFixed values are no larger than can be safely returned to int after shifting the fixed factor away. Fixes: QTBUG-88683 Change-Id: Id0754b021e5fa9a3cf0d15e37ac643cfc1509993 Reviewed-by: Eirik Aavitsland (cherry picked from commit a31484302d71c29c0e0e62f9941f9d5f0c87f9aa) Reviewed-by: Qt Cherry-pick Bot --- src/gui/painting/qrasterizer.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'src/gui/painting/qrasterizer.cpp') diff --git a/src/gui/painting/qrasterizer.cpp b/src/gui/painting/qrasterizer.cpp index 921d260320..5a63840c03 100644 --- a/src/gui/painting/qrasterizer.cpp +++ b/src/gui/painting/qrasterizer.cpp @@ -725,10 +725,17 @@ static inline qreal qSafeDivide(qreal x, qreal y) static inline QScFixed qSafeFloatToQScFixed(qreal x) { qreal tmp = x * QScFixedFactor; - if (tmp > qreal(std::numeric_limits::max())) - return std::numeric_limits::max(); - else if (tmp < qreal(std::numeric_limits::min())) - return std::numeric_limits::min(); +#if Q_PROCESSOR_WORDSIZE == 8 + if (tmp > qreal(INT_MAX) * QScFixedFactor) + return QScFixed(INT_MAX) * QScFixedFactor; + else if (tmp < qreal(INT_MIN) * QScFixedFactor) + return QScFixed(INT_MIN) * QScFixedFactor; +#else + if (tmp > qreal(INT_MAX)) + return INT_MAX; + else if (tmp < qreal(INT_MIN)) + return -INT_MAX; +#endif return QScFixed(tmp); } -- cgit v1.2.3