1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-02-26 15:54:15 +01:00

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>
This commit is contained in:
Vladimir Zidar 2017-06-13 19:56:52 +00:00 committed by Lalanne Laurent
commit ff9b1fdd0a

View File

@ -1031,11 +1031,12 @@ quint32 DFUObject::CRC32WideFast(quint32 Crc, quint32 Size, quint32 *Buffer)
*/
quint32 DFUObject::CRCFromQBArray(QByteArray array, quint32 Size)
{
quint32 pad = Size - array.length();
quint32 pad = Size - array.length();
array.append(QByteArray(pad, 255));
quint32 t[Size / 4];
for (int x = 0; x < array.length() / 4; x++) {
int num_words = Size / 4;
quint32 *t = (quint32 *)malloc(Size);
for (int x = 0; x < num_words; x++) {
quint32 aux = 0;
aux = (char)array[x * 4 + 3] & 0xFF;
aux = aux << 8;
@ -1046,7 +1047,10 @@ quint32 DFUObject::CRCFromQBArray(QByteArray array, quint32 Size)
aux += (char)array[x * 4 + 0] & 0xFF;
t[x] = aux;
}
return DFUObject::CRC32WideFast(0xFFFFFFFF, Size / 4, (quint32 *)t);
quint32 ret = DFUObject::CRC32WideFast(0xFFFFFFFF, num_words, t);
free(t);
return ret;
}
/**