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

Side by Side Diff: third_party/ktx/ktx.cpp

Issue 1882593002: Make is_ktx safer (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: 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
« no previous file with comments | « third_party/ktx/ktx.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2014 Google Inc. 2 * Copyright 2014 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 "ktx.h" 8 #include "ktx.h"
9 #include "SkBitmap.h" 9 #include "SkBitmap.h"
10 #include "SkStream.h" 10 #include "SkStream.h"
(...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 } 329 }
330 330
331 uint32_t imgSizePadded = (imgSize + 3) & ~3; 331 uint32_t imgSizePadded = (imgSize + 3) & ~3;
332 buf += imgSizePadded; 332 buf += imgSizePadded;
333 bytesLeft -= imgSizePadded; 333 bytesLeft -= imgSizePadded;
334 } 334 }
335 335
336 return bytesLeft == 0; 336 return bytesLeft == 0;
337 } 337 }
338 338
339 bool SkKTXFile::is_ktx(const uint8_t *data) { 339 bool SkKTXFile::is_ktx(const uint8_t data[], size_t size) {
340 return 0 == memcmp(KTX_FILE_IDENTIFIER, data, KTX_FILE_IDENTIFIER_SIZE); 340 return size >= KTX_FILE_IDENTIFIER_SIZE &&
341 0 == memcmp(KTX_FILE_IDENTIFIER, data, KTX_FILE_IDENTIFIER_SIZE);
341 } 342 }
342 343
343 bool SkKTXFile::is_ktx(SkStreamRewindable* stream) { 344 bool SkKTXFile::is_ktx(SkStreamRewindable* stream) {
344 // Read the KTX header and make sure it's valid. 345 // Read the KTX header and make sure it's valid.
345 unsigned char buf[KTX_FILE_IDENTIFIER_SIZE]; 346 unsigned char buf[KTX_FILE_IDENTIFIER_SIZE];
346 bool largeEnough = 347 bool largeEnough =
347 stream->read((void*)buf, KTX_FILE_IDENTIFIER_SIZE) == KTX_FILE_IDENTIFIE R_SIZE; 348 stream->read((void*)buf, KTX_FILE_IDENTIFIER_SIZE) == KTX_FILE_IDENTIFIE R_SIZE;
348 stream->rewind(); 349 stream->rewind();
349 if (!largeEnough) { 350 if (!largeEnough) {
350 return false; 351 return false;
351 } 352 }
352 return is_ktx(buf); 353 return is_ktx(buf, KTX_FILE_IDENTIFIER_SIZE);
353 } 354 }
354 355
355 SkKTXFile::KeyValue SkKTXFile::CreateKeyValue(const char *cstrKey, const char *c strValue) { 356 SkKTXFile::KeyValue SkKTXFile::CreateKeyValue(const char *cstrKey, const char *c strValue) {
356 SkString key(cstrKey); 357 SkString key(cstrKey);
357 SkString value(cstrValue); 358 SkString value(cstrValue);
358 359
359 // Size of buffer is length of string plus the null terminators... 360 // Size of buffer is length of string plus the null terminators...
360 size_t size = key.size() + 1 + value.size() + 1; 361 size_t size = key.size() + 1 + value.size() + 1;
361 362
362 SkAutoSMalloc<256> buf(size); 363 SkAutoSMalloc<256> buf(size);
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
549 for (int i = 0; i < height; ++i) { 550 for (int i = 0; i < height; ++i) {
550 if (!stream->write(rowPtr, bpp*width)) { 551 if (!stream->write(rowPtr, bpp*width)) {
551 return false; 552 return false;
552 } 553 }
553 rowPtr += bitmap.rowBytes(); 554 rowPtr += bitmap.rowBytes();
554 } 555 }
555 } 556 }
556 557
557 return true; 558 return true;
558 } 559 }
OLDNEW
« no previous file with comments | « third_party/ktx/ktx.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698