1
0
mirror of https://github.com/thooge/esp32-nmea2000-obp60.git synced 2026-08-18 18:32:30 +02:00

Fix for NetworkCleint.cpp

This commit is contained in:
Norbert Walter
2026-03-12 18:49:53 +00:00
parent 57272f3a44
commit a0afd5deca
+23 -3
View File
@@ -292,14 +292,29 @@ bool NetworkClient::httpGetGzip(const String& url, uint8_t*& outData, size_t& ou
if (headerOffset < 0) { if (headerOffset < 0) {
aborting = true; aborting = true;
} else { } else {
unsigned long testLen = len * 8; // Dynamic expansion size_t deflateLen = len - (size_t)headerOffset;
uint8_t* test = (uint8_t*)malloc(testLen); // GZIP trailer (CRC32 + ISIZE) is 8 bytes and not part of deflate stream.
if (deflateLen >= 8) {
deflateLen -= 8;
}
unsigned long srcLenForSize = (unsigned long)deflateLen;
unsigned long outNeeded = 0;
int sizeRes = puff(NIL, &outNeeded, buffer + headerOffset, &srcLenForSize);
if (sizeRes != 0) {
if (DEBUGING) {
Serial.printf("Decompress size probe failed: res=%d src=%lu\n", sizeRes, srcLenForSize);
}
aborting = true;
} else {
uint8_t* test = (uint8_t*)malloc((size_t)outNeeded);
if (!test) { if (!test) {
Serial.println("Malloc failed test buffer, aborting."); Serial.println("Malloc failed test buffer, aborting.");
aborting = true; aborting = true;
} else { } else {
unsigned long srcLen = (unsigned long)(len - (size_t)headerOffset); unsigned long srcLen = (unsigned long)deflateLen;
unsigned long testLen = outNeeded;
int res = puff(test, &testLen, buffer + headerOffset, &srcLen); int res = puff(test, &testLen, buffer + headerOffset, &srcLen);
if (res == 0) { if (res == 0) {
@@ -308,7 +323,12 @@ bool NetworkClient::httpGetGzip(const String& url, uint8_t*& outData, size_t& ou
outLen = (size_t)testLen; outLen = (size_t)testLen;
complete = true; complete = true;
} else { } else {
if (DEBUGING) {
Serial.printf("Decompress failed: res=%d out=%lu src=%lu\n", res, testLen, srcLen);
}
free(test); free(test);
aborting = true;
}
} }
} }
} }