[qt/qt/qtbase]: Summary of bulk changes made
KDE Git Services - Bulk Change <[email protected]>
| Newsgroups | gmane.comp.kde.cvs |
|---|---|
| Message-ID | <[email protected]> |
Git repository change summary for qt/qt/qtbase Pushed by mirror-service into branch 'dev'. Changed from 42fbb3b5c3d46423a4e956501cbfce0fb5b641b1 to 2fc1c2b3b387aa9716b7779e5c95c3aea0e3ed93 Acknowledgement was received that this change introduces only existing code that has been pushed to another public open source repository. This change contains the following new commits: Git commit 4b30fc623b238f895785d50d68047b4a12bfc22f by Han Xueyan on 29/07/2026 at 17:36.. QToolButton: avoid duplicate default action connections Handling ActionChanged calls setDefaultAction() again with the existing action. This repeatedly connects QAction::changed to the same private slot, causing the connection list and signal delivery cost to grow with each action update. Use a unique connection and add a regression test verifying that repeated action changes do not increase the receiver count. Pick-to: 6.12 6.11 Fixes: QTBUG-147826 Change-Id: I0f466888129176b794660140ea610bdf10500247 Reviewed-by: Axel Spoerl <[email protected]> https://invent.kde.org/qt/qt/qtbase/-/commit/4b30fc623b238f895785d50d68047b4a12bfc22f Git commit dff034773aa1f7c14929f38412844ad19e7c3de7 by Aurélien Brooke on 29/07/2026 at 18:00.. QDoubleValidator: handle infinite bounds in StandardNotation QDoubleValidator uses infinite bounds by default. When one input falls outside a one-sided range in StandardNotation, validateWithLocale() derives the permitted number of integer digits from the larger absolute bound. Commit a79de46ac59e045fbbbb8e0490ea6981b041be73 (6.5) changed this calculation to pass the bound through qFloor() before convertDoubleTo(), so that a fractional bound would not cause the digit-count check to be skipped. However, qFloor() returns int. Passing an infinite bound, or a finite bound outside int's range, therefore causes undefined behavior during conversion to int. Commit df97b6b2de6282bd6422f1e531a42475dadc980d (6.10) added range assertions to qFloor(), correctly exposing this undefined behavior as a fatal assertion in debug builds. Use std::floor() to preserve the floating-point type. convertDoubleTo() already handles infinities and values outside qlonglong's range safely, so the digit-count check is simply skipped when the bound cannot be represented. Add regression coverage for ranges with either an infinite top or an infinite bottom. Pick-to: 6.12 6.11 Change-Id: I07bb3e922c12518920b74a8a4f16ce32c3cb967c Reviewed-by: Edward Welbourne <[email protected]> https://invent.kde.org/qt/qt/qtbase/-/commit/dff034773aa1f7c14929f38412844ad19e7c3de7 Git commit 2ec73e2c46b9921204cd4031c6898df1b48d65c8 by Marc Mutz on 29/07/2026 at 18:06.. QLocalTime: fix UB (signed overflow) in utcToLocal()'s time_t range check The check that detects when utcMillis/1000 doesn't fit in time_t reconstructed utcMillis by multiplying epochSeconds back up by MSECS_PER_SEC and adding the remainder. For utcMillis values near std::numeric_limits<qint64>::min(), the floor-division quotient, multiplied by 1000 alone (before the remainder is added back), falls just outside the qint64 range, causing signed integer overflow UB, even though the final reconstructed value would have been in-range. Says ubsan: qlocaltime.cpp:538:30: runtime error: signed integer overflow: -9223372036854776 * 1000 cannot be represented in type 'long long int' #0 0x7f9e049c01c0 in QLocalTime::utcToLocal(long long) qlocaltime.cpp:538 #1 0x7f9e04966811 in QDateTimePrivate::expressUtcAsLocal(long long) qdatetime.cpp:2857 #2 0x7f9e04982071 in QDateTime::setMSecsSinceEpoch(long long) qdatetime.cpp:4596 #3 0x7f9e04985a3a in QDateTime::fromMSecsSinceEpoch(long long, QTimeZone const&) qdatetime.cpp:5741 #4 0x7f9e04985c46 in QDateTime::toTimeZone(QTimeZone const&) const qdatetime.cpp:5286 #5 0x7f9e0498636e in QDateTime::toLocalTime() const qdatetime.cpp:5238 #6 0x557d92ee1678 in tst_QDateTime::setMSecsSinceEpoch() tst_qdatetime.cpp:839 Replace the round-trip-by-multiplication with a direct check that narrowing qint64 quotient to time_t was lossless, which is all the check actually needs to verify and avoids reconstructing utcMillis via arithmetic that can transiently overflow. Amends 35412acd88cad2213be966a950f3112342a299ae (6.2), which added the multiplication. Pick-to: 6.12 6.11 6.8 6.5 Change-Id: I553bf06b264635bd4f29d45bd45a1d3eec267248 Reviewed-by: Edward Welbourne <[email protected]> Reviewed-by: Thiago Macieira <[email protected]> https://invent.kde.org/qt/qt/qtbase/-/commit/2ec73e2c46b9921204cd4031c6898df1b48d65c8 Git commit f0d88ae526f7bdcfb436f5a42dc2e409e7aa7215 by David Faure on 29/07/2026 at 22:37.. QHostInfo: destroy the result emitter in its own thread QHostInfoRunnable holds a QHostInfoResult that belongs to the receiver's thread, but QThreadPool deletes the runnable in one of its own threads, so that QObject was destroyed from the wrong thread. ThreadSanitizer reports it as a race on the emitter's vptr, against a receiver being destroyed at the same time: it fires in tst_qobject's threadSignalEmissionCrash, where ~QHostInfoResult races with ~QTcpSocket. Hold it by pointer, and hand it back to its own thread via deleteLater() when we are not already there. That only works while the thread still has an event dispatcher to run the deferred delete, so check for one first and destroy the emitter right away when there is none. This is the situation at application exit: ~QCoreApplication() clears the main thread's event dispatcher and only then emits destroyed(), which is what makes the thread pool finish its runnables. The emitter keeps its QThreadData alive, but not the QThread, which its own thread may be destroying while we look at it, so read the dispatcher and the thread from the QThreadData instead of dereferencing the QThread. The autotest covers the case of a receiver thread without event dispatcher. Pick-to: 6.12 6.11 6.8 Change-Id: I4490b357c8e011857a005b037b1110f9a044995b Reviewed-by: Thiago Macieira <[email protected]> https://invent.kde.org/qt/qt/qtbase/-/commit/f0d88ae526f7bdcfb436f5a42dc2e409e7aa7215 Git commit 5c88d364eac59f52dd89b47556bdc14df2189bdd by Marc Mutz on 29/07/2026 at 23:19.. tst_QHashFunctions: fix -Wunused-result Stow it away in a std::ignore. Amends ee4d239ee5b13b8dad925a51ff1db0a3728a4675 (picked to 6.5). Pick-to: 6.12 6.11 6.8 6.5 Change-Id: Ieb0b5d50f14d5fac5cf933bd53fa53c95516b66d Reviewed-by: Thiago Macieira <[email protected]> https://invent.kde.org/qt/qt/qtbase/-/commit/5c88d364eac59f52dd89b47556bdc14df2189bdd Git commit 9c6acb43f3cd99205e54a65f3e6efda10067a840 by Thiago Macieira on 29/07/2026 at 23:59.. Use QMetaType::isSameType<T>() in a few places As its documentation says, it's slightly faster. Pick-to: 6.12 Change-Id: Iaa85031afcc6f1489b78fffdde783f344092ba9b Reviewed-by: Ivan Solovev <[email protected]> https://invent.kde.org/qt/qt/qtbase/-/commit/9c6acb43f3cd99205e54a65f3e6efda10067a840 Git commit 6c7cb62b244fec076b66d5fda7889733182a548b by Thiago Macieira on 29/07/2026 at 23:59.. QVariant: micro-optimize PrivateShared::computeOffset() When the type in question has normal alignment, we don't need to compute the offset, so save some cycles. This has the advantage it is the same check we had done in computeAllocationSize(), so GCC has been observed to simplify the entire function for such alignments. Pick-to: 6.12 Change-Id: I1341d0372d23f11ff3cbfffd4b2ea34d245e032b Reviewed-by: Fabian Kosmale <[email protected]> Reviewed-by: Aurélien Brooke <[email protected]> https://invent.kde.org/qt/qt/qtbase/-/commit/6c7cb62b244fec076b66d5fda7889733182a548b Git commit 7772cdd675a9568acd971529226f22e5237e826f by Thiago Macieira on 29/07/2026 at 23:59.. QVariant: add missing Float16 and BFloat16 conversions Complements a4daf4939644ea3a087a8c03b1ec962e2e4defa8 for Float16. The check for BFloat16 in qIsNumericType() is disabled because the one in qIsFloatingPoint() is disabled too (I don't remember why). Pick-to: 6.12 Change-Id: Ica709ec244c9ee59e1fefffded5a3c50cc5d5d22 Reviewed-by: Fabian Kosmale <[email protected]> https://invent.kde.org/qt/qt/qtbase/-/commit/7772cdd675a9568acd971529226f22e5237e826f Git commit 5f4f26fc58fa12984a23094b67942964b31e172c by Thiago Macieira on 29/07/2026 at 23:59.. QVariant: micro-optimize getting an unsigned number On little-endian platforms, we can eliminate the switch and just always load the 64 bits, because we know that in QVariant the extra bytes are always zeroed. This is equivalent to the old code, which performed zero- extension from the 8-, 16-, and 32-bit quantities loaded. We can't do the same for signed numbers *because* the extra bytes are always zeroed: the trick doesn't work because the old code performed sign extension. Pick-to: 6.12 Change-Id: I92c8e39aaad6f2446592fffdfbc6b4942b27c05f Reviewed-by: Fabian Kosmale <[email protected]> https://invent.kde.org/qt/qt/qtbase/-/commit/5f4f26fc58fa12984a23094b67942964b31e172c Git commit bc52bc1713794a93693f022e1ccde35814934b72 by Thiago Macieira on 29/07/2026 at 23:59.. QVariant: inline qMetaTypeNumberBySize() in qMetaTypeNumber() GCC and Clang are (currently) generating jump tables. Clang appears to somehow generate a table that combines the size and the metatype ID, while GCC just emitted the size check inside of one of the table's targets. This commit helps both compilers by letting them emit slightly shorter code and a table that includes the integers. Pick-to: 6.12 Change-Id: I87dcac0555e675d5dd6bfffd280d845ab916a09c Reviewed-by: Fabian Kosmale <[email protected]> Reviewed-by: Ivan Solovev <[email protected]> https://invent.kde.org/qt/qt/qtbase/-/commit/bc52bc1713794a93693f022e1ccde35814934b72 Git commit 2fc1c2b3b387aa9716b7779e5c95c3aea0e3ed93 by Thiago Macieira on 29/07/2026 at 23:59.. QMetaType: relax the loading of typeId The operator Int() member does a loadAcquire(). It's never necessary for QMetaTypeInterface because the rest of the object is constant. Pick-to: 6.12 Change-Id: I3faa4d40fcd6c96d6680fffd3d77482d64f6a572 Reviewed-by: Fabian Kosmale <[email protected]> https://invent.kde.org/qt/qt/qtbase/-/commit/2fc1c2b3b387aa9716b7779e5c95c3aea0e3ed93