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; }