Go to file
Marc Mutz 217f2ab3eb QVarLengthArray: fix memory leak in (qsizetype) ctor
Instead of duplicating the logic of resize() to avoid three stores to
(ptr, a, s), and getting the memory management wrong (malloc()ed ptr
leaked when a following default-construction failed), simply call the
QVLA default ctor followed by std::uninitialized_default_construct_n().

After we called the QVLA default ctor, the lifetime of this object has
begun, so if the following code throws, ~QVLA will be called to clean
up. This was not the case when we didn't delegate the ctor: if the
body of this ctor threw, ~QVLA would _not_ have been called, since the
lifetime of the object had never started.

Since the dtor may now run, we need to maintain the class invariants,
so we can't just set the size() before we have constructed all
elements. This is where std::uninitialized_default_construct_n() comes
in: it's strongly exception-safe, so if a constructor throws, it will
destroy all previously-constructed elements, so that either we fail
and size() == 0 is true or it doesn't, then we can set size() to
asize.

Pick-to: 6.5 6.4 6.4.3 6.2
Change-Id: I03408d8a473e8a31fa0086ef5ac551ce46a758f8
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-03-10 21:21:56 +01:00
.github/workflows Repair github action workflow 2021-11-10 18:57:33 +01:00
bin Add simple project generation based on existing source files 2023-02-08 12:59:19 +01:00
cmake Prefer the shared version of libzstd over the static one 2023-03-08 18:16:29 -03:00
coin Add downstream test config 2023-02-16 07:02:54 +00:00
config.tests Change the license of all CMakeLists.txt and *.cmake files to BSD 2022-08-23 23:58:42 +02:00
dist Add Qt 6.0.0 changes file 2020-11-16 10:02:08 +02:00
doc docs: Remove side panel and swipe to remove examples 2023-03-08 15:19:13 +00:00
examples Update the bindable properties example 2023-03-09 12:27:00 -05:00
lib Purge all fonts 2015-08-18 19:59:14 +00:00
libexec Use SPDX license identifiers 2022-05-16 16:37:38 +02:00
LICENSES Add license text file for Creative Commons Zero (CC0) 1.0 2022-10-19 12:06:09 +02:00
mkspecs wasm: set stack size to 5MB again 2023-03-06 14:06:07 +00:00
qmake Add some exclusions for CMake Unity (Jumbo) builds 2023-02-16 16:03:06 +01:00
src QVarLengthArray: fix memory leak in (qsizetype) ctor 2023-03-10 21:21:56 +01:00
tests rhi: displacement / tessellation manual test Metal memory alignment 2023-03-10 12:21:56 -08:00
util Record a recent discovery: Suzhou isn't hanidec 2023-02-28 20:14:18 +01:00
.cmake.conf Enable QT_NO_AS_CONST globally 2023-01-05 15:09:49 +01:00
.gitattributes Give batch files CRLF line endings 2020-11-04 15:02:29 +00:00
.gitignore Assume qhelpgenerator in libexec instead of bin 2021-11-08 19:27:32 +01:00
.lgtm.yml Skip LGTM analysis for the bootstrap library and tools 2020-07-16 01:04:34 +02:00
.tag Update the git-archive export options 2012-09-07 15:39:31 +02:00
CMakeLists.txt Change the license of all CMakeLists.txt and *.cmake files to BSD 2022-08-23 23:58:42 +02:00
conanfile.py Conan: Do not force 'qt_host_path' usage in cross-build context 2022-06-22 18:18:42 +03:00
config_help.txt Add -unity-build, and -unity-build-batch-size to configure 2023-02-09 04:23:06 +01:00
configure Retrieve an old -redo behavior 2023-02-07 18:51:58 +00:00
configure.bat Retrieve an old -redo behavior 2023-02-07 18:51:58 +00:00
configure.cmake Add find package for lttng library so that it gets added to target 2023-01-13 12:43:45 +02:00
dependencies.yaml Re-add dependencies.yaml now that qt5.git wip/qt6 builds fine 2019-09-18 13:19:31 +02:00
qt_cmdline.cmake QCryptographicHash: implement OpenSSL 3.0 support 2022-09-26 17:26:37 +02:00
sync.profile Move qurltlds_p.h out of src/network, and make it a .cpp file 2022-10-01 06:24:51 +00:00