Check for trailing byte in speed

This commit is contained in:
TheEssem 2021-05-17 23:44:28 -05:00
parent 7aa684eae6
commit 55a150c0c9
No known key found for this signature in database
GPG key ID: A3F9F02129092FCA

View file

@ -31,7 +31,7 @@ Napi::Value Speed(const Napi::CallbackInfo &info) {
char *fileData = data.Data();
char *match = "\x21\xF9\x04";
char *match = "\x00\x21\xF9\x04";
// if passed a delay, use that. otherwise iterate over every frame.
if (delay == 0) {
@ -41,26 +41,26 @@ Napi::Value Speed(const Napi::CallbackInfo &info) {
int amount = 0;
lastPos = (char *)memchr(fileData, '\x21', data.Length());
lastPos = (char *)memchr(fileData, '\x00', data.Length());
while (lastPos != NULL) {
if (memcmp(lastPos, match, 3) != 0) {
lastPos = (char *)memchr(lastPos + 1, '\x21',
if (memcmp(lastPos, match, 4) != 0) {
lastPos = (char *)memchr(lastPos + 1, '\x00',
(data.Length() - (lastPos - fileData)) - 1);
continue;
}
++amount;
uint16_t old_delay;
memcpy(&old_delay, lastPos + 4, 2);
memcpy(&old_delay, lastPos + 5, 2);
old_delays.push_back(old_delay);
lastPos = (char *)memchr(lastPos + 1, '\x21',
lastPos = (char *)memchr(lastPos + 1, '\x00',
(data.Length() - (lastPos - fileData)) - 1);
}
int currentFrame = 0;
lastPos = (char *)memchr(fileData, '\x21', data.Length());
lastPos = (char *)memchr(fileData, '\x00', data.Length());
while (lastPos != NULL) {
if (memcmp(lastPos, match, 3) != 0) {
lastPos = (char *)memchr(lastPos + 1, '\x21',
if (memcmp(lastPos, match, 4) != 0) {
lastPos = (char *)memchr(lastPos + 1, '\x00',
(data.Length() - (lastPos - fileData)) - 1);
continue;
}
@ -70,8 +70,8 @@ Napi::Value Speed(const Napi::CallbackInfo &info) {
removeFrames = true;
break;
}
memset16(lastPos + 4, new_delay, 1);
lastPos = (char *)memchr(lastPos + 1, '\x21',
memset16(lastPos + 5, new_delay, 1);
lastPos = (char *)memchr(lastPos + 1, '\x00',
(data.Length() - (lastPos - fileData)) - 1);
++currentFrame;
}
@ -106,15 +106,15 @@ Napi::Value Speed(const Napi::CallbackInfo &info) {
bool removeFrames = false;
lastPos = (char *)memchr(fileData, '\x21', data.Length());
lastPos = (char *)memchr(fileData, '\x00', data.Length());
while (lastPos != NULL) {
if (memcmp(lastPos, match, 3) != 0) {
lastPos = (char *)memchr(lastPos + 1, '\x21',
if (memcmp(lastPos, match, 4) != 0) {
lastPos = (char *)memchr(lastPos + 1, '\x00',
(data.Length() - (lastPos - fileData)) - 1);
continue;
}
uint16_t old_delay;
memcpy(&old_delay, lastPos + 4, 2);
memcpy(&old_delay, lastPos + 5, 2);
int new_delay = slow ? delay * speed : delay / speed;
if (!slow && new_delay <= 1) {
removeFrames = true;
@ -140,17 +140,17 @@ Napi::Value Speed(const Napi::CallbackInfo &info) {
blob.length()));
} else {
while (lastPos != NULL) {
if (memcmp(lastPos, match, 3) != 0) {
if (memcmp(lastPos, match, 4) != 0) {
lastPos =
(char *)memchr(lastPos + 1, '\x21',
(char *)memchr(lastPos + 1, '\x00',
(data.Length() - (lastPos - fileData)) - 1);
continue;
}
uint16_t old_delay;
memcpy(&old_delay, lastPos + 4, 2);
memcpy(&old_delay, lastPos + 5, 2);
int new_delay = slow ? delay * speed : delay / speed;
memset16(lastPos + 4, new_delay, 1);
lastPos = (char *)memchr(lastPos + 1, '\x21',
memset16(lastPos + 5, new_delay, 1);
lastPos = (char *)memchr(lastPos + 1, '\x00',
(data.Length() - (lastPos - fileData)) - 1);
}
}