Index: subversion/libsvn_ra_serf/util.c =================================================================== --- subversion/libsvn_ra_serf/util.c (revision 1500021) +++ subversion/libsvn_ra_serf/util.c (working copy) @@ -640,12 +640,17 @@ apr_pool_t *scratch_pool) { serf_bucket_alloc_t *allocator = serf_request_get_alloc(request); - - svn_spillbuf_t *buf; svn_boolean_t set_CL = session->http10 || !session->using_chunked_requests; + apr_uint64_t request_body_len; - if (set_CL && body_bkt != NULL) + if (body_bkt) + request_body_len = serf_bucket_get_remaining(body_bkt); + else + request_body_len = 0; + + if (set_CL && request_body_len == SERF_LENGTH_UNKNOWN) { + svn_spillbuf_t *buf; /* Ugh. Use HTTP/1.0 to talk to the server because we don't know if it speaks HTTP/1.1 (and thus, chunked requests), or because the server actually responded as only supporting HTTP/1.0. @@ -663,6 +668,7 @@ body_bkt = svn_ra_serf__create_sb_bucket(buf, allocator, request_pool, scratch_pool); + request_body_len = svn_spillbuf__get_size(buf); } /* Create a request bucket. Note that this sucker is kind enough to @@ -672,12 +678,9 @@ /* Set the Content-Length value. This will also trigger an HTTP/1.0 request (rather than the default chunked request). */ - if (set_CL) + if (request_body_len != SERF_LENGTH_UNKNOWN) { - if (body_bkt == NULL) - serf_bucket_request_set_CL(*req_bkt, 0); - else - serf_bucket_request_set_CL(*req_bkt, svn_spillbuf__get_size(buf)); + serf_bucket_request_set_CL(*req_bkt, request_body_len); } *hdrs_bkt = serf_bucket_request_get_headers(*req_bkt);