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

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

Issue 23021015: Initial error handling code (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Adding validation helper file Created 7 years, 3 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 /*
2 * Copyright 2013 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8 #ifndef SkSecureReadBuffer_DEFINED
reed1 2013/09/04 18:49:36 nit: is SkValidatingReadBuffer.h a better name?
sugoi1 2013/09/04 20:14:52 Done.
9 #define SkSecureReadBuffer_DEFINED
10
11 #include "SkRefCnt.h"
12 #include "SkBitmapHeap.h"
13 #include "SkFlattenableBuffers.h"
14 #include "SkPath.h"
15 #include "SkPicture.h"
16 #include "SkReader32.h"
17
18 class SkBitmap;
19
20 #if defined(SK_DEBUG) && defined(SK_BUILD_FOR_MAC)
21 #define DEBUG_NON_DETERMINISTIC_ASSERT
22 #endif
23
24 class SkSecureReadBuffer : public SkFlattenableReadBuffer {
25 public:
26 SkSecureReadBuffer();
27 SkSecureReadBuffer(const void* data, size_t size);
28 SkSecureReadBuffer(SkStream* stream);
29 virtual ~SkSecureReadBuffer();
30
31 SkReader32* getReader32() { return &fReader; }
32
33 uint32_t size() { return fReader.size(); }
34 uint32_t offset() { return fReader.offset(); }
35 bool eof() { return fReader.eof(); }
36 const void* skip(size_t size);
37
38 // primitives
39 virtual bool readBool() SK_OVERRIDE;
40 virtual SkColor readColor() SK_OVERRIDE;
41 virtual SkFixed readFixed() SK_OVERRIDE;
42 virtual int32_t readInt() SK_OVERRIDE;
43 virtual SkScalar readScalar() SK_OVERRIDE;
44 virtual uint32_t readUInt() SK_OVERRIDE;
45 virtual int32_t read32() SK_OVERRIDE;
46
47 // strings -- the caller is responsible for freeing the string contents
48 virtual void readString(SkString* string) SK_OVERRIDE;
49 virtual void* readEncodedString(size_t* length, SkPaint::TextEncoding encodi ng) SK_OVERRIDE;
50
51 // common data structures
52 virtual SkFlattenable* readFlattenable() SK_OVERRIDE;
53 virtual void readPoint(SkPoint* point) SK_OVERRIDE;
54 virtual void readMatrix(SkMatrix* matrix) SK_OVERRIDE;
55 virtual void readIRect(SkIRect* rect) SK_OVERRIDE;
56 virtual void readRect(SkRect* rect) SK_OVERRIDE;
57 virtual void readRegion(SkRegion* region) SK_OVERRIDE;
58 virtual void readPath(SkPath* path) SK_OVERRIDE;
59
60 // binary data and arrays
61 virtual uint32_t readByteArray(void* value) SK_OVERRIDE;
62 virtual uint32_t readColorArray(SkColor* colors) SK_OVERRIDE;
63 virtual uint32_t readIntArray(int32_t* values) SK_OVERRIDE;
64 virtual uint32_t readPointArray(SkPoint* points) SK_OVERRIDE;
65 virtual uint32_t readScalarArray(SkScalar* values) SK_OVERRIDE;
66
67 // helpers to get info about arrays and binary data
68 virtual uint32_t getArrayCount() SK_OVERRIDE;
69
70 virtual void readBitmap(SkBitmap* bitmap) SK_OVERRIDE;
71 virtual SkTypeface* readTypeface() SK_OVERRIDE;
72
73 void setBitmapStorage(SkBitmapHeapReader* bitmapStorage) {
74 SkRefCnt_SafeAssign(fBitmapStorage, bitmapStorage);
75 }
76
77 void setTypefaceArray(SkTypeface* array[], int count) {
78 fTFArray = array;
79 fTFCount = count;
80 }
81
82 /**
83 * Call this with a pre-loaded array of Factories, in the same order as
84 * were created/written by the writer. SkPicture uses this.
85 */
86 void setFactoryPlayback(SkFlattenable::Factory array[], int count) {
87 fFactoryTDArray = NULL;
88 fFactoryArray = array;
89 fFactoryCount = count;
90 }
91
92 /**
93 * Call this with an initially empty array, so the reader can cache each
94 * factory it sees by name. Used by the pipe code in conjunction with
95 * SkOrderedWriteBuffer::setNamedFactoryRecorder.
96 */
97 void setFactoryArray(SkTDArray<SkFlattenable::Factory>* array) {
98 fFactoryTDArray = array;
99 fFactoryArray = NULL;
100 fFactoryCount = 0;
101 }
102
103 /**
104 * Provide a function to decode an SkBitmap from encoded data. Only used if the writer
105 * encoded the SkBitmap. If the proper decoder cannot be used, a red bitmap with the
106 * appropriate size will be used.
107 */
108 void setBitmapDecoder(SkPicture::InstallPixelRefProc bitmapDecoder) {
109 fBitmapDecoder = bitmapDecoder;
110 }
111
112 private:
113 void setMemory(const void* data, size_t size);
114
115 static bool ptr_align_4(const void* ptr) {
116 return (((const char*)ptr - (const char*)NULL) & 3) == 0;
117 }
118
119 SkReader32 fReader;
120 void* fMemoryPtr;
121
122 SkBitmapHeapReader* fBitmapStorage;
123 SkTypeface** fTFArray;
124 int fTFCount;
125
126 SkTDArray<SkFlattenable::Factory>* fFactoryTDArray;
127 SkFlattenable::Factory* fFactoryArray;
128 int fFactoryCount;
129
130 SkPicture::InstallPixelRefProc fBitmapDecoder;
131
132 #ifdef DEBUG_NON_DETERMINISTIC_ASSERT
133 // Debugging counter to keep track of how many bitmaps we
134 // have decoded.
135 int fDecodedBitmapIndex;
136 #endif // DEBUG_NON_DETERMINISTIC_ASSERT
137
138 typedef SkFlattenableReadBuffer INHERITED;
139 };
140
141 #endif // SkSecureReadBuffer_DEFINED
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698