Skip to content
Snippets Groups Projects
Commit 7cc9455f authored by AndreyL ProductEngine's avatar AndreyL ProductEngine
Browse files

MAINT-6697 Correct pointer freeing

parent d9fe21f1
No related branches found
No related tags found
No related merge requests found
...@@ -2091,13 +2091,18 @@ std::string zip_llsd(LLSD& data) ...@@ -2091,13 +2091,18 @@ std::string zip_llsd(LLSD& data)
} }
have = CHUNK-strm.avail_out; have = CHUNK-strm.avail_out;
output = (U8*) realloc(output, cur_size+have); U8* new_output = (U8*) realloc(output, cur_size+have);
if (output == NULL) if (new_output == NULL)
{ {
LL_WARNS() << "Failed to compress LLSD block: can't reallocate memory, current size: " << cur_size << " bytes; requested " << cur_size + have << " bytes." << LL_ENDL; LL_WARNS() << "Failed to compress LLSD block: can't reallocate memory, current size: " << cur_size << " bytes; requested " << cur_size + have << " bytes." << LL_ENDL;
deflateEnd(&strm); deflateEnd(&strm);
if (output)
{
free(output);
}
return std::string(); return std::string();
} }
output = new_output;
memcpy(output+cur_size, out, have); memcpy(output+cur_size, out, have);
cur_size += have; cur_size += have;
} }
...@@ -2180,14 +2185,19 @@ bool unzip_llsd(LLSD& data, std::istream& is, S32 size) ...@@ -2180,14 +2185,19 @@ bool unzip_llsd(LLSD& data, std::istream& is, S32 size)
U32 have = CHUNK-strm.avail_out; U32 have = CHUNK-strm.avail_out;
result = (U8*) realloc(result, cur_size + have); U8* new_result = (U8*)realloc(result, cur_size + have);
if (result == NULL) if (new_result == NULL)
{ {
LL_WARNS() << "Failed to unzip LLSD block: can't reallocate memory, current size: " << cur_size << " bytes; requested " << cur_size + have << " bytes." << LL_ENDL; LL_WARNS() << "Failed to unzip LLSD block: can't reallocate memory, current size: " << cur_size << " bytes; requested " << cur_size + have << " bytes." << LL_ENDL;
inflateEnd(&strm); inflateEnd(&strm);
if (result)
{
free(result);
}
delete[] in; delete[] in;
return false; return false;
} }
result = new_result;
memcpy(result+cur_size, out, have); memcpy(result+cur_size, out, have);
cur_size += have; cur_size += have;
...@@ -2279,15 +2289,20 @@ U8* unzip_llsdNavMesh( bool& valid, unsigned int& outsize, std::istream& is, S32 ...@@ -2279,15 +2289,20 @@ U8* unzip_llsdNavMesh( bool& valid, unsigned int& outsize, std::istream& is, S32
U32 have = CHUNK-strm.avail_out; U32 have = CHUNK-strm.avail_out;
result = (U8*) realloc(result, cur_size + have); U8* new_result = (U8*) realloc(result, cur_size + have);
if (result == NULL) if (new_result == NULL)
{ {
LL_WARNS() << "Failed to unzip LLSD NavMesh block: can't reallocate memory, current size: " << cur_size << " bytes; requested " << cur_size + have << " bytes." << LL_ENDL; LL_WARNS() << "Failed to unzip LLSD NavMesh block: can't reallocate memory, current size: " << cur_size << " bytes; requested " << cur_size + have << " bytes." << LL_ENDL;
inflateEnd(&strm); inflateEnd(&strm);
if (result)
{
free(result);
}
delete[] in; delete[] in;
valid = false; valid = false;
return NULL; return NULL;
} }
result = new_result;
memcpy(result+cur_size, out, have); memcpy(result+cur_size, out, have);
cur_size += have; cur_size += have;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment