diff --git a/lib/parsers.c b/lib/parsers.c
index b4dc442d..2c2b603a 100644
--- a/lib/parsers.c
+++ b/lib/parsers.c
@@ -982,9 +982,15 @@ int libwebsocket_client_rx_sm(struct libwebsocket *wsi, unsigned char c)
 			if (wsi->this_frame_masked)
 				wsi->lws_rx_parse_state =
 						LWS_RXPS_07_COLLECT_FRAME_KEY_1;
-			else
-				wsi->lws_rx_parse_state =
-					LWS_RXPS_PAYLOAD_UNTIL_LENGTH_EXHAUSTED;
+			else {
+				if (c)
+					wsi->lws_rx_parse_state =
+							LWS_RXPS_PAYLOAD_UNTIL_LENGTH_EXHAUSTED;
+				else {
+					wsi->lws_rx_parse_state = LWS_RXPS_NEW;
+					goto spill;
+				}
+			}
 			break;
 		}
 		break;
@@ -999,9 +1005,15 @@ int libwebsocket_client_rx_sm(struct libwebsocket *wsi, unsigned char c)
 		if (wsi->this_frame_masked)
 			wsi->lws_rx_parse_state =
 					LWS_RXPS_07_COLLECT_FRAME_KEY_1;
-		else
-			wsi->lws_rx_parse_state =
-				LWS_RXPS_PAYLOAD_UNTIL_LENGTH_EXHAUSTED;
+		else {
+			if (wsi->rx_packet_length)
+				wsi->lws_rx_parse_state =
+						LWS_RXPS_PAYLOAD_UNTIL_LENGTH_EXHAUSTED;
+			else {
+				wsi->lws_rx_parse_state = LWS_RXPS_NEW;
+				goto spill;
+			}
+		}
 		break;
 
 	case LWS_RXPS_04_FRAME_HDR_LEN64_8:
@@ -1059,9 +1071,15 @@ int libwebsocket_client_rx_sm(struct libwebsocket *wsi, unsigned char c)
 		if (wsi->this_frame_masked)
 			wsi->lws_rx_parse_state =
 					LWS_RXPS_07_COLLECT_FRAME_KEY_1;
-		else
-			wsi->lws_rx_parse_state =
-				LWS_RXPS_PAYLOAD_UNTIL_LENGTH_EXHAUSTED;
+		else {
+			if (wsi->rx_packet_length)
+				wsi->lws_rx_parse_state =
+						LWS_RXPS_PAYLOAD_UNTIL_LENGTH_EXHAUSTED;
+			else {
+				wsi->lws_rx_parse_state = LWS_RXPS_NEW;
+				goto spill;
+			}
+		}
 		break;
 
 	case LWS_RXPS_07_COLLECT_FRAME_KEY_1:
@@ -1089,8 +1107,14 @@ int libwebsocket_client_rx_sm(struct libwebsocket *wsi, unsigned char c)
 		wsi->frame_masking_nonce_04[3] = c;
 		if (c)
 			wsi->all_zero_nonce = 0;
-		wsi->lws_rx_parse_state =
+
+		if (wsi->rx_packet_length)
+			wsi->lws_rx_parse_state =
 					LWS_RXPS_PAYLOAD_UNTIL_LENGTH_EXHAUSTED;
+		else {
+			wsi->lws_rx_parse_state = LWS_RXPS_NEW;
+			goto spill;
+		}
 		break;
 
 	case LWS_RXPS_EAT_UNTIL_76_FF: