From 846c12f5df3c8d5c6af77fa108a7e570ff5efc47 Mon Sep 17 00:00:00 2001 From: Leorize Date: Thu, 16 Jul 2020 00:29:34 -0500 Subject: [PATCH] HttpRequest: Use an ArrayDeleter to manage the temporary buffer This make sure that the temporary buffer will always be deleted should any premature return happens. Change-Id: I448ec7c3f3eeca1ef2b6473b49323f34bcb7bf86 Reviewed-on: https://review.haiku-os.org/c/haiku/+/3077 Reviewed-by: waddlesplash --- src/kits/network/libnetapi/HttpRequest.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/kits/network/libnetapi/HttpRequest.cpp b/src/kits/network/libnetapi/HttpRequest.cpp index 2638e66888..a7ff40f932 100644 --- a/src/kits/network/libnetapi/HttpRequest.cpp +++ b/src/kits/network/libnetapi/HttpRequest.cpp @@ -575,6 +575,7 @@ BHttpRequest::_MakeRequest() size_t previousBufferSize = 0; off_t bytesUnpacked = 0; char* inputTempBuffer = new(std::nothrow) char[kHttpBufferSize]; + ArrayDeleter inputTempBufferDeleter(inputTempBuffer); ssize_t inputTempSize = kHttpBufferSize; ssize_t chunkSize = -1; DynamicBuffer decompressorStorage; @@ -664,10 +665,10 @@ BHttpRequest::_MakeRequest() // 2 more bytes to handle the closing CR+LF bytesRead = chunkSize; if (inputTempSize < chunkSize + 2) { - delete[] inputTempBuffer; inputTempSize = chunkSize + 2; inputTempBuffer = new(std::nothrow) char[inputTempSize]; + inputTempBufferDeleter.SetTo(inputTempBuffer); } if (inputTempBuffer == NULL) { @@ -715,8 +716,8 @@ BHttpRequest::_MakeRequest() if (bytesRead > 0) { if (inputTempSize < bytesRead) { inputTempSize = bytesRead; - delete[] inputTempBuffer; inputTempBuffer = new(std::nothrow) char[bytesRead]; + inputTempBufferDeleter.SetTo(inputTempBuffer); } if (inputTempBuffer == NULL) { @@ -781,7 +782,6 @@ BHttpRequest::_MakeRequest() } fSocket->Disconnect(); - delete[] inputTempBuffer; if (readError != B_OK) return readError;