Commit 8656d025 authored by William A. Rowe Jr's avatar William A. Rowe Jr
Browse files

  Restrict by content type and encoding before we go and try to drag in some
  text to merge as headers and footers to autoindex pages.  This will escape
  index.gif from a bold attempt to use IndexHeader index ;)

  Also pass in the args to the subrequest, for anyone trying to decode what
  the user is looking at.  A great example of this coming up.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@91609 13f79535-47bb-0310-9956-ffa450edef68
parent 837ff2cb
Loading
Loading
Loading
Loading
+23 −4
Original line number Diff line number Diff line
@@ -984,21 +984,32 @@ static void do_emit_plain(request_rec *r, apr_file_t *f)
static void emit_head(request_rec *r, char *header_fname, int suppress_amble,
		      char *title)
{
    apr_table_t *hdrs = r->headers_in;
    apr_file_t *f = NULL;
    request_rec *rr = NULL;
    int emit_amble = 1;
    int emit_H1 = 1;
    const char *r_accept;
    const char *r_accept_enc;

    /*
     * If there's a header file, send a subrequest to look for it.  If it's
     * found and a text file, handle it -- otherwise fall through and
     * pretend there's nothing there.
     * found and html do the subrequest, otherwise handle it
     */
    r_accept = apr_table_get(hdrs, "Accept");
    r_accept_enc = apr_table_get(hdrs, "Accept-Encoding");
    apr_table_setn(hdrs, "Accept", "text/html, text/plain");
    apr_table_unset(hdrs, "Accept-Encoding");

    if ((header_fname != NULL) && r->args) {
        header_fname = apr_pstrcat(r->pool, header_fname, "?", r->args, NULL);
    }

    if ((header_fname != NULL)
	&& (rr = ap_sub_req_lookup_uri(header_fname , r, NULL))
	&& (rr->status == HTTP_OK)
	&& (rr->filename != NULL)
	&& rr->finfo.filetype == APR_REG) {
	&& (rr->finfo.filetype == APR_REG)) {
	/*
	 * Check for the two specific cases we allow: text/html and
	 * text/anything-else.  The former is allowed to be processed for
@@ -1044,6 +1055,14 @@ static void emit_head(request_rec *r, char *header_fname, int suppress_amble,
	}
    }

    if (r_accept)
        apr_table_setn(hdrs, "Accept", r_accept);
    else
        apr_table_unset(hdrs, "Accept");

    if (r_accept_enc)
        apr_table_setn(hdrs, "Accept-Encoding", r_accept_enc);

    if (emit_amble) {
	emit_preamble(r, title);
    }