From d430558ea9ea437bd46997b6d2397847195e42bf Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Wed, 18 Dec 2013 21:08:34 -0800 Subject: [PATCH] fix expectedBytes() mismatch between edit packets and normal packets --- libraries/particles/src/Particle.cpp | 15 ++++++++++++++- libraries/particles/src/Particle.h | 1 + 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/libraries/particles/src/Particle.cpp b/libraries/particles/src/Particle.cpp index 9248bf540f..ec0783d0d9 100644 --- a/libraries/particles/src/Particle.cpp +++ b/libraries/particles/src/Particle.cpp @@ -115,6 +115,19 @@ int Particle::expectedBytes() { return expectedBytes; } +int Particle::expectedEditMessageBytes() { + int expectedBytes = sizeof(uint32_t) // id + + sizeof(float) // radius + + sizeof(glm::vec3) // position + + sizeof(rgbColor) // color + + sizeof(glm::vec3) // velocity + + sizeof(glm::vec3) // gravity + + sizeof(float) // damping + + sizeof(bool); // inhand + // potentially more... + return expectedBytes; +} + int Particle::readParticleDataFromBuffer(const unsigned char* data, int bytesLeftToRead, ReadBitstreamToTreeParams& args) { int bytesRead = 0; if (bytesLeftToRead >= expectedBytes()) { @@ -308,7 +321,7 @@ bool Particle::encodeParticleEditMessageDetails(PACKET_TYPE command, int count, int octets = numberOfThreeBitSectionsInCode(octcode); int lengthOfOctcode = bytesRequiredForCodeLength(octets); - int lenfthOfEditData = lengthOfOctcode + expectedBytes(); + int lenfthOfEditData = lengthOfOctcode + expectedEditMessageBytes(); // make sure we have room to copy this particle if (sizeOut + lenfthOfEditData > sizeIn) { diff --git a/libraries/particles/src/Particle.h b/libraries/particles/src/Particle.h index 995a8675ce..5090828724 100644 --- a/libraries/particles/src/Particle.h +++ b/libraries/particles/src/Particle.h @@ -96,6 +96,7 @@ public: bool appendParticleData(OctreePacketData* packetData) const; int readParticleDataFromBuffer(const unsigned char* data, int bytesLeftToRead, ReadBitstreamToTreeParams& args); static int expectedBytes(); + static int expectedEditMessageBytes(); static bool encodeParticleEditMessageDetails(PACKET_TYPE command, int count, const ParticleDetail* details, unsigned char* bufferOut, int sizeIn, int& sizeOut);