Checkout Tools
  • last updated 7 hours ago
Constraints: committers
Constraints: files
Constraints: dates
Rework r1866425 ('Last-Modified' header). Do not use pointer comparison

and 'special value' for APR_TIME_T.

* subversion/mod_dav_svn/dav_svn.h

(dav_resource_private): Add new member IS_PUBLIC_URI.

* subversion/mod_dav_svn/repos.c


get_parentpath_resource): Set IS_PUBLIC_URI to TRUE for 'public' URIs (not

under '/!svn/')

(get_last_modified): Delete.

(set_headers): Rework of 'Last-Modified' related code.

See dev@ email thread "[Patch] Rework of r1866425 ('Last-Modified' header)"

started 2019/12/10, archived at several places, including:

Patch by: sergey.raevskiy{_AT_}

Add a hint about mod_dav_svn misconfiguration.

* subversion/mod_dav_svn/mod_dav_svn.c

(merge_dir_config): When warning about an overlapping configuration,

if the two configuration blocks are for the same URL then hint that

the problem may be including the same config twice.

mod_dav_svn: Set Last-Modified response header for 'external' GET requests

(i.e. requests to URI's not under /!svn). This partially reverts r1724790

which removed it for all GET requests, for performance reasons (however, for

external requests the Last-Modified header is needed for certain use cases).

See this thread on dev@:

Date: 2019/09/02 14:20:16 GMT

From: Johan Corveleyn

To: Subversion dev list

Subject: Re: Last-Modified HTTP header in GET responses

Message-ID: <>

Review by: brane

* subversion/mod_dav_svn/repos.c

(get_last_modified): New function (reverted its removal in r1724790).

(set_headers): Set Last-Modified response header for 'external' requests.

* subversion/tests/cmdline/

(last_modified_header): New test.

  1. … 1 more file in changeset.
* subversion/mod_dav_svn/repos.c

(get_resource): Following up on r1850651: Set cleanup handler for

FS warning logging regardless of presence of R->USER.

Patch by: sergey.raevskiy{_AT_}

Fix a use-after-free in mod_dav_svn's logging of FS warnings.

The FS warning callback could be called with a request context that had

already been deallocated. This resulted in a crash during 'make check'

with ra_serf on OpenBSD. The problem was even documented in a comment:

/* ### hmm. the FS is cleaned up at request cleanup time. "r" might

### not really be valid. we should probably put the FS into a

### subpool to ensure it gets cleaned before the request.

### is there a good way to create and use a subpool for all

### of our functions ... ??


Rather than putting the FS into a subpool, the solution implemented with this

commit installs a pre-cleanup handler on the request pool, which switches the

logging context from the request to its associated connection. This avoids the

use-after-free at the cost of a less precise logging context.

Suggested by: stefan2

* subversion/mod_dav_svn/repos.c

(log_warning): Rename to ...

(log_warning_req): ... this.

(log_warning_conn): New logging helper which uses a connection context.

(cleanup_req_logging_baton, cleanup_req_logging): New APR pool cleanup

handler which switches FS logging context from a request to a connection.

(get_resource): Install aforementioned pool cleanup handler.

* subversion/mod_dav_svn/reports/list.c

(dav_svn__list_report): CVE-2018-11803 - Fix access to potentially uninitialized local

pointer variable.

Fix issue SVN-4782: Do not use (const char*)1 in httpd modules as value for r->notes.

mod_authz_svn.c and mod_dav_svn.c add keys to r->notes to memorize boolean

states (FORCE_AUTHN_NOTE, IN_SOME_AUTHN_NOTE, authz_svn-anon-ok,

NO_MAP_TO_STORAGE_NOTE). They use (const char*)1 as values for the keys. This

causes any call to apr_table_clone for r->notes to crash with a SEGFAULT,

because (const char*)1 is an invalid address. mod_http2 in httpd calls

apr_table_clone for r->notes and hence the httpd process crashes.

Hence replace the value of (const char*)1 in these cases with a value of "1".

* subversion/mod_authz_svn/mod_authz_svn.c

(access_checker, check_user_id): Replace value of (const char*)1 with "1"

in apr_table_setn calls for r->notes table for keys FORCE_AUTHN_NOTE,

IN_SOME_AUTHN_NOTE, authz_svn-anon-ok to set a value with an valid address.

* subversion/mod_authz_svn/mod_dav_svn.c

(dav_svn__translate_name): Replace value of (const char*)1 with "1"

in apr_table_setn calls for r->notes table for keys NO_MAP_TO_STORAGE_NOTE

to set a value with an valid address.

[U:server] mod_dav_svn, mod_authz_svn: Fix segfault under mod_http2 (SVN-4782)

  1. … 1 more file in changeset.
Propagate the SVNUseUTF8 option in mod_dav_svn's merge_server_config callback.

Fixes a problem where the SVNUseUTF8 option had no effect in some cases.

* subversion/mod_dav_svn/mod_dav_svn.c

(merge_server_config): Propagete the value of the use_utf8 config variable.

Patch by: Dmitry Bakshaev <dab18 {at} izhnet ru>

Fix spelling in docs and comments.

This closes #7 (github pull request)

Patch by: Jimmy Casey <casey.jimmy{_AT_}>

* doc/user/svn-best-practices.html

(The Branch-When-Needed system): s/publically/publicly/.

* subversion/libsvn_fs_x/tree.c

(text_baton_t): s/publically/publicly/.

* subversion/mod_dav_svn/reports/file-revs.c

(file_rev_handler): s/wich/which/.

  1. … 2 more files in changeset.
* subversion/mod_dav_svn/repos.c

(open_stream): Return an error if a non-conforming client sends

a PUT before the corresponding CHECKOUT when attempting a v1

protocol commit. This is required for strict v1 compliance

and does not affect the v2 protocol.

Update issue tracker links in comments, from Tigris (issuezilla) to Apache (Jira).

URL fragment identifiers like '#desc5' are left in place, not yet updated.

This is a merge of r1828508 from the 'shelve-checkpoint' branch where I

committed it by mistake.

  1. … 43 more files in changeset.
Make the reporting of commit capabilites such as SVNDIFF version and

PUT checksums depend on the master version when a master-slave proxy

version is configured. This allows 1.10 to be a slave proxy for

earlier version masters.

Fixes issue #4718 "Write-through proxy backward compatibility fix".

* subversion/mod_dav_svn/dav_svn.h

* subversion/mod_dav_svn/mod_dav_svn.c

(dav_svn__check_ephemeral_txnprops_support): Remove.

* subversion/mod_dav_svn/version.c

(get_vsn_options): Don't report commit capabilities here as we do

not have access to the master version.

(get_option): Report commit capabilities here.

* subversion/mod_dav_svn/util.c:

Add a trailing newline, as required by C89.

Add the server-side implementation for the 'svn/list' report.

* subversion/mod_dav_svn/dav_svn.h

(dav_svn__reports_list): Add new report type.

(dav_svn__list_report): Declare new vtable function implementaton.

* subversion/mod_dav_svn/reports/list.c

(): New file implementing the server-side handling of the new report.

* subversion/mod_dav_svn/version.c

(get_vsn_options): Advertise the new reporting capability.

(deliver_report): Dispatch requests to the new report implementation.

Minor refactoring in mod_dav_svn: Move the "fuzzy escaping" / sanitizing

for author names to a separate function.

* subversion/mod_dav_svn/dav_svn.h

(dav_svn__fuzzy_escape_author): Declare a new utility.

* subversion/mod_dav_svn/util.c

(dav_svn__fuzzy_escape_author): Implement using the logic from ...

* subversion/mod_dav_svn/liveprops.c

(insert_prop_internal): ... this function and update it.

* subversion/mod_dav_svn/mod_dav_svn.c

(merge_dir_config): Reword warning message to avoid confusion: the word

"nested" was interpreted as nested <Location/> blocks in httpd.conf syntax.


* subversion/mod_dav_svn/merge.c

(do_resources): Avoid calling svn_fs_check_path() when we have the

node kind available in the svn_fs_path_change3_t.

Following up on r1803899, properly negotiate the svndiff version when a

client indicates the preference of svndiff2 format, but the compression

is disabled on the server.

In this case, the server configuration should override the client's

preference (and this is how Subversion 1.9 worked), so tweak the

negotiation scheme so that the server would always be use uncompressed

svndiff0 format with "SVNCompressionLevel 0".

* subversion/mod_dav_svn/repos.c

(negotiate_encoding_prefs): Add special handling for compression level 0.

Add 'http-compression=auto' mode on the client, now used by default.

Following up on the recently added support for LZ4 compression, this patch

introduces the new possible 'auto' mode for our client 'http-compression'

configuration option, and starts using it by default.

The previously used default was 'http-compression=yes', and the new 'auto'

mode is a small, but an important tweak to its behavior. In the new mode,

the HTTP compression is still being used, but the negotiating is tweaked

to favor svndiff2 with LZ4 compression when working over local networks.

The reasoning behind this is that for local networks it probably makes sense

to favor compression speed of LZ4 instead of the better compression ratio

from zlib-5, which has been used previously.

To separate local and wide area networks, we use the connection latency of

the initial OPTIONS request obtained with serf_connection_get_latency().

* subversion/libsvn_subr/config_file.c

(svn_config_ensure): Document the new default and possible values of

the http-compression option.

* subversion/libsvn_ra_serf/ra_serf.h

(svn_ra_serf__session_t.using_compression): Turn into a tristate field.

(svn_ra_serf__session_t.conn_latency): New field.

(svn_ra_serf__is_local_network): Declare new helper function.

(svn_ra_serf__setup_svndiff_accept_encoding): Accept a session instead

of the 'using_compression' boolean argument.

* subversion/libsvn_ra_serf/util.c

(svn_ra_serf__is_local_network): Implement this new function.

(svn_ra_serf__setup_svndiff_accept_encoding): Tweak the Accept-Encoding

to indicate that we'd like to see svndiff2 with http-compression=auto

and when working over a local network. Otherwise, when using compression,

indicate both svndiff2 and svndiff1 support, but tell the server that we

favor svndiff1.

(setup_request): Properly handle the 'using_compression' field, which

is now a tristate.

* subversion/libsvn_ra_serf/serf.c

(load_config): Get the compression setting as a tristate.

(svn_ra_serf__open): Initialize the connection latency to default

value before we make the initial OPTIONS request.

(ra_serf_dup_session): Add placeholder comment for the new field.

* subversion/libsvn_ra_serf/options.c

(options_response_handler): Remember the connection latency in the


* subversion/libsvn_ra_serf/commit.c

(negotiate_put_encoding): Rework to support new http-compression=auto

mode. Update or rewrite the related comments.

* subversion/libsvn_ra_serf/blame.c

(blame_context_t): Store session instead of the 'using_compression' field.

(setup_headers): Update call to svn_ra_serf__setup_svndiff_accept_encoding().

(svn_ra_serf__get_file_revs): Remember the used session in context.

* subversion/libsvn_ra_serf/replay.c

(revision_report_t): Store session instead of the 'using_compression' field.

(setup_headers): Update call to svn_ra_serf__setup_svndiff_accept_encoding().

(svn_ra_serf__replay_range): Remember the used session in context.

* subversion/libsvn_ra_serf/update.c

(fetch_ctx_t): Store session instead of the 'using_compression' field.

(headers_fetch): Update call to svn_ra_serf__setup_svndiff_accept_encoding().

Properly handle the 'using_compression' field, which is now a tristate.

(fetch_for_file): Remember the used session in the fetch context.

(setup_update_report_headers): Update call to


* subversion/mod_dav_svn/repos.c

(get_svndiff_version): New helper function.

(negotiate_encoding_prefs): Tweak the negotiation logic. Only override

the client's preference if it supports svndiff2 and SVNCompressionLevel

is set to 1. In all other cases, select the svndiff format that the

client prefers to see (the one with the largest ;q= value in the Accept-

Encoding header).

  1. … 10 more files in changeset.
* subversion/mod_dav_svn/repos.c

(negotiate_encoding_prefs): Fix typo in the comment.

Lay the groundwork that would allow ra_serf to stream svndiff deltas

without creating temporary files when working against new servers.

This patch adds a new delta editor callback, apply_textdelta_stream()

that we'll use to stream the deltas, fully implements in the ra_serf's

commit editor, but doesn't yet change the behavior of existing editor

drivers, such as svn_client_import5() or svn_client_commit6().

This requires a minor tweak to the Subversion's HTTP protocol, and

it's the reason why streaming would only work against new servers.

Currently, all PUT requests include a special header that contains the

result checksum, which is used by the server to validate the integrity

of the result after it applies the delta received over the wire. While

this approach works fine if the client first creates a temporary file with

the delta and only then starts sending it to the server (the result checksum

is calculated while preparing the temporary file), it can't be used in the

stream approach, as with it we'd need to know the result checksum _before_

we start sending data.

So we turn the existing scheme inside out, and teach mod_dav_svn to send the

result checksum in the responses to PUT requests. Then, the client would

check if the received checksum matches what it calculated, and, possibly,

return a checksum mismatch error (thus aborting the edit and the transaction).

* subversion/include/svn_delta.h

(svn_txdelta_stream_open_func_t): New callback type.

(svn_delta_editor_t): Add a forward declaration for this type.

(svn_delta_editor_t.apply_textdelta_stream): New vtable member.

* subversion/libsvn_delta/default_editor.c

(apply_textdelta_stream): Provide default implementation for this callback

that performs a fallback to apply_textdelta().

(default_editor): Extend the default instance of an svn_delta_editor_t.

* subversion/libsvn_delta/cancel.c

(apply_textdelta_stream): Implement this forwarding callback, and ...

(svn_delta_get_cancellation_editor): ...install it here.

* subversion/include/svn_dav.h


* subversion/mod_dav_svn/repos.c

(close_stream): Send the "X-SVN-Result-Fulltext-MD5" header when responding

to successful PUT requests.

* subversion/mod_dav_svn/version.c

(get_vsn_options): Advertise new capability.

* subversion/libsvn_ra_serf/ra_serf.h

(svn_ra_serf__session_t.supports_put_result_checksum): New field.

* subversion/libsvn_ra_serf/options.c

(capabilities_headers_iterator_callback): Remember if the server sends

the result checksum in the response to a successful PUT request.

* subversion/libsvn_ra_serf/commit.c

(file_context_t.svndiff_sent): New field.

(file_context_t.remote_result_checksum): New field.

(apply_textdelta): Update the comment stating that it would be nice to

get rid of temporary files for svndiff delta. Factor out the svndiff

format selection logic ...

(negotiate_put_encoding): ...into this new helper function.

(open_txdelta_baton_t): New.

(txdelta_stream_errfunc): New error function for the stream bucket.

(create_body_from_txdelta_stream): New svn_ra_serf__request_body_delegate_t

that creates the request body by opening an svn_txdelta_stream_t, turning

it into svn_stream_t and giving away a bucket wrapping around that stream.

Use it in ...

(apply_textdelta_stream): ...this new function that performs a PUT, and

streams the request body.

(put_response_ctx_t): New.

(put_response_handler): New, remembers the result checksum we received

from the server.

(close_file): Don't do a PUT if we did it in apply_textdelta_stream().

Check for a checksum mismatch using the checksum returned from the server.

(svn_ra_serf__get_commit_editor): Install the new apply_textdelta_stream()

callback when working against new servers.

  1. … 7 more files in changeset.
Negotiate the use of the svndiff2 format over http://.

On the server-side, start sending svndiff2 deltas to clients that can read

them, but only when SVNCompressionLevel is set to 1. On the client-side,

keep sending svndiff1. Currently we use svndiff1 with default compression

ratio (5), and svndiff2 is not a substitute for it, as that would result

in worse compression.

* subversion/include/svn_dav.h


* subversion/libsvn_ra_serf/ra_serf.h

(svn_ra_serf__session_t): Add 'supports_svndiff2' field.

* subversion/libsvn_ra_serf/options.c

(capabilities_headers_iterator_callback): Remember if the server supports


* subversion/libsvn_ra_serf/commit.c

(apply_textdelta): Add the fallback code for a theoretically possible

situation where the server has advertised _only_ svndiff2 support.

Note why we still use svndiff1 when client-side http compression is

enabled. Adjust a couple of comments.

* subversion/libsvn_ra_serf/util.c

(svn_ra_serf__setup_svndiff_accept_encoding): Advertise support for both

svndiff2 and svndiff1 with identical (q=) values. We'll let the server

decide between svndiff2 and svndiff1.

* subversion/mod_dav_svn/repos.c

(negotiate_encoding_prefs): Select the svndiff2 format if the client

supports it and if the server's SVNCompressionLevel is set to 1.

* subversion/mod_dav_svn/version.c

(get_vsn_options): Advertise svndiff2 support.

  1. … 5 more files in changeset.
Fix inconsistent handling of FS-related config flags in mod_dav_svn.

* subversion/mod_dav_svn/mod_dav_svn.c




dav_svn__get_block_read_flag): Consistently use the get_conf_flag

function and default to FSFS's current


Found by: julianfoad

mod_dav_svn: Use compressed svndiff1 deltas when delivering replay

reports, if the client supports them.

Previously, such reports have always been using uncompressed svndiff0

format for deltas, even if the client has indicated that it would like

to see svndiff1 via the "Accept-Encoding" header. Compression can

have a noticeable performance impact over WAN or thin networks.

* subversion/mod_dav_svn/reports/replay.c

(struct edit_baton_t): Add new 'svndiff_version' field.

(dav_svn__replay_report): Pass the negotiated svndiff version to ...

(make_editor): ...this function that constructs an edit baton.

(apply_textdelta): Use the negotiated svndiff version for deltas.

Make the svn_ra_get_mergeinfo streamy for ra_serf.

All the groundwork has been done in the repos and FS layers and we

only need to use the new callback-based API. The current pool usage

in brigades is opaque to this code. So, the memory usage might still

be unbound but it will still be noticibly less than before.

* subversion/svnserve/serve.c



mergeinfo_receiver): The new callback code.

(get_mergeinfo): Bump to using the new API.

Merging branches/authzperf to /trunk and remove BRANCH-README.
  1. … 35 more files in changeset.
Fix a bug in mod_dav_svn's MERGE handler that I introduced in r1758224.

The problem is caused by passing a wrong request argument to the new

dav_svn__output_create() function. Within the merge handler, the are

two dav_resource instances — the target and the source, with the second

being created via a subrequest. We were incorrectly using the request of

the source resource, and writing the response to the subrequest's output

filter stack. Doing so can result in malformed responses.

This bug can be triggered by committing with Apache Httpd 2.2.x and

mod_deflate (or by running the tests with the new --mod-deflate switch):

Committing transaction...

svn: E175009: Commit failed (details follow):

svn: E175009: The XML response contains invalid XML

svn: E130003: Malformed XML: not well-formed (invalid token)

* subversion/mod_dav_svn/version.c

(merge): Pass the request for the target resource when calling


* subversion/mod_dav_svn/merge.c

(send_response, dav_svn__merge_response): Use SVN_VA_NULL rather than

plain NULL when calling dav_svn__brigade_putstrs().

* subversion/mod_dav_svn/repos.c

(deliver): Rename 'entry_pool' local variable to 'iterpool'.

Fix the unbounded memory usage when mod_dav_svn is paired up with

mod_headers or mod_deflate.

The problem is caused by how mod_dav passes the output filter list to its

providers. A hook receives the current head of the output filter list for

a particular request. Certain filters, such as the one in mod_headers, are

designed to perform the work only once. When the work is done, a filter

removes itself from the list. If a filter is the first in the list, this

updates the head of the linked list in request_rec (r->output_filters), but

not the ap_filter_t * pointer that was passed as an argument to mod_dav_svn.

So, mod_dav_svn continues to operate with an outdated list of filters, and

every write causes a re-execution of the already removed filter.

In case with mod_headers, this triggers an unbounded memory usage, e.g.,

responding to a GET request for a 500 MB file results in the server

consuming a large amount (~3.2 GB) of memory. Full discussion of the

mod_dav's part of the issue can be found in [1].

The idea behind the fix is that we add a new opaque type, dav_svn__output,

a small corresponding set of private API functions, and adjust the existing

output helpers so that every write would target a dav_svn__output object.

A dav_svn__output is constructed for a particular request, and internally

it ensures that the writes *always* target the actual output filter list

in r->output_filters.


* subversion/mod_dav_svn/dav_svn.h

(dav_svn__output): New.

(dav_svn__output_create, dav_svn__output_get_bucket_alloc,

dav_svn__output_pass_brigade): New.

(dav_svn__merge_response, dav_svn__update_report,

dav_svn__log_report, dav_svn__dated_rev_report,

dav_svn__get_locations_report, dav_svn__get_location_segments_report,

dav_svn__file_revs_report, dav_svn__replay_report,

dav_svn__get_mergeinfo_report, dav_svn__get_locks_report,

dav_svn__get_deleted_rev_report, dav_svn__get_inherited_props_report,

dav_svn__post_create_txn, dav_svn__post_create_txn_with_props,

dav_svn__brigade_write, dav_svn__brigade_puts,

dav_svn__brigade_printf, dav_svn__brigade_putstrs,

dav_svn__make_base64_output_stream, dav_svn__final_flush_or_error):

Now work with a dav_svn__output, instead of an ap_filter_t.

* subversion/mod_dav_svn/util.c

(dav_svn__output): New.

(dav_svn__output_create, dav_svn__output_get_bucket_alloc,

dav_svn__output_pass_brigade): Implement new functions.

(dav_svn__brigade_write, dav_svn__brigade_puts,

dav_svn__brigade_printf, dav_svn__brigade_putstrs,

dav_svn__final_flush_or_error): Target the actual output filter list

for a particular request.

(brigade_write_baton): Store a dav_svn__output object.

(brigade_write_fn): Target the actual output filter list for a

particular request.

(dav_svn__make_base64_output_stream): Now works with a dav_svn__output,

instead of an ap_filter_t.

* subversion/mod_dav_svn/repos.c

(diff_ctx_t): Store a dav_svn__output object.

(write_to_filter): Call dav_svn__brigade_write() function.

(close_filter): Use the dav_svn__output's API. The apr_brigade_cleanup()

call is no longer required, since dav_svn__output_pass_brigade() also

cleans the bucket brigade.

(emit_collection_head, emit_collection_entry, emit_collection_tail):

Now work with a dav_svn__output, instead of an ap_filter_t.

(deliver): Create a dav_svn__output at the beginning of this function.

Use the dav_svn__output's API for brigade creation and passing to the

output filter stack.

(handle_post_request): Now works with a dav_svn__output, instead of

an ap_filter_t.

(dav_svn__method_post): Create a dav_svn__output and forward it to


* subversion/mod_dav_svn/version.c

(deliver_report): Create a dav_svn__output and forward it to the

report handlers.

(merge): Create a dav_svn__output and forward it to


* subversion/mod_dav_svn/merge.c

(send_response, do_resources, dav_svn__merge_response): Now work with

a dav_svn__output and use the new private API.

* subversion/mod_dav_svn/posts/create_txn.c

(dav_svn__post_create_txn, dav_svn__post_create_txn_with_props): Now

work with a dav_svn__output.

* subversion/mod_dav_svn/reports/dated-rev.c

(dav_svn__dated_rev_report): Work with a dav_svn__output. Use the new

private API when creating a bucket brigade.

* subversion/mod_dav_svn/reports/deleted-rev.c

(dav_svn__get_deleted_rev_report): Work with a dav_svn__output. Use

the new private API when creating a bucket brigade.

* subversion/mod_dav_svn/reports/file-revs.c

(file_rev_baton): Store a dav_svn__output object.

(dav_svn__file_revs_report): Work with a dav_svn__output. Use the new

private API when creating a bucket brigade.

* subversion/mod_dav_svn/reports/get-location-segments.c

(location_segment_baton): Store a dav_svn__output object.

(dav_svn__get_location_segments_report): Work with a dav_svn__output.

Use the new private API when creating a bucket brigade.

* subversion/mod_dav_svn/reports/get-locations.c

(send_get_locations_report, dav_svn__get_locations_report): Work with a

dav_svn__output. Use the new private API when creating a bucket brigade.

* subversion/mod_dav_svn/reports/get-locks.c

(send_get_lock_response, dav_svn__get_locks_report): Work with a

dav_svn__output. Use the new private API when creating a bucket brigade.

* subversion/mod_dav_svn/reports/inherited-props.c

(dav_svn__get_inherited_props_report): Work with a dav_svn__output.

Use the new private API when creating a bucket brigade.

* subversion/mod_dav_svn/reports/log.c

(log_receiver_baton): Store a dav_svn__output object.

(log_revision_receiver): Rewrite the forced flush by creating and sending

a flush bucket to the output filters (that's what ap_fflush() does

internally). Drop the aborted connection check, since it's now a

part of dav_svn__output_pass_brigade().

(dav_svn__log_report): Work with a dav_svn__output. Use the new private

API when creating a bucket brigade.

* subversion/mod_dav_svn/reports/mergeinfo.c

(dav_svn__get_mergeinfo_report): Work with a dav_svn__output. Use the

new private API when creating a bucket brigade.

* subversion/mod_dav_svn/reports/replay.c

(edit_baton_t): Store a dav_svn__output object.

(make_editor, dav_svn__replay_report): Work with a dav_svn__output.

Use the new private API when creating a bucket brigade.

* subversion/mod_dav_svn/reports/update.c

(update_ctx_t): Store a dav_svn__output object.

(dav_svn__update_report): Work with a dav_svn__output. Use the new

private API when creating a bucket brigade.