Bug 86822 - gif spacer image detector was looking at uninitialized data;

animated gif spacer flag wasn't being updated.  r=pavlov, sr=blizzard, a=dbaron
This commit is contained in:
tor%cs.brown.edu 2001-06-23 05:04:43 +00:00
parent 6df226985b
commit 1ab9af0ced
4 changed files with 13 additions and 11 deletions

View File

@ -1720,6 +1720,9 @@ NS_IMETHODIMP nsImageGTK::DrawToImage(nsIImage* aDstImage,
gdk_gc_unref(gc);
if (!mIsSpacer || !mAlphaDepth)
dest->mIsSpacer = PR_FALSE;
// need to copy the mImageBits in case we're rendered scaled
PRUint8 *scaledImage = 0, *scaledAlpha = 0;
PRUint8 *rgbPtr=0, *alphaPtr=0;

View File

@ -535,10 +535,10 @@ int HaveDecodedRow(
++rowBufIndex;
}
for (int i=0; i<aDuplicateCount; i++) {
decoder->mImageFrame->SetImageData(decoder->mRGBLine,
bpr, (aRowNumber+i)*bpr);
decoder->mImageFrame->SetAlphaData(decoder->mAlphaLine,
abpr, (aRowNumber+i)*abpr);
decoder->mImageFrame->SetImageData(decoder->mRGBLine,
bpr, (aRowNumber+i)*bpr);
}
}
break;

View File

@ -393,6 +393,11 @@ il_mng_refresh(mng_handle handle,
*cptr++ = *row++;
*cptr++ = *row++;
}
if (container->alpha)
container->mFrame->SetAlphaData(container->alpha +
y*container->mByteWidthAlpha,
container->mByteWidthAlpha,
abpr*y);
container->mFrame->SetImageData(buf, bpr, bpr*y);
#else
container->mFrame->SetImageData(container->image +
@ -400,12 +405,6 @@ il_mng_refresh(mng_handle handle,
container->mByteWidth,
bpr*y);
#endif
if (container->alpha)
container->mFrame->SetAlphaData(container->alpha +
y*container->mByteWidthAlpha,
container->mByteWidthAlpha,
abpr*y);
}
#ifdef XP_MAC
nsMemory::Free(buf);

View File

@ -460,8 +460,8 @@ row_callback(png_structp png_ptr, png_bytep new_row,
aptr[x>>3] |= 1<<(7-x&0x7);
}
}
decoder->mFrame->SetImageData(decoder->colorLine, bpr, row_num*bpr);
decoder->mFrame->SetAlphaData(decoder->alphaLine, abpr, row_num*abpr);
decoder->mFrame->SetImageData(decoder->colorLine, bpr, row_num*bpr);
}
break;
case gfxIFormats::RGB_A8:
@ -478,8 +478,8 @@ row_callback(png_structp png_ptr, png_bytep new_row,
*cptr++ = *line++;
*aptr++ = *line++;
}
decoder->mFrame->SetImageData(decoder->colorLine, bpr, row_num*bpr);
decoder->mFrame->SetAlphaData(decoder->alphaLine, abpr, row_num*abpr);
decoder->mFrame->SetImageData(decoder->colorLine, bpr, row_num*bpr);
}
break;
case gfxIFormats::RGBA:
@ -495,8 +495,8 @@ row_callback(png_structp png_ptr, png_bytep new_row,
*cptr++ = *line++;
*aptr++ = *line++;
}
decoder->mFrame->SetImageData(decoder->colorLine, bpr, row_num*bpr);
decoder->mFrame->SetAlphaData(decoder->alphaLine, abpr, row_num*abpr);
decoder->mFrame->SetImageData(decoder->colorLine, bpr, row_num*bpr);
}
#else
decoder->mFrame->SetImageData(line, bpr, row_num*bpr);