diff --git a/library.properties b/library.properties index c0e240d..d4b2a44 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=Adafruit GPS Library -version=1.7.4 +version=1.7.5 author=Adafruit maintainer=Adafruit sentence=An interrupt-based GPS library for no-parsing-required use diff --git a/src/Adafruit_GPS.cpp b/src/Adafruit_GPS.cpp index e3664c6..bed5c38 100644 --- a/src/Adafruit_GPS.cpp +++ b/src/Adafruit_GPS.cpp @@ -351,7 +351,8 @@ char Adafruit_GPS::read(void) { } // Serial.print(c); - currentline[lineidx++] = c; + currentline[lineidx] = c; + lineidx++; if (lineidx >= MAXLINELENGTH) lineidx = MAXLINELENGTH - 1; // ensure there is someplace to put the next received character diff --git a/src/NMEA_build.cpp b/src/NMEA_build.cpp index 072b4af..832a0c6 100644 --- a/src/NMEA_build.cpp +++ b/src/NMEA_build.cpp @@ -590,5 +590,20 @@ void Adafruit_GPS::addChecksum(char *buff) { cs ^= buff[i]; i++; } - sprintf(buff, "%s*%02X", buff, cs); + + // Calculate the needed buffer size: original length + 3 (*XX) + 1 (null terminator) + int neededSize = strlen(buff) + 4; + char *tempBuffer = (char *)malloc(neededSize); + + if (tempBuffer != NULL) { + // Use snprintf to safely format the string with the checksum + snprintf(tempBuffer, neededSize, "%s*%02X", buff, cs); + + // Copy the formatted string back to the original buffer + // Note: Make sure the original buffer is large enough to hold the new string. + strcpy(buff, tempBuffer); + + // Free the allocated memory to avoid memory leaks + free(tempBuffer); + } }