diff --git a/mozilla/modules/libpr0n/decoders/jpeg/nsJPEGDecoder.cpp b/mozilla/modules/libpr0n/decoders/jpeg/nsJPEGDecoder.cpp index 03bc5fc476c..72b684529c9 100644 --- a/mozilla/modules/libpr0n/decoders/jpeg/nsJPEGDecoder.cpp +++ b/mozilla/modules/libpr0n/decoders/jpeg/nsJPEGDecoder.cpp @@ -192,12 +192,17 @@ NS_IMETHODIMP nsJPEGDecoder::Init(imgILoad *aLoad) return NS_ERROR_OUT_OF_MEMORY; mImageLoad->SetImage(mImage); - nsresult result = mImage->SetDiscardable("image/jpeg"); - if (NS_FAILED(result)) { - mState = JPEG_ERROR; - PR_LOG(gJPEGDecoderAccountingLog, PR_LOG_DEBUG, - (" (could not set image container to discardable)")); - return result; + + // Don't discard if we're multipart, and assume we are for safety. + PRBool multipart = PR_TRUE; + if (NS_SUCCEEDED(mImageLoad->GetIsMultiPartChannel(&multipart)) && !multipart) { + nsresult result = mImage->SetDiscardable("image/jpeg"); + if (NS_FAILED(result)) { + mState = JPEG_ERROR; + PR_LOG(gJPEGDecoderAccountingLog, PR_LOG_DEBUG, + (" (could not set image container to discardable)")); + return result; + } } } diff --git a/mozilla/modules/libpr0n/decoders/png/nsPNGDecoder.cpp b/mozilla/modules/libpr0n/decoders/png/nsPNGDecoder.cpp index bccabfbcde8..1455aeff37a 100644 --- a/mozilla/modules/libpr0n/decoders/png/nsPNGDecoder.cpp +++ b/mozilla/modules/libpr0n/decoders/png/nsPNGDecoder.cpp @@ -302,11 +302,16 @@ NS_IMETHODIMP nsPNGDecoder::Init(imgILoad *aLoad) return NS_ERROR_OUT_OF_MEMORY; mImageLoad->SetImage(mImage); - if (NS_FAILED(mImage->SetDiscardable("image/png"))) { - PR_LOG(gPNGDecoderAccountingLog, PR_LOG_DEBUG, - ("PNGDecoderAccounting: info_callback(): failed to set image container %p as discardable", - mImage.get())); - return NS_ERROR_FAILURE; + + // Don't discard if we're multipart, and assume we are for safety. + PRBool multipart = PR_TRUE; + if (NS_SUCCEEDED(mImageLoad->GetIsMultiPartChannel(&multipart)) && !multipart) { + if (NS_FAILED(mImage->SetDiscardable("image/png"))) { + PR_LOG(gPNGDecoderAccountingLog, PR_LOG_DEBUG, + ("PNGDecoderAccounting: info_callback(): failed to set image container %p as discardable", + mImage.get())); + return NS_ERROR_FAILURE; + } } }