From 9a7ce85001409f23c701abf048965c5a8ab6a3fe Mon Sep 17 00:00:00 2001 From: Andy Green Date: Mon, 3 Aug 2020 15:52:50 +0100 Subject: [PATCH] h2: defend against no NUL possible in log --- lib/roles/h2/hpack.c | 11 +++++++++-- lib/roles/h2/http2.c | 4 ++++ lib/roles/http/server/server.c | 2 +- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/lib/roles/h2/hpack.c b/lib/roles/h2/hpack.c index 8f488194d..df24317ba 100644 --- a/lib/roles/h2/hpack.c +++ b/lib/roles/h2/hpack.c @@ -1391,8 +1391,15 @@ int lws_add_http2_header_by_name(struct lws *wsi, const unsigned char *name, { int len; - lwsl_header("%s: %p %s:%s (len %d)\n", __func__, *p, name, value, - length); +#if defined(_DEBUG) + /* value does not have to be NUL-terminated... %.*s not available on + * all platforms */ + lws_strnncpy((char *)*p, (const char *)value, length, + lws_ptr_diff(end, (*p))); + + lwsl_header("%s: %p %s:%s (len %d)\n", __func__, *p, name, + (const char *)*p, length); +#endif len = (int)strlen((char *)name); if (len) diff --git a/lib/roles/h2/http2.c b/lib/roles/h2/http2.c index 52d6c6a4f..c156aaa6a 100644 --- a/lib/roles/h2/http2.c +++ b/lib/roles/h2/http2.c @@ -2040,6 +2040,10 @@ lws_h2_parser(struct lws *wsi, unsigned char *in, lws_filepos_t inlen, h2n->swsi->http.rx_content_remain < inlen + 1 && /* last */ h2n->inside < h2n->length) { + lwsl_warn("%s: rem %d, inlen %d\n", + __func__, + (int)h2n->swsi->http.rx_content_remain, + (int)inlen + 1); /* unread data in frame */ lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, diff --git a/lib/roles/http/server/server.c b/lib/roles/http/server/server.c index fe3163ebc..307157214 100644 --- a/lib/roles/http/server/server.c +++ b/lib/roles/http/server/server.c @@ -2334,7 +2334,7 @@ lws_http_transaction_completed(struct lws *wsi) peer[0] = '\0'; #endif peer[sizeof(peer) - 1] = '\0'; - lwsl_notice("%s: (from %s) ignoring, ah parsing incomplete\n", + lwsl_info("%s: (from %s) ignoring, ah parsing incomplete\n", __func__, peer); return 0; }