From d0df02ad8a20316410ac51db86e2df4ae24f0d7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Brooke?= Date: Thu, 10 Apr 2025 10:04:56 +0200 Subject: [PATCH] qalloc: keep the original capacity if realloc() fails As a drive-by, fix the copyright headers. Amends 03d5daf9437d8b46db2e89e3a9763ea701fa681c. Change-Id: Ie27ecb62097e9bcb33cc0ceb10c97743bce0b0e0 Reviewed-by: Giuseppe D'Angelo Reviewed-by: Thiago Macieira --- src/corelib/global/qalloc.cpp | 2 +- src/corelib/global/qalloc.h | 15 ++++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/corelib/global/qalloc.cpp b/src/corelib/global/qalloc.cpp index ca893a5789a..da75ec0f379 100644 --- a/src/corelib/global/qalloc.cpp +++ b/src/corelib/global/qalloc.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2025 The Qt Company Ltd. +// Copyright (C) 2025 Aurélien Brooke // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only #include "qalloc.h" diff --git a/src/corelib/global/qalloc.h b/src/corelib/global/qalloc.h index 4adb079fb9a..9d40f4261d3 100644 --- a/src/corelib/global/qalloc.h +++ b/src/corelib/global/qalloc.h @@ -1,4 +1,4 @@ -// Copyright (C) 2025 The Qt Company Ltd. +// Copyright (C) 2025 Aurélien Brooke // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only #ifndef QALLOC_H @@ -99,12 +99,17 @@ inline void *fittedMalloc(size_t headerSize, qsizetype *capacity, inline void *fittedRealloc(void *ptr, size_t headerSize, size_t *capacity, size_t elementSize, size_t unusedCapacity) noexcept { - size_t allocSize = fittedAllocSize(headerSize, capacity, + size_t newCapacity = *capacity; + size_t allocSize = fittedAllocSize(headerSize, &newCapacity, elementSize, unusedCapacity, alignof(std::max_align_t)); - if (Q_LIKELY(allocSize != 0)) - return realloc(ptr, allocSize); - else + if (Q_LIKELY(allocSize != 0)) { + void *newPtr = realloc(ptr, allocSize); + if (newPtr) + *capacity = newCapacity; + return newPtr; + } else { return nullptr; + } } inline void *fittedRealloc(void *ptr, size_t headerSize, qsizetype *capacity, size_t elementSize, size_t unusedCapacity = 0) noexcept