From 6f33f9090b554a32f039e46d8177650ccbf94536 Mon Sep 17 00:00:00 2001 From: maksymsproductengine Date: Thu, 20 Mar 2014 19:21:52 +0200 Subject: MAINT-3827 FIXED crash in KDU texture decoding, likely out of memory --- indra/llappearance/lltexlayer.cpp | 5 ++++- indra/llappearance/llwearable.cpp | 11 ++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) (limited to 'indra/llappearance') diff --git a/indra/llappearance/lltexlayer.cpp b/indra/llappearance/lltexlayer.cpp index 63d01999f0..4cf82a3740 100644 --- a/indra/llappearance/lltexlayer.cpp +++ b/indra/llappearance/lltexlayer.cpp @@ -1973,7 +1973,10 @@ LLGLTexture* LLTexLayerStaticImageList::getTexture(const std::string& file_name, } else { - llassert(gTextureManagerBridgep); + if (!gTextureManagerBridgep) + { + return LLPointer(); + } tex = gTextureManagerBridgep->getLocalTexture( FALSE ); LLPointer image_raw = new LLImageRaw; if( loadImageRaw( file_name, image_raw ) ) diff --git a/indra/llappearance/llwearable.cpp b/indra/llappearance/llwearable.cpp index d86a460511..61cd995cea 100644 --- a/indra/llappearance/llwearable.cpp +++ b/indra/llappearance/llwearable.cpp @@ -420,6 +420,12 @@ LLWearable::EImportResult LLWearable::importStream( std::istream& input_stream, return LLWearable::FAILURE; } LLUUID id = LLUUID(uuid_buffer); + + if (!gTextureManagerBridgep) + { + continue; + } + LLGLTexture* image = gTextureManagerBridgep->getFetchedTexture( id ); if( mTEMap.find(te) != mTEMap.end() ) { @@ -592,7 +598,10 @@ void LLWearable::syncImages(te_map_t &src, te_map_t &dst) { // there is no Local Texture Object in the source image map. Get defaults values for populating the destination image map. image_id = getDefaultTextureImageID((ETextureIndex) te); - image = gTextureManagerBridgep->getFetchedTexture( image_id ); + if (gTextureManagerBridgep) + { + image = gTextureManagerBridgep->getFetchedTexture( image_id ); + } } if( dst.find(te) != dst.end() ) -- cgit v1.2.3