diff -Nura libmicrohttpd/src/daemon/connection.c libmicrohttpdNew/src/daemon/connection.c --- libmicrohttpd/src/daemon/connection.c 2011-05-16 11:39:38.000000000 +0800 +++ libmicrohttpdNew/src/daemon/connection.c 2011-05-16 11:47:25.976324170 +0800 @@ -1363,14 +1363,18 @@ } else { - /* no chunked encoding, give all to the client */ - if ( (0 != connection->remaining_upload_size) && - (MHD_SIZE_UNKNOWN != connection->remaining_upload_size) ) + if ( (0 != connection->remaining_upload_size) + && (MHD_SIZE_UNKNOWN != connection->remaining_upload_size) + && (connection->remaining_upload_size < available) ) { processed = connection->remaining_upload_size; } else { + /** + * 1. no chunked encoding, give all to the client + * 2. client may send large chunked data, but only a smaller part is available at one time. + */ processed = available; } }