server/request.c:827: error: UNINITIALIZED_VALUE
  The value read from opts.override_opts was never initialized.

server/request.c:827:23: 
825.                 }
826. 
827.                 res = ap_parse_htaccess(&htaccess_conf, r, opts.override,
                           ^
828. 					opts.override_opts,
829.                                         apr_pstrdup(r->pool, r->filename),

AP_DECLARE(int) ap_directory_walk(request_rec *r)
{
    ap_conf_vector_t *now_merged = NULL;
    core_server_config *sconf = ap_get_module_config(r->server->module_config,
                                                     &core_module);
    ap_conf_vector_t **sec_ent = (ap_conf_vector_t **) sconf->sec_dir->elts;
    int num_sec = sconf->sec_dir->nelts;
    walk_cache_t *cache;
    char *entry_dir;
    apr_status_t rv;
    if (r->filename == NULL) {
        ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r,
                      "Module bug?  Request filename is missing for URI %s",
                      r->uri);
       return OK;
    }
    if ((rv = apr_filepath_merge(&entry_dir, NULL, r->filename,
                                 APR_FILEPATH_NOTRELATIVE, r->pool))
                  != APR_SUCCESS) {
        ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r,
                      "Module bug?  Request filename path %s is invalid or "
                      "or not absolute for uri %s",
                      r->filename, r->uri);
        return OK;
    }
    r->filename = entry_dir;
    cache = prep_walk_cache(AP_NOTE_DIRECTORY_WALK, r);
    if (!r->finfo.filetype || r->finfo.filetype == APR_LNK) {
        rv = apr_stat(&r->finfo, r->filename, APR_FINFO_MIN, r->pool);
        if ((rv != APR_SUCCESS) ||
            (r->finfo.filetype &&
             (r->finfo.filetype != APR_DIR) &&
             (r->filename[strlen(r->filename) - 1] == '/'))) {
             r->finfo.filetype = 0;
        }
    }
    if (r->finfo.filetype == APR_REG) {
        entry_dir = ap_make_dirstr_parent(r->pool, entry_dir);
    }
    else if (r->filename[strlen(r->filename) - 1] != '/') {
        entry_dir = apr_pstrcat(r->pool, r->filename, "/", NULL);
    }
    if (cache->cached
        && ((r->finfo.filetype == APR_REG)
            || ((r->finfo.filetype == APR_DIR)
                && (!r->path_info || !*r->path_info)))
        && (cache->dir_conf_tested == sec_ent)
        && (strcmp(entry_dir, cache->cached) == 0)) {
        if (r->per_dir_config == cache->per_dir_result) {
            return OK;
        }
        if (r->per_dir_config == cache->dir_conf_merged) {
            r->per_dir_config = cache->per_dir_result;
            return OK;
        }
        if (cache->walked->nelts) {
            now_merged = ((walk_walked_t*)cache->walked->elts)
                [cache->walked->nelts - 1].merged;
        }
    }
    else {
        int sec_idx;
        int matches = cache->walked->nelts;
        walk_walked_t *last_walk = (walk_walked_t*)cache->walked->elts;
        core_dir_config *this_dir;
        core_opts_t opts;
        apr_finfo_t thisinfo;
        char *save_path_info;
        apr_size_t buflen;
        char *buf;
        unsigned int seg, startseg;
        apr_size_t filename_len;
#ifdef CASE_BLIND_FILESYSTEM
        apr_size_t canonical_len;
#endif
        this_dir = ap_get_module_config(r->per_dir_config, &core_module);
        opts.opts = this_dir->opts;
        opts.add = this_dir->opts_add;
        opts.remove = this_dir->opts_remove;
        opts.override = this_dir->override;
        if ((r->finfo.filetype == APR_DIR) && r->path_info && *r->path_info)
        {
            if ((rv = apr_filepath_merge(&r->path_info, r->filename,
                                         r->path_info,
                                         APR_FILEPATH_NOTABOVEROOT, r->pool))
                != APR_SUCCESS) {
                ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
                              "dir_walk error, path_info %s is not relative "
                              "to the filename path %s for uri %s",
                              r->path_info, r->filename, r->uri);
                return HTTP_INTERNAL_SERVER_ERROR;
            }
            save_path_info = NULL;
        }
        else {
            save_path_info = r->path_info;
            r->path_info = r->filename;
        }
#ifdef CASE_BLIND_FILESYSTEM
        canonical_len = 0;
        while (r->canonical_filename && r->canonical_filename[canonical_len]
               && (r->canonical_filename[canonical_len]
                   == r->path_info[canonical_len])) {
             ++canonical_len;
        }
        while (canonical_len
               && ((r->canonical_filename[canonical_len - 1] != '/'
                   && r->canonical_filename[canonical_len - 1])
                   || (r->path_info[canonical_len - 1] != '/'
                       && r->path_info[canonical_len - 1]))) {
            --canonical_len;
        }
        rv = apr_filepath_root((const char **)&r->filename,
                               (const char **)&r->path_info,
                               canonical_len ? 0 : APR_FILEPATH_TRUENAME,
                               r->pool);
        filename_len = strlen(r->filename);
        if ((rv == APR_SUCCESS) && canonical_len
            && (filename_len > canonical_len)) {
            rv = apr_filepath_root((const char **)&r->filename,
                                   (const char **)&r->path_info,
                                   APR_FILEPATH_TRUENAME, r->pool);
            filename_len = strlen(r->filename);
            canonical_len = 0;
        }
#else
        rv = apr_filepath_root((const char **)&r->filename,
                               (const char **)&r->path_info,
                               0, r->pool);
        filename_len = strlen(r->filename);
#endif
        if (rv != APR_SUCCESS) {
            ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
                          "dir_walk error, could not determine the root "
                          "path of filename %s%s for uri %s",
                          r->filename, r->path_info, r->uri);
            return HTTP_INTERNAL_SERVER_ERROR;
        }
        buflen = filename_len + strlen(r->path_info) + 2;
        buf = apr_palloc(r->pool, buflen);
        memcpy(buf, r->filename, filename_len + 1);
        r->filename = buf;
        thisinfo.valid = APR_FINFO_TYPE;
        thisinfo.filetype = APR_DIR;
        startseg = seg = ap_count_dirs(r->filename);
        sec_idx = 0;
        do {
            int res;
            char *seg_name;
            char *delim;
            int temp_slash=0;
            if ((seg > startseg) && r->filename[filename_len-1] != '/') {
                r->filename[filename_len++] = '/';
                r->filename[filename_len] = 0;
                temp_slash=1;
            }
            for (; sec_idx < num_sec; ++sec_idx) {
                ap_conf_vector_t *entry_config = sec_ent[sec_idx];
                core_dir_config *entry_core;
                entry_core = ap_get_module_config(entry_config, &core_module);
                if (entry_core->r || entry_core->d_components > seg) {
                    break;
                }
                if (entry_core->d_components
                    && ((entry_core->d_components < seg)
                     || (entry_core->d_is_fnmatch
                         ? (apr_fnmatch(entry_core->d, r->filename,
                                        APR_FNM_PATHNAME) != APR_SUCCESS)
                         : (strcmp(r->filename, entry_core->d) != 0)))) {
                    continue;
                }
                core_opts_merge(sec_ent[sec_idx], &opts);
                if (matches) {
                    if (last_walk->matched == sec_ent[sec_idx]) {
                        now_merged = last_walk->merged;
                        ++last_walk;
                        --matches;
                        continue;
                    }
                    cache->walked->nelts -= matches;
                    matches = 0;
                }
                if (now_merged) {
                    now_merged = ap_merge_per_dir_configs(r->pool,
                                                          now_merged,
                                                          sec_ent[sec_idx]);
                }
                else {
                    now_merged = sec_ent[sec_idx];
                }
                last_walk = (walk_walked_t*)apr_array_push(cache->walked);
                last_walk->matched = sec_ent[sec_idx];
                last_walk->merged = now_merged;
            }
            do {
                ap_conf_vector_t *htaccess_conf = NULL;
                if (seg < startseg || !opts.override) {
                    break;
                }
                res = ap_parse_htaccess(&htaccess_conf, r, opts.override,
					opts.override_opts,
                                        apr_pstrdup(r->pool, r->filename),
                                        sconf->access_name);
                if (res) {
                    return res;
                }
                if (!htaccess_conf) {
                    break;
                }
                core_opts_merge(htaccess_conf, &opts);
                if (matches) {
                    if (last_walk->matched == htaccess_conf) {
                        now_merged = last_walk->merged;
                        ++last_walk;
                        --matches;
                        break;
                    }
                    cache->walked->nelts -= matches;
                    matches = 0;
                }
                if (now_merged) {
                    now_merged = ap_merge_per_dir_configs(r->pool,
                                                          now_merged,
                                                          htaccess_conf);
                }
                else {
                    now_merged = htaccess_conf;
                }
                last_walk = (walk_walked_t*)apr_array_push(cache->walked);
                last_walk->matched = htaccess_conf;
                last_walk->merged = now_merged;
            } while (0);
            if (temp_slash) {
                r->filename[--filename_len] = '\0';
            }
            if (!r->path_info || !*r->path_info) {
                break;
            }
            seg_name = r->filename + filename_len;
            delim = strchr(r->path_info + (*r->path_info == '/' ? 1 : 0), '/');
            if (delim) {
                size_t path_info_len = delim - r->path_info;
                *delim = '\0';
                memcpy(seg_name, r->path_info, path_info_len + 1);
                filename_len += path_info_len;
                r->path_info = delim;
                *delim = '/';
            }
            else {
                size_t path_info_len = strlen(r->path_info);
                memcpy(seg_name, r->path_info, path_info_len + 1);
                filename_len += path_info_len;
                r->path_info += path_info_len;
            }
            if (*seg_name == '/')
                ++seg_name;
            if (!*seg_name) {
                break;
            }
            if (r->finfo.filetype
#ifdef CASE_BLIND_FILESYSTEM
                && (filename_len <= canonical_len)
#endif
                && ((opts.opts & (OPT_SYM_OWNER | OPT_SYM_LINKS)) == OPT_SYM_LINKS))
            {
                thisinfo.filetype = APR_DIR;
                ++seg;
                continue;
            }
            rv = apr_stat(&thisinfo, r->filename,
                          APR_FINFO_MIN | APR_FINFO_NAME | APR_FINFO_LINK,
                          r->pool);
            if (APR_STATUS_IS_ENOENT(rv)) {
                thisinfo.filetype = APR_NOFILE;
                break;
            }
            else if (APR_STATUS_IS_EACCES(rv)) {
                ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
                              "access to %s denied", r->uri);
                return r->status = HTTP_FORBIDDEN;
            }
            else if ((rv != APR_SUCCESS && rv != APR_INCOMPLETE)
                     || !(thisinfo.valid & APR_FINFO_TYPE)) {
                ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
                              "access to %s failed", r->uri);
                return r->status = HTTP_FORBIDDEN;
            }
            if ((thisinfo.valid & APR_FINFO_NAME)
                && strcmp(seg_name, thisinfo.name)) {
                strcpy(seg_name, thisinfo.name);
                filename_len = strlen(r->filename);
            }
            if (thisinfo.filetype == APR_LNK) {
                if ((res = resolve_symlink(r->filename, &thisinfo,
                                           opts.opts, r->pool)) != OK) {
                    ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
                                  "Symbolic link not allowed: %s",
                                  r->filename);
                    return r->status = res;
                }
            }
            if (thisinfo.filetype == APR_REG ||
                thisinfo.filetype == APR_NOFILE) {
                break;
            }
            else if (thisinfo.filetype != APR_DIR) {
                ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
                              "Forbidden: %s doesn't point to "
                              "a file or directory",
                              r->filename);
                return r->status = HTTP_FORBIDDEN;
            }
            ++seg;
        } while (thisinfo.filetype == APR_DIR);
        if (!r->finfo.filetype || r->finfo.filetype == APR_LNK) {
            r->finfo = thisinfo;
        }
        if (save_path_info) {
            if (r->path_info && *r->path_info) {
                r->path_info = ap_make_full_path(r->pool, r->path_info,
                                                 save_path_info);
            }
            else {
                r->path_info = save_path_info;
            }
        }
        for (; sec_idx < num_sec; ++sec_idx) {
            core_dir_config *entry_core;
            entry_core = ap_get_module_config(sec_ent[sec_idx], &core_module);
            if (!entry_core->r) {
                continue;
            }
            if (ap_regexec(entry_core->r, r->filename, 0, NULL, REG_NOTEOL)) {
                continue;
            }
            core_opts_merge(sec_ent[sec_idx], &opts);
            if (matches) {
                if (last_walk->matched == sec_ent[sec_idx]) {
                    now_merged = last_walk->merged;
                    ++last_walk;
                    --matches;
                    continue;
                }
                cache->walked->nelts -= matches;
                matches = 0;
            }
            if (now_merged) {
                now_merged = ap_merge_per_dir_configs(r->pool,
                                                      now_merged,
                                                      sec_ent[sec_idx]);
            }
            else {
                now_merged = sec_ent[sec_idx];
            }
            last_walk = (walk_walked_t*)apr_array_push(cache->walked);
            last_walk->matched = sec_ent[sec_idx];
            last_walk->merged = now_merged;
        }
        if (matches) {
            cache->walked->nelts -= matches;
        }
    }
    r->canonical_filename = r->filename;
    if (r->finfo.filetype == APR_DIR) {
        cache->cached = r->filename;
    }
    else {
        cache->cached = ap_make_dirstr_parent(r->pool, r->filename);
    }
    cache->dir_conf_tested = sec_ent;
    cache->dir_conf_merged = r->per_dir_config;
    if (now_merged) {
        r->per_dir_config = ap_merge_per_dir_configs(r->pool,
                                                     r->per_dir_config,
                                                     now_merged);
    }
    cache->per_dir_result = r->per_dir_config;
    return OK;
}
['AP_DECLARE(int) ap_directory_walk(request_rec *r)\n{\n    ap_conf_vector_t *now_merged = NULL;\n    core_server_config *sconf = ap_get_module_config(r->server->module_config,\n                                                     &core_module);\n    ap_conf_vector_t **sec_ent = (ap_conf_vector_t **) sconf->sec_dir->elts;\n    int num_sec = sconf->sec_dir->nelts;\n    walk_cache_t *cache;\n    char *entry_dir;\n    apr_status_t rv;\n    if (r->filename == NULL) {\n        ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r,\n                      "Module bug?  Request filename is missing for URI %s",\n                      r->uri);\n       return OK;\n    }\n    if ((rv = apr_filepath_merge(&entry_dir, NULL, r->filename,\n                                 APR_FILEPATH_NOTRELATIVE, r->pool))\n                  != APR_SUCCESS) {\n        ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r,\n                      "Module bug?  Request filename path %s is invalid or "\n                      "or not absolute for uri %s",\n                      r->filename, r->uri);\n        return OK;\n    }\n    r->filename = entry_dir;\n    cache = prep_walk_cache(AP_NOTE_DIRECTORY_WALK, r);\n    if (!r->finfo.filetype || r->finfo.filetype == APR_LNK) {\n        rv = apr_stat(&r->finfo, r->filename, APR_FINFO_MIN, r->pool);\n        if ((rv != APR_SUCCESS) ||\n            (r->finfo.filetype &&\n             (r->finfo.filetype != APR_DIR) &&\n             (r->filename[strlen(r->filename) - 1] == \'/\'))) {\n             r->finfo.filetype = 0;\n        }\n    }\n    if (r->finfo.filetype == APR_REG) {\n        entry_dir = ap_make_dirstr_parent(r->pool, entry_dir);\n    }\n    else if (r->filename[strlen(r->filename) - 1] != \'/\') {\n        entry_dir = apr_pstrcat(r->pool, r->filename, "/", NULL);\n    }\n    if (cache->cached\n        && ((r->finfo.filetype == APR_REG)\n            || ((r->finfo.filetype == APR_DIR)\n                && (!r->path_info || !*r->path_info)))\n        && (cache->dir_conf_tested == sec_ent)\n        && (strcmp(entry_dir, cache->cached) == 0)) {\n        if (r->per_dir_config == cache->per_dir_result) {\n            return OK;\n        }\n        if (r->per_dir_config == cache->dir_conf_merged) {\n            r->per_dir_config = cache->per_dir_result;\n            return OK;\n        }\n        if (cache->walked->nelts) {\n            now_merged = ((walk_walked_t*)cache->walked->elts)\n                [cache->walked->nelts - 1].merged;\n        }\n    }\n    else {\n        int sec_idx;\n        int matches = cache->walked->nelts;\n        walk_walked_t *last_walk = (walk_walked_t*)cache->walked->elts;\n        core_dir_config *this_dir;\n        core_opts_t opts;\n        apr_finfo_t thisinfo;\n        char *save_path_info;\n        apr_size_t buflen;\n        char *buf;\n        unsigned int seg, startseg;\n        apr_size_t filename_len;\n#ifdef CASE_BLIND_FILESYSTEM\n        apr_size_t canonical_len;\n#endif\n        this_dir = ap_get_module_config(r->per_dir_config, &core_module);\n        opts.opts = this_dir->opts;\n        opts.add = this_dir->opts_add;\n        opts.remove = this_dir->opts_remove;\n        opts.override = this_dir->override;\n        if ((r->finfo.filetype == APR_DIR) && r->path_info && *r->path_info)\n        {\n            if ((rv = apr_filepath_merge(&r->path_info, r->filename,\n                                         r->path_info,\n                                         APR_FILEPATH_NOTABOVEROOT, r->pool))\n                != APR_SUCCESS) {\n                ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,\n                              "dir_walk error, path_info %s is not relative "\n                              "to the filename path %s for uri %s",\n                              r->path_info, r->filename, r->uri);\n                return HTTP_INTERNAL_SERVER_ERROR;\n            }\n            save_path_info = NULL;\n        }\n        else {\n            save_path_info = r->path_info;\n            r->path_info = r->filename;\n        }\n#ifdef CASE_BLIND_FILESYSTEM\n        canonical_len = 0;\n        while (r->canonical_filename && r->canonical_filename[canonical_len]\n               && (r->canonical_filename[canonical_len]\n                   == r->path_info[canonical_len])) {\n             ++canonical_len;\n        }\n        while (canonical_len\n               && ((r->canonical_filename[canonical_len - 1] != \'/\'\n                   && r->canonical_filename[canonical_len - 1])\n                   || (r->path_info[canonical_len - 1] != \'/\'\n                       && r->path_info[canonical_len - 1]))) {\n            --canonical_len;\n        }\n        rv = apr_filepath_root((const char **)&r->filename,\n                               (const char **)&r->path_info,\n                               canonical_len ? 0 : APR_FILEPATH_TRUENAME,\n                               r->pool);\n        filename_len = strlen(r->filename);\n        if ((rv == APR_SUCCESS) && canonical_len\n            && (filename_len > canonical_len)) {\n            rv = apr_filepath_root((const char **)&r->filename,\n                                   (const char **)&r->path_info,\n                                   APR_FILEPATH_TRUENAME, r->pool);\n            filename_len = strlen(r->filename);\n            canonical_len = 0;\n        }\n#else\n        rv = apr_filepath_root((const char **)&r->filename,\n                               (const char **)&r->path_info,\n                               0, r->pool);\n        filename_len = strlen(r->filename);\n#endif\n        if (rv != APR_SUCCESS) {\n            ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,\n                          "dir_walk error, could not determine the root "\n                          "path of filename %s%s for uri %s",\n                          r->filename, r->path_info, r->uri);\n            return HTTP_INTERNAL_SERVER_ERROR;\n        }\n        buflen = filename_len + strlen(r->path_info) + 2;\n        buf = apr_palloc(r->pool, buflen);\n        memcpy(buf, r->filename, filename_len + 1);\n        r->filename = buf;\n        thisinfo.valid = APR_FINFO_TYPE;\n        thisinfo.filetype = APR_DIR;\n        startseg = seg = ap_count_dirs(r->filename);\n        sec_idx = 0;\n        do {\n            int res;\n            char *seg_name;\n            char *delim;\n            int temp_slash=0;\n            if ((seg > startseg) && r->filename[filename_len-1] != \'/\') {\n                r->filename[filename_len++] = \'/\';\n                r->filename[filename_len] = 0;\n                temp_slash=1;\n            }\n            for (; sec_idx < num_sec; ++sec_idx) {\n                ap_conf_vector_t *entry_config = sec_ent[sec_idx];\n                core_dir_config *entry_core;\n                entry_core = ap_get_module_config(entry_config, &core_module);\n                if (entry_core->r || entry_core->d_components > seg) {\n                    break;\n                }\n                if (entry_core->d_components\n                    && ((entry_core->d_components < seg)\n                     || (entry_core->d_is_fnmatch\n                         ? (apr_fnmatch(entry_core->d, r->filename,\n                                        APR_FNM_PATHNAME) != APR_SUCCESS)\n                         : (strcmp(r->filename, entry_core->d) != 0)))) {\n                    continue;\n                }\n                core_opts_merge(sec_ent[sec_idx], &opts);\n                if (matches) {\n                    if (last_walk->matched == sec_ent[sec_idx]) {\n                        now_merged = last_walk->merged;\n                        ++last_walk;\n                        --matches;\n                        continue;\n                    }\n                    cache->walked->nelts -= matches;\n                    matches = 0;\n                }\n                if (now_merged) {\n                    now_merged = ap_merge_per_dir_configs(r->pool,\n                                                          now_merged,\n                                                          sec_ent[sec_idx]);\n                }\n                else {\n                    now_merged = sec_ent[sec_idx];\n                }\n                last_walk = (walk_walked_t*)apr_array_push(cache->walked);\n                last_walk->matched = sec_ent[sec_idx];\n                last_walk->merged = now_merged;\n            }\n            do {\n                ap_conf_vector_t *htaccess_conf = NULL;\n                if (seg < startseg || !opts.override) {\n                    break;\n                }\n                res = ap_parse_htaccess(&htaccess_conf, r, opts.override,\n\t\t\t\t\topts.override_opts,\n                                        apr_pstrdup(r->pool, r->filename),\n                                        sconf->access_name);\n                if (res) {\n                    return res;\n                }\n                if (!htaccess_conf) {\n                    break;\n                }\n                core_opts_merge(htaccess_conf, &opts);\n                if (matches) {\n                    if (last_walk->matched == htaccess_conf) {\n                        now_merged = last_walk->merged;\n                        ++last_walk;\n                        --matches;\n                        break;\n                    }\n                    cache->walked->nelts -= matches;\n                    matches = 0;\n                }\n                if (now_merged) {\n                    now_merged = ap_merge_per_dir_configs(r->pool,\n                                                          now_merged,\n                                                          htaccess_conf);\n                }\n                else {\n                    now_merged = htaccess_conf;\n                }\n                last_walk = (walk_walked_t*)apr_array_push(cache->walked);\n                last_walk->matched = htaccess_conf;\n                last_walk->merged = now_merged;\n            } while (0);\n            if (temp_slash) {\n                r->filename[--filename_len] = \'\\0\';\n            }\n            if (!r->path_info || !*r->path_info) {\n                break;\n            }\n            seg_name = r->filename + filename_len;\n            delim = strchr(r->path_info + (*r->path_info == \'/\' ? 1 : 0), \'/\');\n            if (delim) {\n                size_t path_info_len = delim - r->path_info;\n                *delim = \'\\0\';\n                memcpy(seg_name, r->path_info, path_info_len + 1);\n                filename_len += path_info_len;\n                r->path_info = delim;\n                *delim = \'/\';\n            }\n            else {\n                size_t path_info_len = strlen(r->path_info);\n                memcpy(seg_name, r->path_info, path_info_len + 1);\n                filename_len += path_info_len;\n                r->path_info += path_info_len;\n            }\n            if (*seg_name == \'/\')\n                ++seg_name;\n            if (!*seg_name) {\n                break;\n            }\n            if (r->finfo.filetype\n#ifdef CASE_BLIND_FILESYSTEM\n                && (filename_len <= canonical_len)\n#endif\n                && ((opts.opts & (OPT_SYM_OWNER | OPT_SYM_LINKS)) == OPT_SYM_LINKS))\n            {\n                thisinfo.filetype = APR_DIR;\n                ++seg;\n                continue;\n            }\n            rv = apr_stat(&thisinfo, r->filename,\n                          APR_FINFO_MIN | APR_FINFO_NAME | APR_FINFO_LINK,\n                          r->pool);\n            if (APR_STATUS_IS_ENOENT(rv)) {\n                thisinfo.filetype = APR_NOFILE;\n                break;\n            }\n            else if (APR_STATUS_IS_EACCES(rv)) {\n                ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,\n                              "access to %s denied", r->uri);\n                return r->status = HTTP_FORBIDDEN;\n            }\n            else if ((rv != APR_SUCCESS && rv != APR_INCOMPLETE)\n                     || !(thisinfo.valid & APR_FINFO_TYPE)) {\n                ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,\n                              "access to %s failed", r->uri);\n                return r->status = HTTP_FORBIDDEN;\n            }\n            if ((thisinfo.valid & APR_FINFO_NAME)\n                && strcmp(seg_name, thisinfo.name)) {\n                strcpy(seg_name, thisinfo.name);\n                filename_len = strlen(r->filename);\n            }\n            if (thisinfo.filetype == APR_LNK) {\n                if ((res = resolve_symlink(r->filename, &thisinfo,\n                                           opts.opts, r->pool)) != OK) {\n                    ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,\n                                  "Symbolic link not allowed: %s",\n                                  r->filename);\n                    return r->status = res;\n                }\n            }\n            if (thisinfo.filetype == APR_REG ||\n                thisinfo.filetype == APR_NOFILE) {\n                break;\n            }\n            else if (thisinfo.filetype != APR_DIR) {\n                ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,\n                              "Forbidden: %s doesn\'t point to "\n                              "a file or directory",\n                              r->filename);\n                return r->status = HTTP_FORBIDDEN;\n            }\n            ++seg;\n        } while (thisinfo.filetype == APR_DIR);\n        if (!r->finfo.filetype || r->finfo.filetype == APR_LNK) {\n            r->finfo = thisinfo;\n        }\n        if (save_path_info) {\n            if (r->path_info && *r->path_info) {\n                r->path_info = ap_make_full_path(r->pool, r->path_info,\n                                                 save_path_info);\n            }\n            else {\n                r->path_info = save_path_info;\n            }\n        }\n        for (; sec_idx < num_sec; ++sec_idx) {\n            core_dir_config *entry_core;\n            entry_core = ap_get_module_config(sec_ent[sec_idx], &core_module);\n            if (!entry_core->r) {\n                continue;\n            }\n            if (ap_regexec(entry_core->r, r->filename, 0, NULL, REG_NOTEOL)) {\n                continue;\n            }\n            core_opts_merge(sec_ent[sec_idx], &opts);\n            if (matches) {\n                if (last_walk->matched == sec_ent[sec_idx]) {\n                    now_merged = last_walk->merged;\n                    ++last_walk;\n                    --matches;\n                    continue;\n                }\n                cache->walked->nelts -= matches;\n                matches = 0;\n            }\n            if (now_merged) {\n                now_merged = ap_merge_per_dir_configs(r->pool,\n                                                      now_merged,\n                                                      sec_ent[sec_idx]);\n            }\n            else {\n                now_merged = sec_ent[sec_idx];\n            }\n            last_walk = (walk_walked_t*)apr_array_push(cache->walked);\n            last_walk->matched = sec_ent[sec_idx];\n            last_walk->merged = now_merged;\n        }\n        if (matches) {\n            cache->walked->nelts -= matches;\n        }\n    }\n    r->canonical_filename = r->filename;\n    if (r->finfo.filetype == APR_DIR) {\n        cache->cached = r->filename;\n    }\n    else {\n        cache->cached = ap_make_dirstr_parent(r->pool, r->filename);\n    }\n    cache->dir_conf_tested = sec_ent;\n    cache->dir_conf_merged = r->per_dir_config;\n    if (now_merged) {\n        r->per_dir_config = ap_merge_per_dir_configs(r->pool,\n                                                     r->per_dir_config,\n                                                     now_merged);\n    }\n    cache->per_dir_result = r->per_dir_config;\n    return OK;\n}']