Skip to content

Commit 12a5df1

Browse files
authored
Fixed drawPngUrl http client infinite loop
Fixed drawPngUrl http client infinite loop
2 parents f72d90d + 08df067 commit 12a5df1

File tree

1 file changed

+11
-5
lines changed

1 file changed

+11
-5
lines changed

src/M5Display.cpp

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -573,6 +573,8 @@ void M5Display::drawPngUrl(const char *url, uint16_t x, uint16_t y,
573573
http.end();
574574
return;
575575
}
576+
// get length of document (is -1 when Server sends no Content-Length header)
577+
int len = http.getSize();
576578

577579
WiFiClient *stream = http.getStreamPtr();
578580

@@ -603,24 +605,28 @@ void M5Display::drawPngUrl(const char *url, uint16_t x, uint16_t y,
603605
// Feed data to pngle
604606
uint8_t buf[1024];
605607
int remain = 0;
606-
int len;
607-
while (http.connected()) {
608+
int c;
609+
while (http.connected() && (len > 0 || len == -1)) {
608610
size_t size = stream->available();
609611
if (!size) {
610612
delay(1);
611613
continue;
612614
}
613615

614616
if (size > sizeof(buf) - remain) size = sizeof(buf) - remain;
615-
if ((len = stream->readBytes(buf + remain, size)) > 0) {
616-
int fed = pngle_feed(pngle, buf, remain + len);
617+
if ((c = stream->readBytes(buf + remain, size)) > 0) {
618+
int fed = pngle_feed(pngle, buf, remain + c);
617619
if (fed < 0) {
618620
log_e("[pngle error] %s", pngle_error(pngle));
619621
break;
620622
}
621623

622-
remain = remain + len - fed;
624+
remain = remain + c - fed;
623625
if (remain > 0) memmove(buf, buf + fed, remain);
626+
627+
if (len > 0) {
628+
len -= c;
629+
}
624630
}
625631
}
626632

0 commit comments

Comments
 (0)