From c07901e29ed545bbb02e3bddf148fe1104b94e9f Mon Sep 17 00:00:00 2001 From: Jacek Antonelli Date: Fri, 15 Aug 2008 23:44:56 -0500 Subject: Second Life viewer sources 1.15.1.3 --- linden/indra/newview/llviewerimagelist.cpp | 38 ++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 4 deletions(-) (limited to 'linden/indra/newview/llviewerimagelist.cpp') diff --git a/linden/indra/newview/llviewerimagelist.cpp b/linden/indra/newview/llviewerimagelist.cpp index 9da84fa..4e87905 100644 --- a/linden/indra/newview/llviewerimagelist.cpp +++ b/linden/indra/newview/llviewerimagelist.cpp @@ -125,6 +125,9 @@ void LLViewerImageList::doPreloadImages() // Set the "white" image LLViewerImage::sWhiteImagep = preloadImage("white.tga", LLUUID::null, TRUE);; + // Speeds up startup by 4-5 seconds. JC + if (!gPreloadImages) return; + // Preload some images preloadImage("button_anim_pause.tga", LLUUID::null, FALSE); preloadImage("button_anim_pause_selected.tga", LLUUID::null, FALSE); @@ -1116,6 +1119,7 @@ LLPointer LLViewerImageList::convertToUploadFile(LLPointergetU16Fast(_PREHASH_ImageID, _PREHASH_Packets, packets); msg->getU32Fast(_PREHASH_ImageID, _PREHASH_Size, totalbytes); - U16 data_size = msg->getSizeFast(_PREHASH_ImageData, _PREHASH_Data); + S32 data_size = msg->getSizeFast(_PREHASH_ImageData, _PREHASH_Data); if (!data_size) { return; } - + if (data_size < 0) + { + // msg->getSizeFast() is probably trying to tell us there + // was an error. + llerrs << "image header chunk size was negative: " + << data_size << llendl; + return; + } + // this buffer gets saved off in the packet list U8 *data = new U8[data_size]; msg->getBinaryDataFast(_PREHASH_ImageData, _PREHASH_Data, data, data_size); @@ -1246,6 +1265,7 @@ void LLViewerImageList::receiveImageHeader(LLMessageSystem *msg, void **user_dat LLViewerImage *image = gImageList.getImage(id); if (!image) { + delete [] data; return; } image->mLastPacketTimer.reset(); @@ -1284,15 +1304,24 @@ void LLViewerImageList::receiveImagePacket(LLMessageSystem *msg, void **user_dat //llprintline("Start decode, image header..."); msg->getUUIDFast(_PREHASH_ImageID, _PREHASH_ID, id); msg->getU16Fast(_PREHASH_ImageID, _PREHASH_Packet, packet_num); - U16 data_size = msg->getSizeFast(_PREHASH_ImageData, _PREHASH_Data); + S32 data_size = msg->getSizeFast(_PREHASH_ImageData, _PREHASH_Data); if (!data_size) { return; } + if (data_size < 0) + { + // msg->getSizeFast() is probably trying to tell us there + // was an error. + llerrs << "image data chunk size was negative: " + << data_size << llendl; + return; + } if (data_size > MTUBYTES) { llerrs << "image data chunk too large: " << data_size << " bytes" << llendl; + return; } U8 *data = new U8[data_size]; msg->getBinaryDataFast(_PREHASH_ImageData, _PREHASH_Data, data, data_size); @@ -1300,6 +1329,7 @@ void LLViewerImageList::receiveImagePacket(LLMessageSystem *msg, void **user_dat LLViewerImage *image = gImageList.getImage(id); if (!image) { + delete [] data; return; } image->mLastPacketTimer.reset(); -- cgit v1.1