OLD | NEW |
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 Loading... |
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 Loading... |
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 } |
OLD | NEW |