]> granicus.if.org Git - apache/commitdiff
* modules/standard/mod_autoindex.c (index_directory): If stat() fails
authorJoe Orton <jorton@apache.org>
Wed, 10 Mar 2004 20:51:10 +0000 (20:51 +0000)
committerJoe Orton <jorton@apache.org>
Wed, 10 Mar 2004 20:51:10 +0000 (20:51 +0000)
for a particular dirent, ignore that entry rather than truncating the
directory listing.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@102924 13f79535-47bb-0310-9956-ffa450edef68

modules/generators/mod_autoindex.c

index 6ddf50d15eed28ad0c67ee7e4d4bffaabc29f791..50854a4dae9fbee4b5dbeff348ecfcd51f86761f 100644 (file)
@@ -2126,8 +2126,16 @@ static int index_directory(request_rec *r,
     fullpath = apr_palloc(r->pool, APR_PATH_MAX);
     dirpathlen = strlen(name);
     memcpy(fullpath, name, dirpathlen);
-    while (apr_dir_read(&dirent, APR_FINFO_MIN | APR_FINFO_NAME,
-                        thedir) == APR_SUCCESS) {
+
+    do {
+        status = apr_dir_read(&dirent, APR_FINFO_MIN | APR_FINFO_NAME, thedir);
+        if (APR_STATUS_IS_INCOMPLETE(status)) {
+            continue; /* ignore un-stat()able files */
+        }
+        else if (status != APR_SUCCESS) {
+            break;
+        }
+
         /* We want to explode symlinks here. */
         if (dirent.filetype == APR_LNK) {
             const char *savename;
@@ -2153,7 +2161,8 @@ static int index_directory(request_rec *r,
             head = p;
             num_ent++;
         }
-    }
+    } while (1);
+
     if (num_ent > 0) {
         ar = (struct ent **) apr_palloc(r->pool,
                                         num_ent * sizeof(struct ent *));