From 4f5ebec3efa46f31af2d44e74c11c9dac29f8617 Mon Sep 17 00:00:00 2001
From: Andy Green <andy.green@linaro.org>
Date: Wed, 9 Mar 2016 23:13:31 +0800
Subject: [PATCH] client ext hdr skip if no arg

https://github.com/warmcat/libwebsockets/issues/453#event-583227314

abnf does say has to be at least one arg

Signed-off-by: Andy Green <andy.green@linaro.org>
---
 changelog    | 1 +
 lib/client.c | 6 ++++--
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/changelog b/changelog
index c226613b..f8608571 100644
--- a/changelog
+++ b/changelog
@@ -38,6 +38,7 @@ using up the pool.
 
 8) MAJOR windows-only-POLLHUP was not coming
 
+9) Client should not send ext hdr if no exts
 
 Changes
 -------
diff --git a/lib/client.c b/lib/client.c
index bb84d172..fdf1eff2 100644
--- a/lib/client.c
+++ b/lib/client.c
@@ -1081,7 +1081,6 @@ lws_generate_client_handshake(struct lws *wsi, char *pkt)
 
 		/* tell the server what extensions we could support */
 
-		p += sprintf(p, "Sec-WebSocket-Extensions: ");
 #ifndef LWS_NO_EXTENSIONS
 		ext = context->extensions;
 		while (ext && ext->callback) {
@@ -1113,13 +1112,16 @@ lws_generate_client_handshake(struct lws *wsi, char *pkt)
 
 			if (ext_count)
 				*p++ = ',';
+			else
+				p += sprintf(p, "Sec-WebSocket-Extensions: ");
 			p += sprintf(p, "%s", ext->client_offer);
 			ext_count++;
 
 			ext++;
 		}
+		if (ext_count)
+			p += sprintf(p, "\x0d\x0a");
 #endif
-		p += sprintf(p, "\x0d\x0a");
 
 		if (wsi->ietf_spec_revision)
 			p += sprintf(p, "Sec-WebSocket-Version: %d\x0d\x0a",
-- 
GitLab