You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by br...@apache.org on 2013/10/12 08:13:20 UTC

svn commit: r1531505 - /httpd/httpd/trunk/modules/dav/fs/repos.c

Author: breser
Date: Sat Oct 12 06:13:20 2013
New Revision: 1531505

URL: http://svn.apache.org/r1531505
Log:
Followup to r1529559: mod_dav_fs: Fix encoding of hrefs in PROPFIND response.

Previous commit missed encoding the names of the children of the PROPFIND
request when the depth wasn't 0.

* modules/dav/fs/repos.c
  (dav_fs_append_uri): New function
  (dav_fs_walker): Use dav_fs_append_uri() and adjust length calculations to
    use the encoded length.


Modified:
    httpd/httpd/trunk/modules/dav/fs/repos.c

Modified: httpd/httpd/trunk/modules/dav/fs/repos.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/dav/fs/repos.c?rev=1531505&r1=1531504&r2=1531505&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/dav/fs/repos.c (original)
+++ httpd/httpd/trunk/modules/dav/fs/repos.c Sat Oct 12 06:13:20 2013
@@ -1482,6 +1482,18 @@ static dav_error * dav_fs_remove_resourc
     return dav_fs_deleteset(info->pool, resource);
 }
 
+/* Take an unescaped path component and escape it and append it onto a
+ * dav_buffer for a URI */
+static apr_size_t dav_fs_append_uri(apr_pool_t *p, dav_buffer *pbuf,
+                                    const char *path, apr_size_t pad)
+{
+    const char *epath = ap_escape_uri(p, path);
+    apr_size_t epath_len = strlen(epath);
+
+    dav_buffer_place_mem(p, pbuf, epath, epath_len + 1, pad);
+    return epath_len;
+}
+
 /* ### move this to dav_util? */
 /* Walk recursively down through directories, *
  * including lock-null resources as we go.    */
@@ -1537,6 +1549,7 @@ static dav_error * dav_fs_walker(dav_fs_
     }
     while ((apr_dir_read(&dirent, APR_FINFO_DIRENT, dirp)) == APR_SUCCESS) {
         apr_size_t len;
+        apr_size_t escaped_len;
 
         len = strlen(dirent.name);
 
@@ -1579,7 +1592,7 @@ static dav_error * dav_fs_walker(dav_fs_
 
         /* copy the file to the URI, too. NOTE: we will pad an extra byte
            for the trailing slash later. */
-        dav_buffer_place_mem(pool, &fsctx->uri_buf, dirent.name, len + 1, 1);
+        escaped_len = dav_fs_append_uri(pool, &fsctx->uri_buf, dirent.name, 1);
 
         /* if there is a secondary path, then do that, too */
         if (fsctx->path2.buf != NULL) {
@@ -1612,7 +1625,7 @@ static dav_error * dav_fs_walker(dav_fs_
             fsctx->path2.cur_len += len;
 
             /* adjust URI length to incorporate subdir and a slash */
-            fsctx->uri_buf.cur_len += len + 1;
+            fsctx->uri_buf.cur_len += escaped_len + 1;
             fsctx->uri_buf.buf[fsctx->uri_buf.cur_len - 1] = '/';
             fsctx->uri_buf.buf[fsctx->uri_buf.cur_len] = '\0';
 
@@ -1678,8 +1691,8 @@ static dav_error * dav_fs_walker(dav_fs_
             */
             dav_buffer_place_mem(pool, &fsctx->path1,
                                  fsctx->locknull_buf.buf + offset, len + 1, 0);
-            dav_buffer_place_mem(pool, &fsctx->uri_buf,
-                                 fsctx->locknull_buf.buf + offset, len + 1, 0);
+            dav_fs_append_uri(pool, &fsctx->uri_buf,
+                              fsctx->locknull_buf.buf + offset, 0);
             if (fsctx->path2.buf != NULL) {
                 dav_buffer_place_mem(pool, &fsctx->path2,
                                      fsctx->locknull_buf.buf + offset,