aboutsummaryrefslogtreecommitdiff
path: root/dep/CascLib/src/common/Sockets.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2023-09-05 00:10:35 +0200
committerShauren <shauren.trinity@gmail.com>2023-09-05 00:10:35 +0200
commitd57b58849bda868f2463d38cc636f01af919316c (patch)
tree5beef62c041526d9468683e4388b6341f1530cc1 /dep/CascLib/src/common/Sockets.cpp
parentba224f70ad81fa0e5d1f0c4daf197e143317cdaa (diff)
Dep/CascLib: Update to ladislav-zezula/CascLib@5c60050770767f2e606f6fec0c35beb8b9b00c60
Diffstat (limited to 'dep/CascLib/src/common/Sockets.cpp')
-rw-r--r--dep/CascLib/src/common/Sockets.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/dep/CascLib/src/common/Sockets.cpp b/dep/CascLib/src/common/Sockets.cpp
index 8eb9680d448..954466351b2 100644
--- a/dep/CascLib/src/common/Sockets.cpp
+++ b/dep/CascLib/src/common/Sockets.cpp
@@ -47,6 +47,7 @@ static HANDLE inline SocketToHandle(SOCKET sock)
// Guarantees that there is zero terminator after the response
char * CASC_SOCKET::ReadResponse(const char * request, size_t request_length, CASC_MIME_RESPONSE & MimeResponse)
{
+ char * new_server_response = NULL;
char * server_response = NULL;
size_t total_received = 0;
size_t buffer_length = BUFFER_INITIAL_SIZE;
@@ -83,12 +84,16 @@ char * CASC_SOCKET::ReadResponse(const char * request, size_t request_length, CA
// Reallocate the buffer size, if needed
if(total_received == buffer_length)
{
- // Reallocate the buffer
- if((server_response = CASC_REALLOC(server_response, buffer_length + buffer_delta + 1)) == NULL)
+ // Reallocate the buffer. Note that if this fails, the old buffer remains valid
+ if((new_server_response = CASC_REALLOC(server_response, buffer_length + buffer_delta + 1)) == NULL)
{
dwErrCode = ERROR_NOT_ENOUGH_MEMORY;
+ CASC_FREE(server_response);
break;
}
+
+ // Setup the new buffer
+ server_response = new_server_response;
buffer_length += buffer_delta;
buffer_delta = BUFFER_INITIAL_SIZE;
}