--- a/src/server/safs/pcheck.c Wed Dec 28 12:23:51 2016 +0100 +++ b/src/server/safs/pcheck.c Wed Dec 28 17:27:14 2016 +0100 @@ -97,7 +97,8 @@ char *path_info = pblock_findkeyval (pb_key_path_info , rq -> vars); char *script_name = pblock_findkeyval (pb_key_script_name, rq -> vars); //NSFCFileInfo *finfo = NULL; - struct stat *finfo; + struct stat stbuf; + struct stat *finfo = NULL; rq->directive_is_cacheable = 1; @@ -142,18 +143,22 @@ *path_info = '\0'; //if ((INTrequest_info_path(path, rq, &finfo) == PR_SUCCESS) && finfo) { - if((finfo = request_stat_path(path, rq)) != NULL) { + struct stat *st = request_stat_path(path, rq); + if(st) { + finfo = &stbuf; + stbuf = *st; + free(st); + } + if(finfo) { //if (finfo->pr.type != PR_FILE_FILE) { if(S_ISDIR(finfo->st_mode)) { *path_info = FILE_PATHSEP; if (set_path_info(rq, pblock_findkeyval(pb_key_uri, rq->reqpb), 0)) { - free(finfo); return REQ_PROCEED; } break; } else { set_path_info(rq, pblock_findkeyval(pb_key_uri, rq->reqpb), path_info_depth); - free(finfo); return REQ_PROCEED; } } else { @@ -185,7 +190,13 @@ *path_info = '\0'; //if ((INTrequest_info_path(path, rq, &finfo) == PR_SUCCESS) && finfo) { - if((finfo = request_stat_path(path, rq)) != NULL) { + struct stat *st = request_stat_path(path, rq); + if(st) { + stbuf = *st; + finfo = &stbuf; + free(st); + } + if(finfo) { //if (finfo->pr.type != PR_FILE_FILE) { if(S_ISDIR(finfo->st_mode)) { *path_info++ = FILE_PATHSEP; @@ -216,10 +227,8 @@ ++path_info_depth; *path_info = '\0'; set_path_info(rq, uri, path_info_depth); - free(finfo); return REQ_PROCEED; } - free(finfo); } else { *path_info = FILE_PATHSEP;