@@ -436,7 +436,8 @@ void FirmataParser::processSysexMessage(void)
436436 if ( 3 > sysexBytesRead ) {
437437 (*currentReportFirmwareCallback)(currentReportFirmwareCallbackContext, 0 , 0 , (const char *)NULL );
438438 } else {
439- const size_t end_of_string = (string_offset + decodeByteStream ((sysexBytesRead - string_offset), &dataBuffer[string_offset]));
439+ const size_t bytec = min (sysexBytesRead - string_offset, dataBufferSize - string_offset);
440+ const size_t end_of_string = (string_offset + decodeByteStream (bytec, &dataBuffer[string_offset]));
440441 bufferDataAtPosition (' \0 ' , end_of_string); // NULL terminate the string
441442 (*currentReportFirmwareCallback)(currentReportFirmwareCallbackContext, (size_t )dataBuffer[major_version_offset], (size_t )dataBuffer[minor_version_offset], (const char *)&dataBuffer[string_offset]);
442443 }
@@ -445,7 +446,8 @@ void FirmataParser::processSysexMessage(void)
445446 case STRING_DATA:
446447 if (currentStringCallback) {
447448 const size_t string_offset = 1 ;
448- const size_t end_of_string = (string_offset + decodeByteStream ((sysexBytesRead - string_offset), &dataBuffer[string_offset]));
449+ const size_t bytec = min (sysexBytesRead - string_offset, dataBufferSize - string_offset);
450+ const size_t end_of_string = (string_offset + decodeByteStream (bytec, &dataBuffer[string_offset]));
449451 bufferDataAtPosition (' \0 ' , end_of_string); // NULL terminate the string
450452 (*currentStringCallback)(currentStringCallbackContext, (const char *)&dataBuffer[string_offset]);
451453 }
0 commit comments