diff --git a/spine-c/spine-c/src/spine/SkeletonBinary.c b/spine-c/spine-c/src/spine/SkeletonBinary.c index 5d15b0032..a6c594ebb 100644 --- a/spine-c/spine-c/src/spine/SkeletonBinary.c +++ b/spine-c/spine-c/src/spine/SkeletonBinary.c @@ -825,12 +825,15 @@ spAttachment* spSkeletonBinary_readAttachment(spSkeletonBinary* self, _dataInput spSkin* spSkeletonBinary_readSkin(spSkeletonBinary* self, _dataInput* input, int/*bool*/ defaultSkin, spSkeletonData* skeletonData, int/*bool*/ nonessential) { - spSkin* skin; - int i, n, ii, nn; - const char* skinName = defaultSkin ? "default" : readStringRef(input, skeletonData); - skin = spSkin_create(skinName); + spSkin *skin; + int i, n, ii, nn, slotCount; - if (!defaultSkin) { + if (defaultSkin) { + slotCount = readVarint(input, 1); + if (slotCount == 0) return 0; + skin = spSkin_create("default"); + } else { + skin = spSkin_create(readStringRef(input, skeletonData)); for (i = 0, n = readVarint(input, 1); i < n; i++) spBoneDataArray_add(skin->bones, skeletonData->bones[readVarint(input, 1)]); @@ -842,9 +845,11 @@ spSkin* spSkeletonBinary_readSkin(spSkeletonBinary* self, _dataInput* input, int for (i = 0, n = readVarint(input, 1); i < n; i++) spPathConstraintDataArray_add(skin->pathConstraints, skeletonData->pathConstraints[readVarint(input, 1)]); + + slotCount = readVarint(input, 1); } - for (i = 0, n = readVarint(input, 1); i < n; ++i) { + for (i = 0; i < slotCount; ++i) { int slotIndex = readVarint(input, 1); for (ii = 0, nn = readVarint(input, 1); ii < nn; ++ii) { const char* name = readStringRef(input, skeletonData); diff --git a/spine-cpp/spine-cpp/src/spine/SkeletonBinary.cpp b/spine-cpp/spine-cpp/src/spine/SkeletonBinary.cpp index 9e996017f..a0f6af924 100644 --- a/spine-cpp/spine-cpp/src/spine/SkeletonBinary.cpp +++ b/spine-cpp/spine-cpp/src/spine/SkeletonBinary.cpp @@ -457,9 +457,14 @@ int SkeletonBinary::readVarint(DataInput *input, bool optimizePositive) { Skin * SkeletonBinary::readSkin(DataInput *input, bool defaultSkin, SkeletonData *skeletonData, bool nonessential) { - Skin *skin = new(__FILE__, __LINE__) Skin(defaultSkin ? "default" : readStringRef(input, skeletonData)); - - if (!defaultSkin) { + Skin *skin; + int slotCount = 0; + if (defaultSkin) { + slotCount = readVarint(input, true); + if (slotCount == 0) return NULL; + skin = new(__FILE__, __LINE__) Skin("default"); + } else { + skin = new(__FILE__, __LINE__) Skin(readStringRef(input, skeletonData)); for (int i = 0, n = readVarint(input, true); i < n; i++) skin->getBones().add(skeletonData->_bones[readVarint(input, true)]); @@ -471,9 +476,10 @@ SkeletonBinary::readSkin(DataInput *input, bool defaultSkin, SkeletonData *skele for (int i = 0, n = readVarint(input, true); i < n; i++) skin->getConstraints().add(skeletonData->_pathConstraints[readVarint(input, true)]); + slotCount = readVarint(input, true); } - for (int i = 0, n = readVarint(input, true); i < n; ++i) { + for (int i = 0; i < slotCount; ++i) { int slotIndex = readVarint(input, true); for (int ii = 0, nn = readVarint(input, true); ii < nn; ++ii) { String name(readStringRef(input, skeletonData));