diff options
author | AndreyL ProductEngine <alihatskiy@productengine.com> | 2017-06-07 19:30:32 +0300 |
---|---|---|
committer | AndreyL ProductEngine <alihatskiy@productengine.com> | 2017-06-07 19:30:32 +0300 |
commit | d9fe21f17f8c392a602773fa36b0814a0c672761 (patch) | |
tree | 0110bce2a2ddc06c95dd47c13b4ea0e88be4410f | |
parent | f2780a93c082e9c9a9557b7b0f6378980632b634 (diff) |
MAINT-6697 More nullchecks for zip/unzip functions
-rw-r--r-- | indra/llcommon/llsdserialize.cpp | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/indra/llcommon/llsdserialize.cpp b/indra/llcommon/llsdserialize.cpp index 41cdb14886..0568a639a0 100644 --- a/indra/llcommon/llsdserialize.cpp +++ b/indra/llcommon/llsdserialize.cpp @@ -2092,6 +2092,12 @@ std::string zip_llsd(LLSD& data) have = CHUNK-strm.avail_out; output = (U8*) realloc(output, cur_size+have); + if (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; + deflateEnd(&strm); + return std::string(); + } memcpy(output+cur_size, out, have); cur_size += have; } @@ -2179,7 +2185,6 @@ bool unzip_llsd(LLSD& data, std::istream& is, S32 size) { 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); - free(result); delete[] in; return false; } @@ -2275,6 +2280,14 @@ U8* unzip_llsdNavMesh( bool& valid, unsigned int& outsize, std::istream& is, S32 U32 have = CHUNK-strm.avail_out; result = (U8*) realloc(result, cur_size + have); + if (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; + inflateEnd(&strm); + delete[] in; + valid = false; + return NULL; + } memcpy(result+cur_size, out, have); cur_size += have; |