From ab3ea65d5417a661bb561de88e3f62b099b1f7af Mon Sep 17 00:00:00 2001 From: samcake Date: Wed, 17 May 2017 12:36:12 -0700 Subject: [PATCH] Simply add protections when accessing the mip bytes of a texture when provided from a KtxStorage --- libraries/gpu/src/gpu/Texture_ktx.cpp | 11 ++++++++++- libraries/shared/src/shared/Storage.cpp | 4 +++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/libraries/gpu/src/gpu/Texture_ktx.cpp b/libraries/gpu/src/gpu/Texture_ktx.cpp index 524fd0a88c..27d92fecf2 100644 --- a/libraries/gpu/src/gpu/Texture_ktx.cpp +++ b/libraries/gpu/src/gpu/Texture_ktx.cpp @@ -210,7 +210,16 @@ PixelsPointer KtxStorage::getMipFace(uint16 level, uint8 face) const { auto faceSize = _ktxDescriptor->getMipFaceTexelsSize(level, face); if (faceSize != 0 && faceOffset != 0) { auto file = maybeOpenFile(); - result = file->createView(faceSize, faceOffset)->toMemoryStorage(); + if (file) { + auto storageView = file->createView(faceSize, faceOffset); + if (storageView) { + return storageView->toMemoryStorage(); + } else { + qWarning() << "Failed to get a valid storageView for faceSize=" << faceSize << " faceOffset=" << faceOffset << "out of valid file " << QString::fromStdString(_filename); + } + } else { + qWarning() << "Failed to get a valid file out of maybeOpenFile " << QString::fromStdString(_filename); + } } return result; } diff --git a/libraries/shared/src/shared/Storage.cpp b/libraries/shared/src/shared/Storage.cpp index f6585e6ecb..e479559e6a 100644 --- a/libraries/shared/src/shared/Storage.cpp +++ b/libraries/shared/src/shared/Storage.cpp @@ -25,7 +25,9 @@ StoragePointer Storage::createView(size_t viewSize, size_t offset) const { viewSize = selfSize; } if ((viewSize + offset) > selfSize) { - throw std::runtime_error("Invalid mapping range"); + return StoragePointer(); + //TODO: Disable te exception for now and return an empty storage instead. + //throw std::runtime_error("Invalid mapping range"); } return std::make_shared(shared_from_this(), viewSize, data() + offset); }