HTTPD_ERR_RET(req, 400, FALSE);
HTTPD_ERR_MSG_RET(req, 400, "Path has /../", FALSE);
static int http_req_make_path(struct Con *con, Httpd_req_data *req){  Vstr_base *data = con->evnt->io_r;  Vstr_base *fname = req->fname;    ASSERT(!fname->len);  assert(VPREFIX(data, req->path_pos, req->path_len, "/") ||         VEQ(data, req->path_pos, req->path_len, "*"));  if (req->chk_encoded_slash &&      vstr_srch_case_cstr_buf_fwd(data, req->path_pos, req->path_len, "%2f"))    HTTPD_ERR_RET(req, 403, FALSE);  if (req->chk_encoded_dot &&      vstr_srch_case_cstr_buf_fwd(data, req->path_pos, req->path_len, "%2e"))    HTTPD_ERR_RET(req, 403, FALSE);  req->chked_encoded_path = TRUE;  vstr_add_vstr(fname, 0,                data, req->path_pos, req->path_len, VSTR_TYPE_ADD_BUF_PTR);  vstr_conv_decode_uri(fname, 1, fname->len);  if (fname->conf->malloc_bad) /* dealt with as errmem_req() later */    return (TRUE);  /* NOTE: need to split function here so we can more efficently alter the   * path. */  if (!httpd_serv_add_vhost(con, req))    return (FALSE);    /* check posix path ... including hostname, for NIL and path escapes */  if (vstr_srch_chr_fwd(fname, 1, fname->len, 0))    HTTPD_ERR_RET(req, 403, FALSE);  /* web servers don't have relative paths, so /./ and /../ aren't "special" */  if (vstr_srch_cstr_buf_fwd(fname, 1, fname->len, "/../") ||      VSUFFIX(req->fname, 1, req->fname->len, "/.."))    HTTPD_ERR_RET(req, 400, FALSE);  if (req->policy->chk_dot_dir &&      (vstr_srch_cstr_buf_fwd(fname, 1, fname->len, "/./") ||       VSUFFIX(req->fname, 1, req->fname->len, "/.")))    HTTPD_ERR_RET(req, 400, FALSE);  ASSERT(fname->len);  assert(VPREFIX(fname, 1, fname->len, "/") ||         VEQ(fname, 1, fname->len, "*") ||         fname->conf->malloc_bad);  if (fname->conf->malloc_bad)    return (TRUE);    return (TRUE);}