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>",