From 0ca56bdecd3bcf9de5793c3ab8347a2ee6302c88 Mon Sep 17 00:00:00 2001 From: Murai Takashi Date: Wed, 30 Jan 2019 19:51:57 +0900 Subject: [PATCH] translators/wonderbrush: Fix PVS 2320 Fix memory leak when realloc() fails. Change-Id: I9665b1e618e675e324eb75aec586a41181957ced Reviewed-on: https://review.haiku-os.org/c/1015 Reviewed-by: Barrett17 --- .../wonderbrush/support/bitmap_compression.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/add-ons/translators/wonderbrush/support/bitmap_compression.cpp b/src/add-ons/translators/wonderbrush/support/bitmap_compression.cpp index 45e263d253..14a4714f87 100644 --- a/src/add-ons/translators/wonderbrush/support/bitmap_compression.cpp +++ b/src/add-ons/translators/wonderbrush/support/bitmap_compression.cpp @@ -36,11 +36,17 @@ compress_bitmap_zlib(const BBitmap* bitmap, void** buffer, unsigned* size) srcLength, 3); if (ret == Z_OK) { -//printf("zlib compressed %ld bytes bitmap into %d bytes (%f%%)\n", srcLength, *size, ((float)*size / (float)srcLength) * 100.0); - if ((unsigned)ceilf(srcLength * 1.01) + 12 != *size) - *buffer = realloc(*buffer, *size); - result = true; - } else { +// printf("zlib compressed %ld bytes bitmap into %d bytes (%f%%)\n", +// srcLength, *size, ((float)*size / (float)srcLength) * 100.0); + if ((unsigned)ceilf(srcLength * 1.01) + 12 != *size) { + void* tmpBuffer = realloc(*buffer, *size); + if (tmpBuffer) { + *buffer = tmpBuffer; + result = true; + } + } + } + if (ret != Z_OK || !result) { // error compressing free(*buffer); *buffer = NULL;