Bläddra i källkod

Stop form handler after read timeout, only if no data is left

Fixes #682 (fixes first fix)
bel2125 6 år sedan
förälder
incheckning
149a5e8bd3
2 ändrade filer med 9 tillägg och 9 borttagningar
  1. 8 8
      src/handle_form.inl
  2. 1 1
      src/mod_lua.inl

+ 8 - 8
src/handle_form.inl

@@ -382,13 +382,13 @@ mg_handle_form_request(struct mg_connection *conn,
 					/* read error */
 					return -1;
 				}
-				if (r != (int)to_read) {
+				if (r == 0) {
 					/* TODO: Create a function to get "all_data_read" from
 					 * the conn object. All data is read if the Content-Length
 					 * has been reached, or if chunked encoding is used and
 					 * the end marker has been read, or if the connection has
 					 * been closed. */
-					all_data_read = 1;
+					all_data_read = (buf_fill == 0);
 				}
 				buf_fill += r;
 				buf[buf_fill] = 0;
@@ -509,13 +509,13 @@ mg_handle_form_request(struct mg_connection *conn,
 							}
 							return -1;
 						}
-						if (r != (int)to_read) {
+						if (r == 0) {
 							/* TODO: Create a function to get "all_data_read"
 							 * from the conn object. All data is read if the
 							 * Content-Length has been reached, or if chunked
 							 * encoding is used and the end marker has been
 							 * read, or if the connection has been closed. */
-							all_data_read = 1;
+							all_data_read = (buf_fill == 0);
 						}
 						buf_fill += r;
 						buf[buf_fill] = 0;
@@ -652,8 +652,8 @@ mg_handle_form_request(struct mg_connection *conn,
 				mg_free(boundary);
 				return -1;
 			}
-			if (r != (int)to_read) {
-				all_data_read = 1;
+			if (r == 0) {
+				all_data_read = (buf_fill == 0);
 			}
 
 			buf_fill += r;
@@ -931,8 +931,8 @@ mg_handle_form_request(struct mg_connection *conn,
 					mg_free(boundary);
 					return -1;
 				}
-				if (r != (int)to_read) {
-					all_data_read = 1;
+				if (r == 0) {
+					all_data_read = (buf_fill == 0);
 				}
 
 				buf_fill += r;

+ 1 - 1
src/mod_lua.inl

@@ -390,7 +390,7 @@ lsp_var_reader(lua_State *L, void *ud, size_t *sz)
 	case 1:
 		/* Second call: forward variable name */
 		ret = reader->begin;
-		*sz = reader->len;
+		*sz = (size_t)reader->len;
 		reader->consumed += reader->len;
 		break;
 	case 2: