You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ju...@apache.org on 2015/11/17 16:11:24 UTC
svn commit: r1714806 - /subversion/trunk/subversion/libsvn_ra_serf/property.c
Author: julianfoad
Date: Tue Nov 17 15:11:24 2015
New Revision: 1714806
URL: http://svn.apache.org/viewvc?rev=1714806&view=rev
Log:
Work around a bug in Serf bucket handling, which could crash in some cases
within svn_ra_serf__get_dir(dirent_fields=0). Found by 'svnmover' tests.
The bug is fixed in Serf trunk r1712790, but not yet released.
Suggested by: rhuijben
* subversion/libsvn_ra_serf/property.c
(create_propfind_body): Avoid the possibility of the first operation on the
bucket being serf_bucket_aggregate_prepend(), by only using _append().
Modified:
subversion/trunk/subversion/libsvn_ra_serf/property.c
Modified: subversion/trunk/subversion/libsvn_ra_serf/property.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_ra_serf/property.c?rev=1714806&r1=1714805&r2=1714806&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_ra_serf/property.c (original)
+++ subversion/trunk/subversion/libsvn_ra_serf/property.c Tue Nov 17 15:11:24 2015
@@ -390,6 +390,26 @@ create_propfind_body(serf_bucket_t **bkt
requested_allprop = TRUE;
}
+ prop++;
+ }
+
+ tmp = SERF_BUCKET_SIMPLE_STRING_LEN(PROPFIND_HEADER,
+ sizeof(PROPFIND_HEADER)-1,
+ alloc);
+ serf_bucket_aggregate_append(body_bkt, tmp);
+
+ /* If we're not doing an allprop, add <prop> tags. */
+ if (!requested_allprop)
+ {
+ tmp = SERF_BUCKET_SIMPLE_STRING_LEN("<prop>",
+ sizeof("<prop>")-1,
+ alloc);
+ serf_bucket_aggregate_append(body_bkt, tmp);
+ }
+
+ prop = ctx->find_props;
+ while (prop && prop->xmlns)
+ {
/* <*propname* xmlns="*propns*" /> */
tmp = SERF_BUCKET_SIMPLE_STRING_LEN("<", 1, alloc);
serf_bucket_aggregate_append(body_bkt, tmp);
@@ -412,21 +432,6 @@ create_propfind_body(serf_bucket_t **bkt
prop++;
}
- /* If we're not doing an allprop, add <prop> tags. */
- if (!requested_allprop)
- {
- tmp = SERF_BUCKET_SIMPLE_STRING_LEN("<prop>",
- sizeof("<prop>")-1,
- alloc);
- serf_bucket_aggregate_prepend(body_bkt, tmp);
- }
-
- tmp = SERF_BUCKET_SIMPLE_STRING_LEN(PROPFIND_HEADER,
- sizeof(PROPFIND_HEADER)-1,
- alloc);
-
- serf_bucket_aggregate_prepend(body_bkt, tmp);
-
if (!requested_allprop)
{
tmp = SERF_BUCKET_SIMPLE_STRING_LEN("</prop>",