Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(156)

Side by Side Diff: src/core/SkReadBuffer.h

Issue 1893423002: Fix ImageFilter fuzzer issue (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Address code review comments Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright 2011 Google Inc. 2 * Copyright 2011 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #ifndef SkReadBuffer_DEFINED 8 #ifndef SkReadBuffer_DEFINED
9 #define SkReadBuffer_DEFINED 9 #define SkReadBuffer_DEFINED
10 10
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 bool isScalarFloat() const { return SkToBool(fFlags & kScalarIsFloat_Flag); } 94 bool isScalarFloat() const { return SkToBool(fFlags & kScalarIsFloat_Flag); }
95 bool isPtr64Bit() const { return SkToBool(fFlags & kPtrIs64Bit_Flag); } 95 bool isPtr64Bit() const { return SkToBool(fFlags & kPtrIs64Bit_Flag); }
96 bool isValidating() const { return SkToBool(fFlags & kValidation_Flag); } 96 bool isValidating() const { return SkToBool(fFlags & kValidation_Flag); }
97 97
98 SkReader32* getReader32() { return &fReader; } 98 SkReader32* getReader32() { return &fReader; }
99 99
100 size_t size() { return fReader.size(); } 100 size_t size() { return fReader.size(); }
101 size_t offset() { return fReader.offset(); } 101 size_t offset() { return fReader.offset(); }
102 bool eof() { return fReader.eof(); } 102 bool eof() { return fReader.eof(); }
103 virtual const void* skip(size_t size) { return fReader.skip(size); } 103 virtual const void* skip(size_t size) { return fReader.skip(size); }
104
105 void setOffset(size_t offset) { fReader.setOffset(offset); }
reed1 2016/04/20 13:26:37 who needs this, why?
robertphillips 2016/04/20 17:09:40 SkPicturePlayback::handleOp uses it as an optimiza
106
104 void* readFunctionPtr() { return fReader.readPtr(); } 107 void* readFunctionPtr() { return fReader.readPtr(); }
105 108
106 // primitives 109 // primitives
107 virtual bool readBool(); 110 virtual bool readBool();
108 virtual SkColor readColor(); 111 virtual SkColor readColor();
109 virtual int32_t readInt(); 112 virtual int32_t readInt();
110 virtual SkScalar readScalar(); 113 virtual SkScalar readScalar();
111 virtual uint32_t readUInt(); 114 virtual uint32_t readUInt();
112 virtual int32_t read32(); 115 virtual int32_t read32();
113 116
114 // strings -- the caller is responsible for freeing the string contents 117 // strings -- the caller is responsible for freeing the string contents
115 virtual void readString(SkString* string); 118 virtual void readString(SkString* string);
116 virtual void* readEncodedString(size_t* length, SkPaint::TextEncoding encodi ng); 119 virtual void* readEncodedString(size_t* length, SkPaint::TextEncoding encodi ng);
117 120
118 // common data structures 121 // common data structures
119 virtual void readPoint(SkPoint* point); 122 virtual void readPoint(SkPoint* point);
120 SkPoint readPoint() { SkPoint p; this->readPoint(&p); return p; } 123 SkPoint readPoint() { SkPoint p; this->readPoint(&p); return p; }
121 virtual void readMatrix(SkMatrix* matrix); 124 virtual void readMatrix(SkMatrix* matrix);
122 virtual void readIRect(SkIRect* rect); 125 virtual void readIRect(SkIRect* rect);
123 virtual void readRect(SkRect* rect); 126 virtual void readRect(SkRect* rect);
127 virtual void readRRect(SkRRect* rrect);
124 virtual void readRegion(SkRegion* region); 128 virtual void readRegion(SkRegion* region);
125 129
126 virtual void readPath(SkPath* path); 130 virtual void readPath(SkPath* path);
127 void readPaint(SkPaint* paint) { paint->unflatten(*this); } 131 void readPaint(SkPaint* paint) { paint->unflatten(*this); }
128 132
129 virtual SkFlattenable* readFlattenable(SkFlattenable::Type); 133 virtual SkFlattenable* readFlattenable(SkFlattenable::Type);
130 template <typename T> sk_sp<T> readFlattenable() { 134 template <typename T> sk_sp<T> readFlattenable() {
131 return sk_sp<T>((T*)this->readFlattenable(T::GetFlattenableType())); 135 return sk_sp<T>((T*)this->readFlattenable(T::GetFlattenableType()));
132 } 136 }
133 sk_sp<SkColorFilter> readColorFilter() { return this->readFlattenable<SkColo rFilter>(); } 137 sk_sp<SkColorFilter> readColorFilter() { return this->readFlattenable<SkColo rFilter>(); }
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 /** 200 /**
197 * Provide a function to decode an SkBitmap from encoded data. Only used if the writer 201 * Provide a function to decode an SkBitmap from encoded data. Only used if the writer
198 * encoded the SkBitmap. If the proper decoder cannot be used, a red bitmap with the 202 * encoded the SkBitmap. If the proper decoder cannot be used, a red bitmap with the
199 * appropriate size will be used. 203 * appropriate size will be used.
200 */ 204 */
201 void setBitmapDecoder(SkPicture::InstallPixelRefProc bitmapDecoder) { 205 void setBitmapDecoder(SkPicture::InstallPixelRefProc bitmapDecoder) {
202 fBitmapDecoder = bitmapDecoder; 206 fBitmapDecoder = bitmapDecoder;
203 } 207 }
204 208
205 // Default impelementations don't check anything. 209 // Default impelementations don't check anything.
206 virtual bool validate(bool isValid) { return true; } 210 virtual bool validate(bool isValid) { return isValid; }
207 virtual bool isValid() const { return true; } 211 virtual bool isValid() const { return true; }
208 virtual bool validateAvailable(size_t size) { return true; } 212 virtual bool validateAvailable(size_t size) { return true; }
213 bool validateIndex(int index, int count) {
214 return this->validate(index >= 0 && index < count);
215 }
209 216
210 protected: 217 protected:
211 SkReader32 fReader; 218 SkReader32 fReader;
212 219
213 private: 220 private:
214 bool readArray(void* value, size_t size, size_t elementSize); 221 bool readArray(void* value, size_t size, size_t elementSize);
215 222
216 uint32_t fFlags; 223 uint32_t fFlags;
217 int fVersion; 224 int fVersion;
218 225
219 void* fMemoryPtr; 226 void* fMemoryPtr;
220 227
221 SkBitmapHeapReader* fBitmapStorage; 228 SkBitmapHeapReader* fBitmapStorage;
222 SkTypeface** fTFArray; 229 SkTypeface** fTFArray;
223 int fTFCount; 230 int fTFCount;
224 231
225 SkFlattenable::Factory* fFactoryArray; 232 SkFlattenable::Factory* fFactoryArray;
226 int fFactoryCount; 233 int fFactoryCount;
227 234
228 SkPicture::InstallPixelRefProc fBitmapDecoder; 235 SkPicture::InstallPixelRefProc fBitmapDecoder;
229 236
230 #ifdef DEBUG_NON_DETERMINISTIC_ASSERT 237 #ifdef DEBUG_NON_DETERMINISTIC_ASSERT
231 // Debugging counter to keep track of how many bitmaps we 238 // Debugging counter to keep track of how many bitmaps we
232 // have decoded. 239 // have decoded.
233 int fDecodedBitmapIndex; 240 int fDecodedBitmapIndex;
234 #endif // DEBUG_NON_DETERMINISTIC_ASSERT 241 #endif // DEBUG_NON_DETERMINISTIC_ASSERT
235 }; 242 };
236 243
237 #endif // SkReadBuffer_DEFINED 244 #endif // SkReadBuffer_DEFINED
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698