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

Side by Side Diff: src/core/SkValidatingReadBuffer.cpp

Issue 37803002: Adding size parameter to read array functions (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Fixed comments and added test Created 7 years, 1 month 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
1 /* 1 /*
2 * Copyright 2013 Google Inc. 2 * Copyright 2013 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 #include "SkBitmap.h" 8 #include "SkBitmap.h"
9 #include "SkErrorInternals.h" 9 #include "SkErrorInternals.h"
10 #include "SkValidatingReadBuffer.h" 10 #include "SkValidatingReadBuffer.h"
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 } 142 }
143 143
144 void SkValidatingReadBuffer::readPath(SkPath* path) { 144 void SkValidatingReadBuffer::readPath(SkPath* path) {
145 const size_t size = path->readFromMemory(fReader.peek()); 145 const size_t size = path->readFromMemory(fReader.peek());
146 fError = fError || (SkAlign4(size) != size); 146 fError = fError || (SkAlign4(size) != size);
147 if (!fError) { 147 if (!fError) {
148 (void)this->skip(size); 148 (void)this->skip(size);
149 } 149 }
150 } 150 }
151 151
152 uint32_t SkValidatingReadBuffer::readByteArray(void* value) { 152 size_t SkValidatingReadBuffer::readByteArray(void* value, size_t size) {
153 const uint32_t length = this->readUInt(); 153 const uint32_t length = this->readUInt();
154 fError = fError || (size != length);
154 const void* ptr = this->skip(SkAlign4(length)); 155 const void* ptr = this->skip(SkAlign4(length));
155 if (!fError) { 156 if (!fError) {
156 memcpy(value, ptr, length); 157 memcpy(value, ptr, length);
157 return length; 158 return length;
158 } 159 }
159 return 0; 160 return 0;
160 } 161 }
161 162
162 uint32_t SkValidatingReadBuffer::readColorArray(SkColor* colors) { 163 size_t SkValidatingReadBuffer::readColorArray(SkColor* colors, size_t size) {
163 const uint32_t count = this->readUInt(); 164 const uint32_t count = this->readUInt();
164 const uint32_t byteLength = count * sizeof(SkColor); 165 const size_t byteLength = count * sizeof(SkColor);
166 fError = fError || (size != byteLength);
165 const void* ptr = this->skip(SkAlign4(byteLength)); 167 const void* ptr = this->skip(SkAlign4(byteLength));
166 if (!fError) { 168 if (!fError) {
167 memcpy(colors, ptr, byteLength); 169 memcpy(colors, ptr, byteLength);
168 return count; 170 return count;
169 } 171 }
170 return 0; 172 return 0;
171 } 173 }
172 174
173 uint32_t SkValidatingReadBuffer::readIntArray(int32_t* values) { 175 size_t SkValidatingReadBuffer::readIntArray(int32_t* values, size_t size) {
174 const uint32_t count = this->readUInt(); 176 const uint32_t count = this->readUInt();
175 const uint32_t byteLength = count * sizeof(int32_t); 177 const size_t byteLength = count * sizeof(int32_t);
178 fError = fError || (size != byteLength);
176 const void* ptr = this->skip(SkAlign4(byteLength)); 179 const void* ptr = this->skip(SkAlign4(byteLength));
177 if (!fError) { 180 if (!fError) {
178 memcpy(values, ptr, byteLength); 181 memcpy(values, ptr, byteLength);
179 return count; 182 return count;
180 } 183 }
181 return 0; 184 return 0;
182 } 185 }
183 186
184 uint32_t SkValidatingReadBuffer::readPointArray(SkPoint* points) { 187 size_t SkValidatingReadBuffer::readPointArray(SkPoint* points, size_t size) {
185 const uint32_t count = this->readUInt(); 188 const uint32_t count = this->readUInt();
186 const uint32_t byteLength = count * sizeof(SkPoint); 189 const size_t byteLength = count * sizeof(SkPoint);
190 fError = fError || (size != byteLength);
187 const void* ptr = this->skip(SkAlign4(byteLength)); 191 const void* ptr = this->skip(SkAlign4(byteLength));
188 if (!fError) { 192 if (!fError) {
189 memcpy(points, ptr, byteLength); 193 memcpy(points, ptr, byteLength);
190 return count; 194 return count;
191 } 195 }
192 return 0; 196 return 0;
193 } 197 }
194 198
195 uint32_t SkValidatingReadBuffer::readScalarArray(SkScalar* values) { 199 size_t SkValidatingReadBuffer::readScalarArray(SkScalar* values, size_t size) {
196 const uint32_t count = this->readUInt(); 200 const uint32_t count = this->readUInt();
197 const uint32_t byteLength = count * sizeof(SkScalar); 201 const size_t byteLength = count * sizeof(SkScalar);
202 fError = fError || (size != byteLength);
198 const void* ptr = this->skip(SkAlign4(byteLength)); 203 const void* ptr = this->skip(SkAlign4(byteLength));
199 if (!fError) { 204 if (!fError) {
200 memcpy(values, ptr, byteLength); 205 memcpy(values, ptr, byteLength);
201 return count; 206 return count;
202 } 207 }
203 return 0; 208 return 0;
204 } 209 }
205 210
206 uint32_t SkValidatingReadBuffer::getArrayCount() { 211 uint32_t SkValidatingReadBuffer::getArrayCount() {
207 return *(uint32_t*)fReader.peek(); 212 return *(uint32_t*)fReader.peek();
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
254 delete obj; 259 delete obj;
255 obj = NULL; 260 obj = NULL;
256 } 261 }
257 } else { 262 } else {
258 // we must skip the remaining data 263 // we must skip the remaining data
259 this->skip(sizeRecorded); 264 this->skip(sizeRecorded);
260 SkASSERT(false); 265 SkASSERT(false);
261 } 266 }
262 return obj; 267 return obj;
263 } 268 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698