| Index: tools/skpinfo.cpp | 
| diff --git a/tools/skpinfo.cpp b/tools/skpinfo.cpp | 
| index c7fd8c870885a6a56ac59a7c4f288b51edaaf4ee..4b65cb8a8c692aacc9fa6f2dbb04a9223925dedb 100644 | 
| --- a/tools/skpinfo.cpp | 
| +++ b/tools/skpinfo.cpp | 
| @@ -9,6 +9,7 @@ | 
| #include "SkPicture.h" | 
| #include "SkPictureData.h" | 
| #include "SkStream.h" | 
| +#include "SkFontDescriptor.h" | 
|  | 
| DEFINE_string2(input, i, "", "skp on which to report"); | 
| DEFINE_bool2(version, v, true, "version"); | 
| @@ -107,13 +108,26 @@ int tool_main(int argc, char** argv) { | 
| SkDebugf("SK_PICT_FACTORY_TAG %d\n", chunkSize); | 
| } | 
| break; | 
| -        case SK_PICT_TYPEFACE_TAG: | 
| +        case SK_PICT_TYPEFACE_TAG: { | 
| if (FLAGS_tags && !FLAGS_quiet) { | 
| SkDebugf("SK_PICT_TYPEFACE_TAG %d\n", chunkSize); | 
| -                SkDebugf("Exiting early due to format limitations\n"); | 
| } | 
| -            return kSuccess;       // TODO: need to store size in bytes | 
| + | 
| +            const int count = SkToInt(chunkSize); | 
| +            for (int i = 0; i < count; i++) { | 
| +                SkFontDescriptor desc; | 
| +                if (!SkFontDescriptor::Deserialize(&stream, &desc)) { | 
| +                    if (!FLAGS_quiet) { | 
| +                        SkDebugf("File corruption in SkFontDescriptor\n"); | 
| +                    } | 
| +                    return kInvalidTag; | 
| +                } | 
| +            } | 
| + | 
| +            // clear this since we've consumed all the typefaces | 
| +            chunkSize = 0; | 
| break; | 
| +        } | 
| case SK_PICT_PICTURE_TAG: | 
| if (FLAGS_tags && !FLAGS_quiet) { | 
| SkDebugf("SK_PICT_PICTURE_TAG %d\n", chunkSize); | 
|  |