From 55c576e560c6b9643db694545169e6fe0dc9a75d Mon Sep 17 00:00:00 2001 From: Ricardo Quesada Date: Tue, 2 Aug 2016 16:05:49 -0700 Subject: [PATCH] fix: applies PR #650 correctly instead of passing and `int` to `takeData()` it passes a `ssize_t` preventing a possible stackoverflow certain 64-bit platforms --- spine-cocos2dx/src/spine/spine-cocos2dx.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/spine-cocos2dx/src/spine/spine-cocos2dx.cpp b/spine-cocos2dx/src/spine/spine-cocos2dx.cpp index 8d5e1551b..07d5284f7 100644 --- a/spine-cocos2dx/src/spine/spine-cocos2dx.cpp +++ b/spine-cocos2dx/src/spine/spine-cocos2dx.cpp @@ -62,6 +62,7 @@ GLuint filter (spAtlasFilter filter) { void _spAtlasPage_createTexture (spAtlasPage* self, const char* path) { Texture2D* texture = Director::getInstance()->getTextureCache()->addImage(path); + CCASSERT(texture != nullptr, "Invalid image"); texture->retain(); Texture2D::TexParams textureParams = {filter(self->minFilter), filter(self->magFilter), wrap(self->uWrap), wrap(self->vWrap)}; @@ -77,11 +78,12 @@ void _spAtlasPage_disposeTexture (spAtlasPage* self) { } char* _spUtil_readFile (const char* path, int* length) { - Data data = FileUtils::getInstance()->getDataFromFile( - FileUtils::getInstance()->fullPathForFilename(path)); - if (data.isNull()) return 0; - *length = static_cast(data.getSize()); - char* bytes = MALLOC(char, *length); - memcpy(bytes, data.getBytes(), *length); - return bytes; + Data data = FileUtils::getInstance()->getDataFromFile(FileUtils::getInstance()->fullPathForFilename(path)); + if (data.isNull()) return 0; + + // avoid buffer overflow (int is shorter than ssize_t in certain platforms) + ssize_t tmpLen; + char *ret = (char*)data.takeBuffer(&tmpLen); + *length = static_cast(tmpLen); + return ret; }