MAINT-8022 Make unzip silent yet include failure reason into output
parent
a35008993e
commit
c56298d4ba
|
|
@ -2121,22 +2121,13 @@ std::string zip_llsd(LLSD& data)
|
|||
deflateEnd(&strm);
|
||||
free(output);
|
||||
|
||||
#if 0 //verify results work with unzip_llsd
|
||||
std::istringstream test(result);
|
||||
LLSD test_sd;
|
||||
if (!unzip_llsd(test_sd, test, result.size()))
|
||||
{
|
||||
LL_ERRS() << "Invalid compression result!" << LL_ENDL;
|
||||
}
|
||||
#endif
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
//decompress a block of LLSD from provided istream
|
||||
// not very efficient -- creats a copy of decompressed LLSD block in memory
|
||||
// and deserializes from that copy using LLSDSerialize
|
||||
bool unzip_llsd(LLSD& data, std::istream& is, S32 size)
|
||||
LLUZipHelper::EZipRresult LLUZipHelper::unzip_llsd(LLSD& data, std::istream& is, S32 size)
|
||||
{
|
||||
U8* result = NULL;
|
||||
U32 cur_size = 0;
|
||||
|
|
@ -2147,7 +2138,7 @@ bool unzip_llsd(LLSD& data, std::istream& is, S32 size)
|
|||
U8 *in = new(std::nothrow) U8[size];
|
||||
if (!in)
|
||||
{
|
||||
return false;
|
||||
return ZR_MEM_ERROR;
|
||||
}
|
||||
is.read((char*) in, size);
|
||||
|
||||
|
|
@ -2171,7 +2162,7 @@ bool unzip_llsd(LLSD& data, std::istream& is, S32 size)
|
|||
inflateEnd(&strm);
|
||||
free(result);
|
||||
delete [] in;
|
||||
return false;
|
||||
return ZR_DATA_ERROR;
|
||||
}
|
||||
|
||||
switch (ret)
|
||||
|
|
@ -2183,7 +2174,7 @@ bool unzip_llsd(LLSD& data, std::istream& is, S32 size)
|
|||
inflateEnd(&strm);
|
||||
free(result);
|
||||
delete [] in;
|
||||
return false;
|
||||
return ZR_MEM_ERROR;
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -2198,7 +2189,7 @@ bool unzip_llsd(LLSD& data, std::istream& is, S32 size)
|
|||
free(result);
|
||||
}
|
||||
delete[] in;
|
||||
return false;
|
||||
return ZR_MEM_ERROR;
|
||||
}
|
||||
result = new_result;
|
||||
memcpy(result+cur_size, out, have);
|
||||
|
|
@ -2212,7 +2203,7 @@ bool unzip_llsd(LLSD& data, std::istream& is, S32 size)
|
|||
if (ret != Z_STREAM_END)
|
||||
{
|
||||
free(result);
|
||||
return false;
|
||||
return ZR_DATA_ERROR;
|
||||
}
|
||||
|
||||
//result now points to the decompressed LLSD block
|
||||
|
|
@ -2234,29 +2225,28 @@ bool unzip_llsd(LLSD& data, std::istream& is, S32 size)
|
|||
|
||||
istr.str(res_str);
|
||||
}
|
||||
#ifdef LL_WINDOWS
|
||||
catch (std::length_error)
|
||||
{
|
||||
LL_DEBUGS("UNZIP") << "String we are creating is too big" << LL_ENDL;
|
||||
free(result);
|
||||
return false;
|
||||
return ZR_SIZE_ERROR;
|
||||
}
|
||||
#endif
|
||||
catch (std::bad_alloc)
|
||||
{
|
||||
LL_DEBUGS("UNZIP") << "Failed to allocate for string" << LL_ENDL;
|
||||
free(result);
|
||||
return false;
|
||||
return ZR_MEM_ERROR;
|
||||
}
|
||||
|
||||
if (!LLSDSerialize::fromBinary(data, istr, cur_size))
|
||||
{
|
||||
LL_WARNS("UNZIP") << "Failed to unzip LLSD block" << LL_ENDL;
|
||||
free(result);
|
||||
return false;
|
||||
return ZR_PARSE_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
free(result);
|
||||
return true;
|
||||
return ZR_OK;
|
||||
}
|
||||
//This unzip function will only work with a gzip header and trailer - while the contents
|
||||
//of the actual compressed data is the same for either format (gzip vs zlib ), the headers
|
||||
|
|
|
|||
|
|
@ -814,8 +814,24 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
class LL_COMMON_API LLUZipHelper : public LLRefCount
|
||||
{
|
||||
public:
|
||||
typedef enum e_zip_result
|
||||
{
|
||||
ZR_OK = 0,
|
||||
ZR_MEM_ERROR,
|
||||
ZR_SIZE_ERROR,
|
||||
ZR_DATA_ERROR,
|
||||
ZR_PARSE_ERROR,
|
||||
} EZipRresult;
|
||||
// return OK or reason for failure
|
||||
static EZipRresult unzip_llsd(LLSD& data, std::istream& is, S32 size);
|
||||
};
|
||||
|
||||
//dirty little zip functions -- yell at davep
|
||||
LL_COMMON_API std::string zip_llsd(LLSD& data);
|
||||
LL_COMMON_API bool unzip_llsd(LLSD& data, std::istream& is, S32 size);
|
||||
|
||||
|
||||
LL_COMMON_API U8* unzip_llsdNavMesh( bool& valid, unsigned int& outsize,std::istream& is, S32 size);
|
||||
#endif // LL_LLSDSERIALIZE_H
|
||||
|
|
|
|||
|
|
@ -2367,9 +2367,10 @@ bool LLVolume::unpackVolumeFaces(std::istream& is, S32 size)
|
|||
//input stream is now pointing at a zlib compressed block of LLSD
|
||||
//decompress block
|
||||
LLSD mdl;
|
||||
if (!unzip_llsd(mdl, is, size))
|
||||
U32 uzip_result = LLUZipHelper::unzip_llsd(mdl, is, size);
|
||||
if (uzip_result != LLUZipHelper::ZR_OK)
|
||||
{
|
||||
LL_DEBUGS("MeshStreaming") << "Failed to unzip LLSD blob for LoD, will probably fetch from sim again." << LL_ENDL;
|
||||
LL_DEBUGS("MeshStreaming") << "Failed to unzip LLSD blob for LoD with code " << uzip_result << " , will probably fetch from sim again." << LL_ENDL;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1354,7 +1354,7 @@ bool LLModel::loadSkinInfo(LLSD& header, std::istream &is)
|
|||
|
||||
LLSD skin_data;
|
||||
|
||||
if (unzip_llsd(skin_data, is, size))
|
||||
if (LLUZipHelper::unzip_llsd(skin_data, is, size) == LLUZipHelper::ZR_OK)
|
||||
{
|
||||
mSkinInfo.fromLLSD(skin_data);
|
||||
return true;
|
||||
|
|
@ -1375,7 +1375,7 @@ bool LLModel::loadDecomposition(LLSD& header, std::istream& is)
|
|||
|
||||
LLSD data;
|
||||
|
||||
if (unzip_llsd(data, is, size))
|
||||
if (LLUZipHelper::unzip_llsd(data, is, size) == LLUZipHelper::ZR_OK)
|
||||
{
|
||||
mPhysics.fromLLSD(data);
|
||||
updateHullCenters();
|
||||
|
|
|
|||
|
|
@ -410,9 +410,10 @@ void LLMaterialMgr::onGetResponse(bool success, const LLSD& content, const LLUUI
|
|||
std::istringstream content_stream(content_string);
|
||||
|
||||
LLSD response_data;
|
||||
if (!unzip_llsd(response_data, content_stream, content_binary.size()))
|
||||
U32 uzip_result = LLUZipHelper::unzip_llsd(response_data, content_stream, content_binary.size());
|
||||
if (uzip_result != LLUZipHelper::ZR_OK)
|
||||
{
|
||||
LL_WARNS("Materials") << "Cannot unzip LLSD binary content" << LL_ENDL;
|
||||
LL_WARNS("Materials") << "Cannot unzip LLSD binary content: " << uzip_result << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -452,9 +453,10 @@ void LLMaterialMgr::onGetAllResponse(bool success, const LLSD& content, const LL
|
|||
std::istringstream content_stream(content_string);
|
||||
|
||||
LLSD response_data;
|
||||
if (!unzip_llsd(response_data, content_stream, content_binary.size()))
|
||||
U32 uzip_result = LLUZipHelper::unzip_llsd(response_data, content_stream, content_binary.size());
|
||||
if (uzip_result != LLUZipHelper::ZR_OK)
|
||||
{
|
||||
LL_WARNS("Materials") << "Cannot unzip LLSD binary content" << LL_ENDL;
|
||||
LL_WARNS("Materials") << "Cannot unzip LLSD binary content: " << uzip_result << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -520,9 +522,10 @@ void LLMaterialMgr::onPutResponse(bool success, const LLSD& content)
|
|||
std::istringstream content_stream(content_string);
|
||||
|
||||
LLSD response_data;
|
||||
if (!unzip_llsd(response_data, content_stream, content_binary.size()))
|
||||
U32 uzip_result = LLUZipHelper::unzip_llsd(response_data, content_stream, content_binary.size());
|
||||
if (uzip_result != LLUZipHelper::ZR_OK)
|
||||
{
|
||||
LL_WARNS("Materials") << "Cannot unzip LLSD binary content" << LL_ENDL;
|
||||
LL_WARNS("Materials") << "Cannot unzip LLSD binary content: " << uzip_result << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
else
|
||||
|
|
|
|||
|
|
@ -1765,9 +1765,11 @@ bool LLMeshRepoThread::skinInfoReceived(const LLUUID& mesh_id, U8* data, S32 dat
|
|||
|
||||
std::istringstream stream(res_str);
|
||||
|
||||
if (!unzip_llsd(skin, stream, data_size))
|
||||
U32 uzip_result = LLUZipHelper::unzip_llsd(skin, stream, data_size);
|
||||
if (uzip_result != LLUZipHelper::ZR_OK)
|
||||
{
|
||||
LL_WARNS(LOG_MESH) << "Mesh skin info parse error. Not a valid mesh asset! ID: " << mesh_id
|
||||
<< " uzip result" << uzip_result
|
||||
<< LL_ENDL;
|
||||
return false;
|
||||
}
|
||||
|
|
@ -1797,9 +1799,11 @@ bool LLMeshRepoThread::decompositionReceived(const LLUUID& mesh_id, U8* data, S3
|
|||
|
||||
std::istringstream stream(res_str);
|
||||
|
||||
if (!unzip_llsd(decomp, stream, data_size))
|
||||
U32 uzip_result = LLUZipHelper::unzip_llsd(decomp, stream, data_size);
|
||||
if (uzip_result != LLUZipHelper::ZR_OK)
|
||||
{
|
||||
LL_WARNS(LOG_MESH) << "Mesh decomposition parse error. Not a valid mesh asset! ID: " << mesh_id
|
||||
<< " uzip result: " << uzip_result
|
||||
<< LL_ENDL;
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue