Chromium Code Reviews| Index: src/images/SkImageDecoder_libgif.cpp | 
| diff --git a/src/images/SkImageDecoder_libgif.cpp b/src/images/SkImageDecoder_libgif.cpp | 
| index 1d25120da9c7585abbd002a16d724932d57d1595..ffec30bc05f73ecb615fd4b3dba992253f6fe526 100644 | 
| --- a/src/images/SkImageDecoder_libgif.cpp | 
| +++ b/src/images/SkImageDecoder_libgif.cpp | 
| @@ -225,9 +225,9 @@ bool SkGIFImageDecoder::onDecode(SkStream* sk_stream, SkBitmap* bm, Mode mode) { | 
| return error_return(gif, *bm, "null cmap"); | 
| } | 
| + SkPMColor colorPtr[256]; // storage for worse-case | 
| 
 
scroggo
2013/10/07 21:58:42
worst*
 
reed1
2013/10/09 12:19:54
Done.
 
 | 
| colorCount = cmap->ColorCount; | 
| - SkColorTable* ctable = SkNEW_ARGS(SkColorTable, (colorCount)); | 
| - SkPMColor* colorPtr = ctable->lockColors(); | 
| + SkAlphaType alphaType = kOpaque_SkAlphaType; | 
| for (int index = 0; index < colorCount; index++) | 
| colorPtr[index] = SkPackARGB32(0xFF, | 
| cmap->Colors[index].Red, | 
| @@ -235,13 +235,15 @@ bool SkGIFImageDecoder::onDecode(SkStream* sk_stream, SkBitmap* bm, Mode mode) { | 
| cmap->Colors[index].Blue); | 
| transpIndex = find_transpIndex(temp_save, colorCount); | 
| - if (transpIndex < 0) | 
| - ctable->setFlags(ctable->getFlags() | SkColorTable::kColorsAreOpaque_Flag); | 
| - else | 
| + if (transpIndex >= 0) { | 
| + SkASSERT((unsigned)transpIndex < (unsigned)colorCount); | 
| colorPtr[transpIndex] = 0; // ram in a transparent SkPMColor | 
| - ctable->unlockColors(true); | 
| + alphaType = kPremul_SkAlphaType; | 
| + } | 
| - SkAutoUnref aurts(ctable); | 
| + SkAutoTUnref<SkColorTable> ctable(SkNEW_ARGS(SkColorTable, | 
| + (colorPtr, colorCount, | 
| + alphaType))); | 
| if (!this->allocPixelRef(bm, ctable)) { | 
| return error_return(gif, *bm, "allocPixelRef"); | 
| } |