summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dist/changes-5.12.2105
-rw-r--r--mkspecs/features/resources.prf2
-rw-r--r--src/3rdparty/angle/src/libANGLE/Context.cpp3
-rw-r--r--src/3rdparty/angle/src/libANGLE/Stream.cpp8
-rw-r--r--src/3rdparty/angle/src/libANGLE/Texture.cpp3
-rw-r--r--src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d9/Renderer9.cpp3
-rw-r--r--src/angle/patches/0013-Fix-compilation-with-icc-converting-between-egl-s-an.patch93
-rw-r--r--src/gui/image/qimage.cpp11
-rw-r--r--src/gui/image/qimage.h4
-rw-r--r--src/gui/image/qimage_p.h6
-rw-r--r--src/network/configure.json4
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp18
-rw-r--r--src/plugins/platforms/xcb/qxcbnativeinterface.cpp7
-rw-r--r--src/tools/androiddeployqt/main.cpp2
-rw-r--r--src/widgets/widgets/qsplashscreen.cpp13
-rw-r--r--tests/auto/corelib/kernel/qtimer/BLACKLIST2
-rw-r--r--tests/auto/gui/image/qimage/tst_qimage.cpp20
17 files changed, 287 insertions, 17 deletions
diff --git a/dist/changes-5.12.2 b/dist/changes-5.12.2
new file mode 100644
index 0000000000..dc61d135a7
--- /dev/null
+++ b/dist/changes-5.12.2
@@ -0,0 +1,105 @@
+Qt 5.12.2 is a bug-fix release. It maintains both forward and backward
+compatibility (source and binary) with Qt 5.12.0 through 5.12.1.
+
+For more details, refer to the online documentation included in this
+distribution. The documentation is also available online:
+
+https://doc.qt.io/qt-5/index.html
+
+The Qt version 5.12 series is binary compatible with the 5.11.x series.
+Applications compiled for 5.11 will continue to run with 5.12.
+
+Some of the changes listed in this file include issue tracking numbers
+corresponding to tasks in the Qt Bug Tracker:
+
+https://bugreports.qt.io/
+
+Each of these identifiers can be entered in the bug tracker to obtain more
+information about a particular change.
+
+****************************************************************************
+* Important Behavior Changes *
+****************************************************************************
+
+ - QtTestLib:
+ * [QTBUG-72928] Blacklisting of tests will be taken into account for
+ XPASS and XFAIL. A blacklisted test that causes an XPASS will no
+ longer be a fail.
+
+****************************************************************************
+* QtCore *
+****************************************************************************
+
+ - [QTBUG-72885] Fixed a number of warnings with Clang or Clang-Tidy in
+ Qt headers related to alignment of Qt private classes.
+
+ - QDate, QTime and QDateTime;
+ * [QTBUG-51208] Corrected documentation of how non-placeholder
+ characters are handled in format patterns passed to toString().
+
+ - QCoreApplication:
+ * [QTBUG-57171] Fixed an out-of-bounds access if the translatable
+ string passed to tr() ended in '%'.
+
+ - QFileInfo:
+ * [QTBUG-72644] Fixed a bug that would cause QFileInfo to report an
+ link incorrectly as a non-link.
+
+ - QLocale:
+ * Fixed a crash if qDebug() is used after main() has exited.
+ * [QTBUG-73403] Fixed a race condition in getting the system locale
+ (possible regression from Qt 5.11.x)
+
+ - QSysInfo:
+ * Fixed a bug on BSD systems in getting the machineUniqueId().
+ * Fixed a bug on Windows in 32-bit applications getting the
+ machineUniqueId() when the OS is 64-bit.
+
+ - QWaitCondition:
+ * Fixed handling of wait(QDeadlineTimer::Forever) on 32-bit platforms.
+
+****************************************************************************
+* QtWidgets *
+****************************************************************************
+
+ - ItemViews:
+ * Fixed a regression with wrongly drawn centered/right aligned item
+ texts
+
+****************************************************************************
+* Third-Party Code *
+****************************************************************************
+
+ - libpng was updated to version 1.6.36
+
+****************************************************************************
+* Freetype *
+****************************************************************************
+
+ - Upgraded bundled Freetype version to 2.9.1. This also adds support for
+ the latest emoji font in use on Android 9.
+
+****************************************************************************
+* Android *
+****************************************************************************
+
+ - Added the --no-strip command line option to androiddeployqt.
+
+ - qmake:
+ * Can now set the version name and code for Android using
+ ANDROID_VERSION_NAME and ANDROID_VERSION_CODE respectively in the pro
+ file.
+
+****************************************************************************
+* Windows *
+****************************************************************************
+
+ - Fixed an issue where loading fonts from files or data would sometimes
+ mistakenly classify them as oblique.
+
+****************************************************************************
+* qmake *
+****************************************************************************
+
+ - [QTBUG-27079] A new feature "cmdline" was added that implies "CONFIG +=
+ console" and "CONFIG -= app_bundle".
diff --git a/mkspecs/features/resources.prf b/mkspecs/features/resources.prf
index bb2a55b93d..b4e0db6445 100644
--- a/mkspecs/features/resources.prf
+++ b/mkspecs/features/resources.prf
@@ -28,6 +28,7 @@ for(resource, RESOURCES) {
!exists($$absolute_path($$resource, $$_PRO_FILE_PWD_)): \
warning("Failure to find: $$resource")
qmake_immediate.files += $$resource
+ OTHER_FILES *= $$resource
}
RESOURCES -= $$resource
next()
@@ -57,6 +58,7 @@ for(resource, RESOURCES) {
alias = $$relative_path($$file, $$abs_base)
resource_file_content += \
"<file alias=\"$$xml_escape($$alias)\">$$xml_escape($$file)</file>"
+ OTHER_FILES *= $$file
}
}
diff --git a/src/3rdparty/angle/src/libANGLE/Context.cpp b/src/3rdparty/angle/src/libANGLE/Context.cpp
index f638beda58..84f7936feb 100644
--- a/src/3rdparty/angle/src/libANGLE/Context.cpp
+++ b/src/3rdparty/angle/src/libANGLE/Context.cpp
@@ -451,7 +451,8 @@ egl::Error Context::onDestroy(const egl::Display *display)
for (auto &zeroTexture : mZeroTextures)
{
- ANGLE_TRY(zeroTexture.second->onDestroy(this));
+ auto result = zeroTexture.second->onDestroy(this);
+ ANGLE_TRY(egl::Error(result));
zeroTexture.second.set(this, nullptr);
}
mZeroTextures.clear();
diff --git a/src/3rdparty/angle/src/libANGLE/Stream.cpp b/src/3rdparty/angle/src/libANGLE/Stream.cpp
index 68279976b7..e384c7d486 100644
--- a/src/3rdparty/angle/src/libANGLE/Stream.cpp
+++ b/src/3rdparty/angle/src/libANGLE/Stream.cpp
@@ -192,8 +192,9 @@ Error Stream::consumerAcquire(const gl::Context *context)
{
if (mPlanes[i].texture != nullptr)
{
- ANGLE_TRY(mPlanes[i].texture->acquireImageFromStream(
- context, mProducerImplementation->getGLFrameDescription(i)));
+ auto result = mPlanes[i].texture->acquireImageFromStream(
+ context, mProducerImplementation->getGLFrameDescription(i));
+ ANGLE_TRY(Error(result));
}
}
@@ -213,7 +214,8 @@ Error Stream::consumerRelease(const gl::Context *context)
{
if (mPlanes[i].texture != nullptr)
{
- ANGLE_TRY(mPlanes[i].texture->releaseImageFromStream(context));
+ auto result = mPlanes[i].texture->releaseImageFromStream(context);
+ ANGLE_TRY(Error(result));
}
}
diff --git a/src/3rdparty/angle/src/libANGLE/Texture.cpp b/src/3rdparty/angle/src/libANGLE/Texture.cpp
index da92e65916..7447604fe6 100644
--- a/src/3rdparty/angle/src/libANGLE/Texture.cpp
+++ b/src/3rdparty/angle/src/libANGLE/Texture.cpp
@@ -550,7 +550,8 @@ Error Texture::onDestroy(const Context *context)
{
if (mBoundSurface)
{
- ANGLE_TRY(mBoundSurface->releaseTexImage(context, EGL_BACK_BUFFER));
+ auto result = mBoundSurface->releaseTexImage(context, EGL_BACK_BUFFER);
+ ANGLE_TRY(Error(result));
mBoundSurface = nullptr;
}
if (mBoundStream)
diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d9/Renderer9.cpp b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d9/Renderer9.cpp
index 75c6298868..b583273641 100644
--- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d9/Renderer9.cpp
+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d9/Renderer9.cpp
@@ -376,7 +376,8 @@ egl::Error Renderer9::initializeDevice()
ASSERT(!mBlit);
mBlit = new Blit9(this);
- ANGLE_TRY(mBlit->initialize());
+ auto result = mBlit->initialize();
+ ANGLE_TRY(egl::Error(result));
ASSERT(!mVertexDataManager && !mIndexDataManager);
mVertexDataManager = new VertexDataManager(this);
diff --git a/src/angle/patches/0013-Fix-compilation-with-icc-converting-between-egl-s-an.patch b/src/angle/patches/0013-Fix-compilation-with-icc-converting-between-egl-s-an.patch
new file mode 100644
index 0000000000..6d3b1cac08
--- /dev/null
+++ b/src/angle/patches/0013-Fix-compilation-with-icc-converting-between-egl-s-an.patch
@@ -0,0 +1,93 @@
+From 2d8118620d4871f74a3ddca233529ff540384477 Mon Sep 17 00:00:00 2001
+From: Yuhang Zhao <2546789017@qq.com>
+Date: Wed, 13 Feb 2019 23:26:55 +0800
+Subject: [PATCH] Fix compilation with icc, converting between egl's and gl's
+ Error types
+
+Each has two constructors from the other, one copying the other
+moving; and this leads to an ambiguous overload when converting
+Texture::onDestroy()'s gl::error to the egl::Error that
+gl::Context::onDestroy() returns. Passing the value through a
+temporary prevents the move-constructor from being attempted and saves
+the day. Thanks to Ville Voutilainen for suggesting the fix.
+
+Fixes: QTBUG-73698
+Change-Id: I628173399a73cee2e253201bc3e8d3e6477a2fbf
+---
+ src/3rdparty/angle/src/libANGLE/Context.cpp | 3 ++-
+ src/3rdparty/angle/src/libANGLE/Stream.cpp | 8 +++++---
+ src/3rdparty/angle/src/libANGLE/Texture.cpp | 3 ++-
+ .../angle/src/libANGLE/renderer/d3d/d3d9/Renderer9.cpp | 3 ++-
+ 4 files changed, 11 insertions(+), 6 deletions(-)
+
+diff --git a/src/3rdparty/angle/src/libANGLE/Context.cpp b/src/3rdparty/angle/src/libANGLE/Context.cpp
+index f638beda58..84f7936feb 100644
+--- a/src/3rdparty/angle/src/libANGLE/Context.cpp
++++ b/src/3rdparty/angle/src/libANGLE/Context.cpp
+@@ -451,7 +451,8 @@ egl::Error Context::onDestroy(const egl::Display *display)
+
+ for (auto &zeroTexture : mZeroTextures)
+ {
+- ANGLE_TRY(zeroTexture.second->onDestroy(this));
++ auto result = zeroTexture.second->onDestroy(this);
++ ANGLE_TRY(egl::Error(result));
+ zeroTexture.second.set(this, nullptr);
+ }
+ mZeroTextures.clear();
+diff --git a/src/3rdparty/angle/src/libANGLE/Stream.cpp b/src/3rdparty/angle/src/libANGLE/Stream.cpp
+index 68279976b7..e384c7d486 100644
+--- a/src/3rdparty/angle/src/libANGLE/Stream.cpp
++++ b/src/3rdparty/angle/src/libANGLE/Stream.cpp
+@@ -192,8 +192,9 @@ Error Stream::consumerAcquire(const gl::Context *context)
+ {
+ if (mPlanes[i].texture != nullptr)
+ {
+- ANGLE_TRY(mPlanes[i].texture->acquireImageFromStream(
+- context, mProducerImplementation->getGLFrameDescription(i)));
++ auto result = mPlanes[i].texture->acquireImageFromStream(
++ context, mProducerImplementation->getGLFrameDescription(i));
++ ANGLE_TRY(Error(result));
+ }
+ }
+
+@@ -213,7 +214,8 @@ Error Stream::consumerRelease(const gl::Context *context)
+ {
+ if (mPlanes[i].texture != nullptr)
+ {
+- ANGLE_TRY(mPlanes[i].texture->releaseImageFromStream(context));
++ auto result = mPlanes[i].texture->releaseImageFromStream(context);
++ ANGLE_TRY(Error(result));
+ }
+ }
+
+diff --git a/src/3rdparty/angle/src/libANGLE/Texture.cpp b/src/3rdparty/angle/src/libANGLE/Texture.cpp
+index da92e65916..7447604fe6 100644
+--- a/src/3rdparty/angle/src/libANGLE/Texture.cpp
++++ b/src/3rdparty/angle/src/libANGLE/Texture.cpp
+@@ -550,7 +550,8 @@ Error Texture::onDestroy(const Context *context)
+ {
+ if (mBoundSurface)
+ {
+- ANGLE_TRY(mBoundSurface->releaseTexImage(context, EGL_BACK_BUFFER));
++ auto result = mBoundSurface->releaseTexImage(context, EGL_BACK_BUFFER);
++ ANGLE_TRY(Error(result));
+ mBoundSurface = nullptr;
+ }
+ if (mBoundStream)
+diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d9/Renderer9.cpp b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d9/Renderer9.cpp
+index 75c6298868..b583273641 100644
+--- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d9/Renderer9.cpp
++++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d9/Renderer9.cpp
+@@ -376,7 +376,8 @@ egl::Error Renderer9::initializeDevice()
+
+ ASSERT(!mBlit);
+ mBlit = new Blit9(this);
+- ANGLE_TRY(mBlit->initialize());
++ auto result = mBlit->initialize();
++ ANGLE_TRY(egl::Error(result));
+
+ ASSERT(!mVertexDataManager && !mIndexDataManager);
+ mVertexDataManager = new VertexDataManager(this);
+--
+2.20.1.windows.1
+
diff --git a/src/gui/image/qimage.cpp b/src/gui/image/qimage.cpp
index 9897c3aa6f..3e18ca6528 100644
--- a/src/gui/image/qimage.cpp
+++ b/src/gui/image/qimage.cpp
@@ -124,7 +124,7 @@ QImageData * QImageData::create(const QSize &size, QImage::Format format)
int height = size.height();
int depth = qt_depthForFormat(format);
auto params = calculateImageParameters(width, height, depth);
- if (params.bytesPerLine < 0)
+ if (!params.isValid())
return nullptr;
QScopedPointer<QImageData> d(new QImageData);
@@ -781,7 +781,7 @@ QImageData *QImageData::create(uchar *data, int width, int height, int bpl, QIm
const int depth = qt_depthForFormat(format);
auto params = calculateImageParameters(width, height, depth);
- if (params.totalSize < 0)
+ if (!params.isValid())
return nullptr;
if (bpl > 0) {
@@ -1484,10 +1484,17 @@ qsizetype QImage::sizeInBytes() const
\sa scanLine()
*/
+#if QT_VERSION >= QT_VERSION_CHECK(6,0,0)
+qsizetype QImage::bytesPerLine() const
+{
+ return d ? d->bytes_per_line : 0;
+}
+#else
int QImage::bytesPerLine() const
{
return d ? d->bytes_per_line : 0;
}
+#endif
/*!
diff --git a/src/gui/image/qimage.h b/src/gui/image/qimage.h
index 4b7a3b1ead..6505fd5845 100644
--- a/src/gui/image/qimage.h
+++ b/src/gui/image/qimage.h
@@ -227,7 +227,11 @@ public:
uchar *scanLine(int);
const uchar *scanLine(int) const;
const uchar *constScanLine(int) const;
+#if QT_VERSION >= QT_VERSION_CHECK(6,0,0)
+ qsizetype bytesPerLine() const;
+#else
int bytesPerLine() const;
+#endif
bool valid(int x, int y) const;
bool valid(const QPoint &pt) const;
diff --git a/src/gui/image/qimage_p.h b/src/gui/image/qimage_p.h
index e3a6c53833..a0a3b5406e 100644
--- a/src/gui/image/qimage_p.h
+++ b/src/gui/image/qimage_p.h
@@ -109,6 +109,7 @@ struct Q_GUI_EXPORT QImageData { // internal image data
struct ImageSizeParameters {
qsizetype bytesPerLine;
qsizetype totalSize;
+ bool isValid() const { return bytesPerLine > 0 && totalSize > 0; }
};
static ImageSizeParameters calculateImageParameters(qsizetype width, qsizetype height, qsizetype depth);
};
@@ -135,6 +136,11 @@ QImageData::calculateImageParameters(qsizetype width, qsizetype height, qsizetyp
qsizetype dummy;
if (mul_overflow(height, qsizetype(sizeof(uchar *)), &dummy))
return invalid; // why is this here?
+#if QT_VERSION < QT_VERSION_CHECK(6,0,0)
+ // Disallow images where width * depth calculations might overflow
+ if (width > (INT_MAX - 31) / depth)
+ return invalid;
+#endif
return { bytes_per_line, total_size };
}
diff --git a/src/network/configure.json b/src/network/configure.json
index f3e18662aa..2c005f0efb 100644
--- a/src/network/configure.json
+++ b/src/network/configure.json
@@ -84,11 +84,11 @@
"sources": [
{ "type": "openssl" },
{
- "libs": "-lssleay32 -llibeay32",
+ "libs": "-lssleay32 -llibeay32 -lUser32 -lWs2_32 -lAdvapi32 -lGdi32",
"condition": "config.win32"
},
{
- "libs": "-llibssl -llibcrypto",
+ "libs": "-llibssl -llibcrypto -lUser32 -lWs2_32 -lAdvapi32 -lCrypt32",
"condition": "config.msvc"
},
{
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp
index d42a33c22b..476de6d1e5 100644
--- a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp
@@ -652,6 +652,12 @@ static const char *qglx_threadedgl_blacklist_renderer[] = {
0
};
+static const char *qglx_threadedgl_blacklist_vendor[] = {
+ "llvmpipe", // QTCREATORBUG-10666
+ "nouveau", // https://bugs.freedesktop.org/show_bug.cgi?id=91632
+ nullptr
+};
+
void QGLXContext::queryDummyContext()
{
if (m_queriedDummyContext)
@@ -710,6 +716,18 @@ void QGLXContext::queryDummyContext()
}
}
}
+ if (const char *vendor = (const char *) glGetString(GL_VENDOR)) {
+ for (int i = 0; qglx_threadedgl_blacklist_vendor[i]; ++i) {
+ if (strstr(vendor, qglx_threadedgl_blacklist_vendor[i]) != 0) {
+ qCDebug(lcQpaGl).nospace() << "Multithreaded OpenGL disabled: "
+ "blacklisted vendor \""
+ << qglx_threadedgl_blacklist_vendor[i]
+ << "\"";
+ m_supportsThreading = false;
+ break;
+ }
+ }
+ }
if (glxvendor && m_supportsThreading) {
// Blacklist Mesa drivers due to QTCREATORBUG-10875 (crash in creator),
diff --git a/src/plugins/platforms/xcb/qxcbnativeinterface.cpp b/src/plugins/platforms/xcb/qxcbnativeinterface.cpp
index 524af5a2a7..6f3584f509 100644
--- a/src/plugins/platforms/xcb/qxcbnativeinterface.cpp
+++ b/src/plugins/platforms/xcb/qxcbnativeinterface.cpp
@@ -412,12 +412,15 @@ void *QXcbNativeInterface::atspiBus()
auto reply = Q_XCB_REPLY(xcb_get_property, defaultConnection->xcb_connection(),
false, defaultConnection->rootWindow(),
atspiBusAtom, XCB_ATOM_STRING, 0, 128);
- Q_ASSERT(!reply->bytes_after);
+ if (!reply)
+ return nullptr;
+
char *data = (char *)xcb_get_property_value(reply.get());
int length = xcb_get_property_value_length(reply.get());
return new QByteArray(data, length);
}
- return 0;
+
+ return nullptr;
}
void QXcbNativeInterface::setAppTime(QScreen* screen, xcb_timestamp_t time)
diff --git a/src/tools/androiddeployqt/main.cpp b/src/tools/androiddeployqt/main.cpp
index 45808c4311..20b1befc38 100644
--- a/src/tools/androiddeployqt/main.cpp
+++ b/src/tools/androiddeployqt/main.cpp
@@ -900,7 +900,7 @@ bool readInputFile(Options *options)
options->extraPlugins = extraPlugins.toString().split(QLatin1Char(','));
}
- {
+ if (!options->auxMode) {
const QJsonValue stdcppPath = jsonObject.value(QStringLiteral("stdcpp-path"));
if (stdcppPath.isUndefined()) {
fprintf(stderr, "No stdcpp-path defined in json file.\n");
diff --git a/src/widgets/widgets/qsplashscreen.cpp b/src/widgets/widgets/qsplashscreen.cpp
index 4af4f90119..bf6bf1c7c9 100644
--- a/src/widgets/widgets/qsplashscreen.cpp
+++ b/src/widgets/widgets/qsplashscreen.cpp
@@ -289,8 +289,7 @@ void QSplashScreen::setPixmap(const QPixmap &pixmap)
// 1) If a QDesktopScreenWidget is found in the parent hierarchy, use that (see docs on
// QSplashScreen(QWidget *, QPixmap).
// 2) If a widget with associated QWindow is found, use that
-// 3) When nothing can be found, do not position the widget, allowing for
-// QPlatformWindow::initialGeometry() to center it over the cursor
+// 3) When nothing can be found, try to center it over the cursor
static inline int screenNumberOf(const QDesktopScreenWidget *dsw)
{
@@ -307,7 +306,15 @@ const QScreen *QSplashScreenPrivate::screenFor(const QWidget *w)
if (QWindow *window = p->windowHandle())
return window->screen();
}
- return nullptr;
+#if QT_CONFIG(cursor)
+ // Note: We could rely on QPlatformWindow::initialGeometry() to center it
+ // over the cursor, but not all platforms (namely Android) use that.
+ if (QGuiApplication::screens().size() > 1) {
+ if (auto screenAtCursor = QGuiApplication::screenAt(QCursor::pos()))
+ return screenAtCursor;
+ }
+#endif // cursor
+ return QGuiApplication::primaryScreen();
}
void QSplashScreenPrivate::setPixmap(const QPixmap &p, const QScreen *screen)
diff --git a/tests/auto/corelib/kernel/qtimer/BLACKLIST b/tests/auto/corelib/kernel/qtimer/BLACKLIST
index c31e15f171..16cbab4587 100644
--- a/tests/auto/corelib/kernel/qtimer/BLACKLIST
+++ b/tests/auto/corelib/kernel/qtimer/BLACKLIST
@@ -2,4 +2,4 @@
windows
osx
[basic_chrono]
-macos
+osx
diff --git a/tests/auto/gui/image/qimage/tst_qimage.cpp b/tests/auto/gui/image/qimage/tst_qimage.cpp
index eded206d37..6bc27a6e16 100644
--- a/tests/auto/gui/image/qimage/tst_qimage.cpp
+++ b/tests/auto/gui/image/qimage/tst_qimage.cpp
@@ -230,6 +230,8 @@ private slots:
void convertColorTable();
+ void wideImage();
+
#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT)
void toWinHBITMAP_data();
void toWinHBITMAP();
@@ -3535,6 +3537,24 @@ void tst_QImage::convertColorTable()
QCOMPARE(rgb32.pixel(0,0), 0xffffffff);
}
+void tst_QImage::wideImage()
+{
+ // QTBUG-73731 and QTBUG-73732
+ QImage i(538994187, 2, QImage::Format_ARGB32);
+ QImage i2(32, 32, QImage::Format_ARGB32);
+ i2.fill(Qt::white);
+
+ // Test that it doesn't crash:
+ QPainter painter(&i);
+ // With the composition mode is SourceOver out it's an invalid write
+ // With the composition mode is Source it's an invalid read
+ painter.drawImage(0, 0, i2);
+ painter.setCompositionMode(QPainter::CompositionMode_Source);
+ painter.drawImage(0, 0, i2);
+
+ // Qt6: Test that it actually works on 64bit architectures.
+}
+
#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT)
QT_BEGIN_NAMESPACE
Q_GUI_EXPORT HBITMAP qt_imageToWinHBITMAP(const QImage &p, int hbitmapFormat = 0);