Skip to content

Commit

Permalink
serving: protect file sending from downgrading to waiting pipelined h…
Browse files Browse the repository at this point in the history
…eaders

warmcat#946
  • Loading branch information
lws-team committed Jun 28, 2017
1 parent 12a9592 commit 34ef974
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 7 deletions.
9 changes: 4 additions & 5 deletions lib/handshake.c
Original file line number Diff line number Diff line change
Expand Up @@ -95,17 +95,16 @@ lws_read(struct lws *wsi, unsigned char *buf, lws_filepos_t len)
break;
#endif

case LWSS_HTTP_ISSUING_FILE:
return 0;

case LWSS_CLIENT_HTTP_ESTABLISHED:
break;

case LWSS_HTTP:
wsi->hdr_parsing_completed = 0;
/* fallthru */
case LWSS_HTTP_ISSUING_FILE:
wsi->state = LWSS_HTTP_HEADERS;
wsi->u.hdr.parser_state = WSI_TOKEN_NAME_PART;
wsi->u.hdr.lextable_pos = 0;
/* fallthru */

case LWSS_HTTP_HEADERS:
if (!wsi->u.hdr.ah) {
lwsl_err("%s: LWSS_HTTP_HEADERS: NULL ah\n", __func__);
Expand Down
3 changes: 3 additions & 0 deletions lib/parsers.c
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,9 @@ lws_header_table_reset(struct lws *wsi, int autoservice)

_lws_header_table_reset(ah);

wsi->u.hdr.parser_state = WSI_TOKEN_NAME_PART;
wsi->u.hdr.lextable_pos = 0;

/* since we will restart the ah, our new headers are not completed */
// wsi->hdr_parsing_completed = 0;

Expand Down
6 changes: 4 additions & 2 deletions lib/server.c
Original file line number Diff line number Diff line change
Expand Up @@ -2243,7 +2243,8 @@ lws_server_socket_service(struct lws_context *context, struct lws *wsi,
}

/* just ignore incoming if waiting for close */
if (wsi->state != LWSS_FLUSHING_STORED_SEND_BEFORE_CLOSE) {
if (wsi->state != LWSS_FLUSHING_STORED_SEND_BEFORE_CLOSE &&
wsi->state != LWSS_HTTP_ISSUING_FILE) {
n = lws_read(wsi, ah->rx + ah->rxpos,
ah->rxlen - ah->rxpos);
if (n < 0) /* we closed wsi */
Expand Down Expand Up @@ -2294,7 +2295,8 @@ lws_server_socket_service(struct lws_context *context, struct lws *wsi,
}

/* just ignore incoming if waiting for close */
if (wsi->state != LWSS_FLUSHING_STORED_SEND_BEFORE_CLOSE) {
if (wsi->state != LWSS_FLUSHING_STORED_SEND_BEFORE_CLOSE &&
wsi->state != LWSS_HTTP_ISSUING_FILE) {
/*
* this may want to send
* (via HTTP callback for example)
Expand Down

0 comments on commit 34ef974

Please sign in to comment.