Index: src/pdf/SkPDFBitmap.cpp |
diff --git a/src/pdf/SkPDFBitmap.cpp b/src/pdf/SkPDFBitmap.cpp |
index fdc33032a9c793d0ada23d4fdd6d5863599775b8..ed8ea40fb9858d425d5430a21958fd49487c7d02 100644 |
--- a/src/pdf/SkPDFBitmap.cpp |
+++ b/src/pdf/SkPDFBitmap.cpp |
@@ -382,13 +382,15 @@ namespace { |
// This SkPDFObject only outputs the alpha layer of the given bitmap. |
class PDFAlphaBitmap final : public SkPDFObject { |
public: |
- PDFAlphaBitmap(const SkImage* image) : fImage(SkRef(image)) {} |
+ PDFAlphaBitmap(const SkImage* image) : fImage(SkRef(image)) { SkASSERT(image); } |
tomhudson
2016/03/18 13:59:38
You don't want to do the force-to-be-nonnull-by-pa
hal.canary
2016/03/18 21:18:07
We rarely ever refer to SkImage types by reference
|
~PDFAlphaBitmap() {} |
tomhudson
2016/03/18 13:59:38
Since the base class has virtual functions, do we
hal.canary
2016/03/18 21:18:07
it's a final class
tomhudson
2016/03/21 13:54:30
This assertion is not sufficient for me to evaluat
mtklein
2016/03/21 14:11:15
Marking a class final prevents subclassing and als
|
void emitObject(SkWStream* stream, |
const SkPDFObjNumMap& objNumMap, |
const SkPDFSubstituteMap& subs) const override { |
+ SkASSERT(fImage); |
emit_image_xobject(stream, fImage.get(), true, nullptr, objNumMap, subs); |
} |
+ void dump() override { fImage = nullptr; } |
private: |
sk_sp<const SkImage> fImage; |
@@ -404,22 +406,25 @@ public: |
void emitObject(SkWStream* stream, |
const SkPDFObjNumMap& objNumMap, |
const SkPDFSubstituteMap& subs) const override { |
+ SkASSERT(fImage); |
emit_image_xobject(stream, fImage.get(), false, fSMask, objNumMap, subs); |
} |
void addResources(SkPDFObjNumMap* catalog, |
const SkPDFSubstituteMap& subs) const override { |
+ SkASSERT(fImage); |
if (fSMask.get()) { |
SkPDFObject* obj = subs.getSubstitute(fSMask.get()); |
SkASSERT(obj); |
catalog->addObjectRecursively(obj, subs); |
} |
} |
+ void dump() override { fImage = nullptr; fSMask = nullptr; } |
PDFDefaultBitmap(const SkImage* image, SkPDFObject* smask) |
- : fImage(SkRef(image)), fSMask(smask) {} |
+ : fImage(SkRef(image)), fSMask(smask) { SkASSERT(fImage); } |
tomhudson
2016/03/18 13:59:38
No destructor; do we need one since we've got virt
hal.canary
2016/03/18 21:18:07
it's a final class.
mtklein
2016/03/21 14:11:14
(No _explicit_ destructor. There is an implicitly
|
private: |
sk_sp<const SkImage> fImage; |
- const sk_sp<SkPDFObject> fSMask; |
+ sk_sp<SkPDFObject> fSMask; |
}; |
} // namespace |
@@ -437,15 +442,17 @@ public: |
sk_sp<SkData> fData; |
bool fIsYUV; |
PDFJpegBitmap(SkISize size, SkData* data, bool isYUV) |
- : fSize(size), fData(SkRef(data)), fIsYUV(isYUV) {} |
+ : fSize(size), fData(SkRef(data)), fIsYUV(isYUV) { SkASSERT(data); } |
void emitObject(SkWStream*, |
const SkPDFObjNumMap&, |
const SkPDFSubstituteMap&) const override; |
+ void dump() override { fData = nullptr; } |
}; |
void PDFJpegBitmap::emitObject(SkWStream* stream, |
const SkPDFObjNumMap& objNumMap, |
const SkPDFSubstituteMap& substituteMap) const { |
+ SkASSERT(fData); |
SkPDFDict pdfDict("XObject"); |
pdfDict.insertName("Subtype", "Image"); |
pdfDict.insertInt("Width", fSize.width()); |