Hi,

while looking at candidates for backport to synch 2.4.x and trunk, I came across this old comment update.

The first part of the comment, against 'ap_os_escape_path', is, IMO, wrong.
We are not guaranteed that, if partial is *not* set, that there will be one byte of additional space after the NUL.

If partial *is* set, then we skip the :
    *d++ = '.';
    *d++ = '/';
and extra bytes will be available after the NUL.

But if it is *not* set, I think that there may be (unlikely) cases where not space is available at the end.

So, either the comment should be updated or 1 extra byte should be allocated, to be safe. In this later case, the comment should also be updated to state that in *all* cases, one extra byte is available.
+1 for allocating an extra byte.


Moreover, 'ap_os_escape_path' could be tweaked as in r1485723.


Best regards,

CJ



Le 14/09/2012 23:06, [email protected] a écrit :
Author: sf
Date: Fri Sep 14 21:06:05 2012
New Revision: 1384924

URL: http://svn.apache.org/viewvc?rev=1384924&view=rev
Log:
ap_sub_req_lookup_dirent() depends on the over-allocation done by
ap_make_full_path and ap_escape_uri, so let's document it so that it is not
accidentally removed.

Modified:
     httpd/httpd/trunk/include/httpd.h
     httpd/httpd/trunk/server/request.c

Modified: httpd/httpd/trunk/include/httpd.h
URL: 
http://svn.apache.org/viewvc/httpd/httpd/trunk/include/httpd.h?rev=1384924&r1=1384923&r2=1384924&view=diff
==============================================================================
--- httpd/httpd/trunk/include/httpd.h (original)
+++ httpd/httpd/trunk/include/httpd.h Fri Sep 14 21:06:05 2012
@@ -1579,7 +1579,9 @@ AP_DECLARE(char *) ap_escape_path_segmen
   * @param p The pool to allocate from
   * @param path The path to convert
   * @param partial if set, assume that the path will be appended to something
- *        with a '/' in it (and thus does not prefix "./")
+ *        with a '/' in it (and thus does not prefix "./").
+ *        If not set, there will be one byte of additional space after the
+ *        NUL, to allow the caller to append a '/'.
   * @return The converted URL
   */
  AP_DECLARE(char *) ap_os_escape_path(apr_pool_t *p, const char *path, int 
partial);
@@ -1692,7 +1694,8 @@ AP_DECLARE(char *) ap_make_dirstr_parent
   * @param a The pool to allocate from
   * @param dir The directory name
   * @param f The filename
- * @return A copy of the full path
+ * @return A copy of the full path, with one byte of extra space after the NUL
+ *         to allow the caller to add a trailing '/'.
   * @note Never consider using this function if you are dealing with filesystem
   * names that need to remain canonical, unless you are merging an apr_dir_read
   * path and returned filename.  Otherwise, the result is not canonical.

Modified: httpd/httpd/trunk/server/request.c
URL: 
http://svn.apache.org/viewvc/httpd/httpd/trunk/server/request.c?rev=1384924&r1=1384923&r2=1384924&view=diff
==============================================================================
--- httpd/httpd/trunk/server/request.c (original)
+++ httpd/httpd/trunk/server/request.c Fri Sep 14 21:06:05 2012
@@ -2160,7 +2160,7 @@ AP_DECLARE(request_rec *) ap_sub_req_loo
      }
if (rnew->finfo.filetype == APR_DIR) {
-        /* ap_make_full_path overallocated the buffers
+        /* ap_make_full_path and ap_escape_uri overallocated the buffers
           * by one character to help us out here.
           */
          strcat(rnew->filename, "/");

Reply via email to