Closed Bug 382764 Opened 17 years ago Closed 17 years ago

Spurious white block in animated GIF

Categories

(Core :: Graphics: ImageLib, defect)

defect
Not set
normal

Tracking

()

RESOLVED FIXED

People

(Reporter: dopefishjustin, Unassigned)

References

()

Details

Spun off from bug 376446 - the animated GIF in the URL shows a white (transparent, really) square during part of the animation which is not shown with other programs like IE7 and IrfanView.

Bug 376446 comment 40 suggests this might be fixed by the patch for bug 317748, so marking dependent for now.
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9a5pre) Gecko/20070531 Minefield/3.0a5pre

RyanVM asked me to see if the patch in bug 317748 fixed this for me. I applied the patch and can confirm it fixes this issue.
OS: Windows XP → All
Hardware: PC → All
The following code in imgContainer.cpp SetMaskVisibility is suspicious:

 928 asqueella  1.45   PRUint8* alphaData;
 929                   PRUint32 alphaDataLength;
 930                   const PRUint8 setMaskTo = aVisible ? 0xFF : 0x00;
 931                 
 932                   aFrame->LockImageData();
 933                   nsresult res = aFrame->GetImageData(&alphaData, &alphaDataLength);
 934                   if (NS_SUCCEEDED(res)) {
 935                 #ifdef IS_LITTLE_ENDIAN
 936                     alphaData += aY*frameWidth*4 + 3;
 937                 #else
 938                     alphaData += aY*frameWidth*4;
 939                 #endif
 940                     for (PRInt32 j = height; j > 0; --j) {
 941                       for (PRInt32 i = (aX+width-1)*4; i >= aX; i -= 4) {
 942                         alphaData[i] = setMaskTo;
 943                       }
 944                       alphaData += frameWidth*4;
 945                     }
 946                   }
 947                   aFrame->UnlockImageData();

Especially the line:
 941                       for (PRInt32 i = (aX+width-1)*4; i >= aX; i -= 4) {
i is column position multiplied by 4 (so that it steps by the 4 bytes per pixel). But the end check: i > aX is then not right, and should be i >= aX*4.

Instead of trying to fix this buggy code, bug 317748 completely removes this, so let we do that. 
Fixed by the patch for bug 317748.
Status: NEW → RESOLVED
Closed: 17 years ago
Resolution: --- → FIXED
Flags: in-testsuite?
You need to log in before you can comment on or make changes to this bug.