Author: cmpilato
Date: Mon Sep 10 18:44:24 2012
New Revision: 1383029
URL: http://svn.apache.org/viewvc?rev=1383029&view=rev
Log:
Fix a SEGFAULT triggered via 'svn copy ^/A ^/A-COPY' for a Greek
repository exposed at the server root. A URI normalization step we
make at session open time needed to also be made when reparenting.
* subversion/libsvn_ra_serf/serf.c
(svn_ra_serf__open): Comment and code formatting tweaks only.
(svn_ra_serf__reparent): Account for the possibility of NULL or
empty parsed URI 'path' members here, too.
Modified:
subversion/trunk/subversion/libsvn_ra_serf/serf.c
Modified: subversion/trunk/subversion/libsvn_ra_serf/serf.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_ra_serf/serf.c?rev=1383029&r1=1383028&r2=1383029&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_ra_serf/serf.c (original)
+++ subversion/trunk/subversion/libsvn_ra_serf/serf.c Mon Sep 10 18:44:24 2012
@@ -381,10 +381,12 @@ svn_ra_serf__open(svn_ra_session_t *sess
_("Illegal URL '%s'"),
session_URL);
}
- /* Contrary to what the comment for apr_uri_t.path says in apr-util 1.2.12
and
- older, for root paths url.path will be "", where serf requires "/". */
+ /* Depending the version of apr-util in use, for root paths url.path
+ will be NULL or "", where serf requires "/". */
if (url.path == NULL || url.path[0] == '\0')
- url.path = apr_pstrdup(serf_sess->pool, "/");
+ {
+ url.path = apr_pstrdup(serf_sess->pool, "/");
+ }
if (!url.port)
{
url.port = apr_uri_port_of_scheme(url.scheme);
@@ -478,9 +480,18 @@ svn_ra_serf__reparent(svn_ra_session_t *
_("Illegal repository URL '%s'"), url);
}
- /* Maybe we should use a string buffer for these strings so we don't
- allocate memory in the session on every reparent? */
- session->session_url.path = apr_pstrdup(session->pool, new_url.path);
+ /* Depending the version of apr-util in use, for root paths url.path
+ will be NULL or "", where serf requires "/". */
+ /* ### Maybe we should use a string buffer for these strings so we
+ ### don't allocate memory in the session on every reparent? */
+ if (new_url.path == NULL || new_url.path[0] == '\0')
+ {
+ session->session_url.path = apr_pstrdup(session->pool, "/");
+ }
+ else
+ {
+ session->session_url.path = apr_pstrdup(session->pool, new_url.path);
+ }
session->session_url_str = apr_pstrdup(session->pool, url);
return SVN_NO_ERROR;