Avoid int overflow in QImage rotate90/180/270
Fixes: QTBUG-91223 Change-Id: Ice53c80d695a5ffdf9162df84e7c9b1e43106bae Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> (cherry picked from commit 8daa94431341afece6beb052e6224d215f8507b7) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
bd70f6d550
commit
2d32e38e3a
@ -45,11 +45,10 @@ QT_BEGIN_NAMESPACE
|
|||||||
static const int tileSize = 32;
|
static const int tileSize = 32;
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
static
|
static inline void qt_memrotate90_tiled(const T *src, int w, int h, int isstride, T *dest, int idstride)
|
||||||
inline void qt_memrotate90_tiled(const T *src, int w, int h, int sstride, T *dest, int dstride)
|
|
||||||
{
|
{
|
||||||
sstride /= sizeof(T);
|
const qsizetype sstride = isstride / sizeof(T);
|
||||||
dstride /= sizeof(T);
|
const qsizetype dstride = idstride / sizeof(T);
|
||||||
|
|
||||||
const int pack = sizeof(quint32) / sizeof(T);
|
const int pack = sizeof(quint32) / sizeof(T);
|
||||||
const int unaligned =
|
const int unaligned =
|
||||||
@ -104,10 +103,10 @@ inline void qt_memrotate90_tiled(const T *src, int w, int h, int sstride, T *des
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
static
|
static inline void qt_memrotate90_tiled_unpacked(const T *src, int w, int h, int isstride, T *dest, int idstride)
|
||||||
inline void qt_memrotate90_tiled_unpacked(const T *src, int w, int h, int sstride, T *dest,
|
|
||||||
int dstride)
|
|
||||||
{
|
{
|
||||||
|
const qsizetype sstride = isstride;
|
||||||
|
const qsizetype dstride = idstride;
|
||||||
const int numTilesX = (w + tileSize - 1) / tileSize;
|
const int numTilesX = (w + tileSize - 1) / tileSize;
|
||||||
const int numTilesY = (h + tileSize - 1) / tileSize;
|
const int numTilesY = (h + tileSize - 1) / tileSize;
|
||||||
|
|
||||||
@ -132,11 +131,10 @@ inline void qt_memrotate90_tiled_unpacked(const T *src, int w, int h, int sstrid
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
static
|
static inline void qt_memrotate270_tiled(const T *src, int w, int h, int isstride, T *dest, int idstride)
|
||||||
inline void qt_memrotate270_tiled(const T *src, int w, int h, int sstride, T *dest, int dstride)
|
|
||||||
{
|
{
|
||||||
sstride /= sizeof(T);
|
const qsizetype sstride = isstride / sizeof(T);
|
||||||
dstride /= sizeof(T);
|
const qsizetype dstride = idstride / sizeof(T);
|
||||||
|
|
||||||
const int pack = sizeof(quint32) / sizeof(T);
|
const int pack = sizeof(quint32) / sizeof(T);
|
||||||
const int unaligned =
|
const int unaligned =
|
||||||
@ -191,10 +189,10 @@ inline void qt_memrotate270_tiled(const T *src, int w, int h, int sstride, T *de
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
static
|
static inline void qt_memrotate270_tiled_unpacked(const T *src, int w, int h, int isstride, T *dest, int idstride)
|
||||||
inline void qt_memrotate270_tiled_unpacked(const T *src, int w, int h, int sstride, T *dest,
|
|
||||||
int dstride)
|
|
||||||
{
|
{
|
||||||
|
const qsizetype sstride = isstride;
|
||||||
|
const qsizetype dstride = idstride;
|
||||||
const int numTilesX = (w + tileSize - 1) / tileSize;
|
const int numTilesX = (w + tileSize - 1) / tileSize;
|
||||||
const int numTilesY = (h + tileSize - 1) / tileSize;
|
const int numTilesY = (h + tileSize - 1) / tileSize;
|
||||||
|
|
||||||
@ -247,9 +245,11 @@ inline void qt_memrotate90_template<quint64>(const quint64 *src, int w, int h, i
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
static
|
static inline void qt_memrotate180_template(const T *src, int w, int h, int isstride, T *dest, int idstride)
|
||||||
inline void qt_memrotate180_template(const T *src, int w, int h, int sstride, T *dest, int dstride)
|
|
||||||
{
|
{
|
||||||
|
const qsizetype sstride = isstride;
|
||||||
|
const qsizetype dstride = idstride;
|
||||||
|
|
||||||
const char *s = (const char*)(src) + (h - 1) * sstride;
|
const char *s = (const char*)(src) + (h - 1) * sstride;
|
||||||
for (int dy = 0; dy < h; ++dy) {
|
for (int dy = 0; dy < h; ++dy) {
|
||||||
T *d = reinterpret_cast<T*>((char *)(dest) + dy * dstride);
|
T *d = reinterpret_cast<T*>((char *)(dest) + dy * dstride);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user