Skip to content

Commit ff9b1fd

Browse files
mindneverf5soh
authored andcommitted
Merged in mindnever/librepilot/LP-522_GCS_Fix_DFUObject_stack_overflow_on_macOS (pull request #431)
LP-522 GCS: DFUObject::CRCFromQBArray - allocate temp buffer on heap Approved-by: Vladimir Zidar <mr_w@mindnever.org> Approved-by: David Wilson <dgwilson65@gmail.com> Approved-by: Lalanne Laurent <f5soh@free.fr> Approved-by: Brian Webb <webbbn@gmail.com> Approved-by: Philippe Renon <philippe_renon@yahoo.fr> Approved-by: Alessio Morale <alessiomorale@gmail.com>
2 parents 0448d62 + 5194f79 commit ff9b1fd

1 file changed

Lines changed: 8 additions & 4 deletions

File tree

  • ground/gcs/src/plugins/uploader

ground/gcs/src/plugins/uploader/dfu.cpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1031,11 +1031,12 @@ quint32 DFUObject::CRC32WideFast(quint32 Crc, quint32 Size, quint32 *Buffer)
10311031
*/
10321032
quint32 DFUObject::CRCFromQBArray(QByteArray array, quint32 Size)
10331033
{
1034-
quint32 pad = Size - array.length();
1034+
quint32 pad = Size - array.length();
10351035

10361036
array.append(QByteArray(pad, 255));
1037-
quint32 t[Size / 4];
1038-
for (int x = 0; x < array.length() / 4; x++) {
1037+
int num_words = Size / 4;
1038+
quint32 *t = (quint32 *)malloc(Size);
1039+
for (int x = 0; x < num_words; x++) {
10391040
quint32 aux = 0;
10401041
aux = (char)array[x * 4 + 3] & 0xFF;
10411042
aux = aux << 8;
@@ -1046,7 +1047,10 @@ quint32 DFUObject::CRCFromQBArray(QByteArray array, quint32 Size)
10461047
aux += (char)array[x * 4 + 0] & 0xFF;
10471048
t[x] = aux;
10481049
}
1049-
return DFUObject::CRC32WideFast(0xFFFFFFFF, Size / 4, (quint32 *)t);
1050+
quint32 ret = DFUObject::CRC32WideFast(0xFFFFFFFF, num_words, t);
1051+
free(t);
1052+
1053+
return ret;
10501054
}
10511055

10521056
/**

0 commit comments

Comments
 (0)