|  | @@ -4670,15 +4670,22 @@ mg_read(struct mg_connection *conn, void *buf, size_t len)
 | 
	
		
			
				|  |  |  				conn->content_len += (int)read_now;
 | 
	
		
			
				|  |  |  				read_ret =
 | 
	
		
			
				|  |  |  				    mg_read_inner(conn, (char *)buf + all_read, read_now);
 | 
	
		
			
				|  |  | -				all_read += (size_t)read_ret;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -				conn->chunk_remainder -= read_now;
 | 
	
		
			
				|  |  | -				len -= read_now;
 | 
	
		
			
				|  |  | +				if (read_ret < 1) {
 | 
	
		
			
				|  |  | +					/* read error */
 | 
	
		
			
				|  |  | +					return -1;
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				all_read += (size_t)read_ret;
 | 
	
		
			
				|  |  | +				conn->chunk_remainder -= read_ret;
 | 
	
		
			
				|  |  | +				len -= read_ret;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  				if (conn->chunk_remainder == 0) {
 | 
	
		
			
				|  |  | -					/* the rest of the data in the current chunk has been read
 | 
	
		
			
				|  |  | -					 */
 | 
	
		
			
				|  |  | -					if ((mg_getc(conn) != '\r') || (mg_getc(conn) != '\n')) {
 | 
	
		
			
				|  |  | +					/* Add data bytes in the current chunk have been read,
 | 
	
		
			
				|  |  | +					 * so we are expecting \r\n now. */
 | 
	
		
			
				|  |  | +					char x1 = mg_getc(conn);
 | 
	
		
			
				|  |  | +					char x2 = mg_getc(conn);
 | 
	
		
			
				|  |  | +					if ((x1 != '\r') || (x2 != '\n')) {
 | 
	
		
			
				|  |  |  						/* Protocol violation */
 | 
	
		
			
				|  |  |  						return -1;
 | 
	
		
			
				|  |  |  					}
 |