SkPDF: SkTypeface::openStream could return nullptr
Speculative fix for hard-to-reproduce bug. BUG=163892 GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1842163002 Review URL: https://codereview.chromium.org/1842163002
This commit is contained in:
parent
491fb17cab
commit
3243143f25
@ -590,7 +590,10 @@ static size_t get_subset_font_stream(const char* fontName,
|
||||
SkPDFStream** fontStream) {
|
||||
int ttcIndex;
|
||||
std::unique_ptr<SkStream> fontData(typeface->openStream(&ttcIndex));
|
||||
SkASSERT(fontData.get());
|
||||
SkASSERT(fontData);
|
||||
if (!fontData) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
size_t fontSize = fontData->getLength();
|
||||
|
||||
@ -1047,6 +1050,9 @@ bool SkPDFCIDFont::addFontDescriptor(int16_t defaultWidth,
|
||||
typeface(),
|
||||
*subset,
|
||||
&rawStream);
|
||||
if (0 == fontSize) {
|
||||
return false;
|
||||
}
|
||||
if (rawStream) {
|
||||
fontStream.reset(rawStream);
|
||||
fontStream->insertInt("Length1", fontSize);
|
||||
@ -1059,6 +1065,9 @@ bool SkPDFCIDFont::addFontDescriptor(int16_t defaultWidth,
|
||||
std::unique_ptr<SkStreamAsset> fontData(
|
||||
this->typeface()->openStream(nullptr));
|
||||
SkASSERT(fontData);
|
||||
if (!fontData || 0 == fontData->getLength()) {
|
||||
return false;
|
||||
}
|
||||
fontSize = fontData->getLength();
|
||||
SkASSERT(fontSize > 0);
|
||||
fontStream.reset(new SkPDFSharedStream(fontData.release()));
|
||||
@ -1068,9 +1077,15 @@ bool SkPDFCIDFont::addFontDescriptor(int16_t defaultWidth,
|
||||
}
|
||||
case SkAdvancedTypefaceMetrics::kCFF_Font:
|
||||
case SkAdvancedTypefaceMetrics::kType1CID_Font: {
|
||||
std::unique_ptr<SkStreamAsset> fontData(
|
||||
this->typeface()->openStream(nullptr));
|
||||
SkASSERT(fontData);
|
||||
SkASSERT(fontData->getLength() > 0);
|
||||
if (!fontData || 0 == fontData->getLength()) {
|
||||
return false;
|
||||
}
|
||||
sk_sp<SkPDFSharedStream> fontStream(
|
||||
new SkPDFSharedStream(this->typeface()->openStream(nullptr)));
|
||||
|
||||
new SkPDFSharedStream(fontData.release()));
|
||||
if (getType() == SkAdvancedTypefaceMetrics::kCFF_Font) {
|
||||
fontStream->dict()->insertName("Subtype", "Type1C");
|
||||
} else {
|
||||
@ -1198,7 +1213,12 @@ bool SkPDFType1Font::addFontDescriptor(int16_t defaultWidth) {
|
||||
size_t header SK_INIT_TO_AVOID_WARNING;
|
||||
size_t data SK_INIT_TO_AVOID_WARNING;
|
||||
size_t trailer SK_INIT_TO_AVOID_WARNING;
|
||||
std::unique_ptr<SkStream> rawFontData(typeface()->openStream(&ttcIndex));
|
||||
std::unique_ptr<SkStreamAsset> rawFontData(typeface()->openStream(&ttcIndex));
|
||||
SkASSERT(rawFontData);
|
||||
SkASSERT(rawFontData->getLength() > 0);
|
||||
if (!rawFontData || 0 == rawFontData->getLength()) {
|
||||
return false;
|
||||
}
|
||||
sk_sp<SkData> fontData(handle_type1_stream(rawFontData.get(), &header,
|
||||
&data, &trailer));
|
||||
if (fontData.get() == nullptr) {
|
||||
|
Loading…
Reference in New Issue
Block a user