diff --git a/mongoose.c b/mongoose.c index 3d7d715d..9ee2eed3 100644 --- a/mongoose.c +++ b/mongoose.c @@ -1683,7 +1683,7 @@ void mg_http_delete_chunk(struct mg_connection *c, struct mg_http_message *hm) { static void http_cb(struct mg_connection *c, int ev, void *evd, void *fnd) { if (ev == MG_EV_READ || ev == MG_EV_CLOSE) { struct mg_http_message hm; - for (;;) { + while (c->recv.buf != NULL && c->recv.len > 0) { int n = mg_http_parse((char *) c->recv.buf, c->recv.len, &hm); bool is_chunked = n > 0 && mg_is_chunked(&hm); if (ev == MG_EV_CLOSE) { @@ -4291,8 +4291,9 @@ static size_t mg_nce(const char *s, size_t n, size_t ofs, size_t *koff, } bool mg_commalist(struct mg_str *s, struct mg_str *k, struct mg_str *v) { - size_t koff = 0, klen = 0, voff = 0, vlen = 0; - size_t off = mg_nce(s->ptr, s->len, 0, &koff, &klen, &voff, &vlen); + size_t koff = 0, klen = 0, voff = 0, vlen = 0, off = 0; + if (s->ptr == NULL || s->len == 0) return 0; + off = mg_nce(s->ptr, s->len, 0, &koff, &klen, &voff, &vlen); if (k != NULL) *k = mg_str_n(s->ptr + koff, klen); if (v != NULL) *v = mg_str_n(s->ptr + voff, vlen); *s = mg_str_n(s->ptr + off, s->len - off); diff --git a/src/http.c b/src/http.c index f0f4e8ec..33fd94e2 100644 --- a/src/http.c +++ b/src/http.c @@ -919,7 +919,7 @@ void mg_http_delete_chunk(struct mg_connection *c, struct mg_http_message *hm) { static void http_cb(struct mg_connection *c, int ev, void *evd, void *fnd) { if (ev == MG_EV_READ || ev == MG_EV_CLOSE) { struct mg_http_message hm; - for (;;) { + while (c->recv.buf != NULL && c->recv.len > 0) { int n = mg_http_parse((char *) c->recv.buf, c->recv.len, &hm); bool is_chunked = n > 0 && mg_is_chunked(&hm); if (ev == MG_EV_CLOSE) { diff --git a/src/util.c b/src/util.c index b948bebe..8981a5a6 100644 --- a/src/util.c +++ b/src/util.c @@ -113,8 +113,9 @@ static size_t mg_nce(const char *s, size_t n, size_t ofs, size_t *koff, } bool mg_commalist(struct mg_str *s, struct mg_str *k, struct mg_str *v) { - size_t koff = 0, klen = 0, voff = 0, vlen = 0; - size_t off = mg_nce(s->ptr, s->len, 0, &koff, &klen, &voff, &vlen); + size_t koff = 0, klen = 0, voff = 0, vlen = 0, off = 0; + if (s->ptr == NULL || s->len == 0) return 0; + off = mg_nce(s->ptr, s->len, 0, &koff, &klen, &voff, &vlen); if (k != NULL) *k = mg_str_n(s->ptr + koff, klen); if (v != NULL) *v = mg_str_n(s->ptr + voff, vlen); *s = mg_str_n(s->ptr + off, s->len - off);