Skip to content

Commit

Permalink
* modules/filters/mod_xml2enc.c (xml2enc_ffunc): Rewrite to accept any
Browse files Browse the repository at this point in the history
  XML media type per RFC 7303.

PR: 64339
  • Loading branch information
notroj committed Feb 2, 2024
1 parent 502eca5 commit b76b4ab
Showing 1 changed file with 12 additions and 8 deletions.
20 changes: 12 additions & 8 deletions modules/filters/mod_xml2enc.c
Original file line number Diff line number Diff line change
Expand Up @@ -329,7 +329,7 @@ static apr_status_t xml2enc_ffunc(ap_filter_t* f, apr_bucket_brigade* bb)
apr_bucket* bstart;
apr_size_t insz = 0;
int pending_meta = 0;
char *ctype;
char *mtype;
char *p;

if (!ctx || !f->r->content_type) {
Expand All @@ -338,13 +338,17 @@ static apr_status_t xml2enc_ffunc(ap_filter_t* f, apr_bucket_brigade* bb)
return ap_pass_brigade(f->next, bb) ;
}

ctype = apr_pstrdup(f->r->pool, f->r->content_type);
for (p = ctype; *p; ++p)
if (isupper(*p))
*p = tolower(*p);

/* only act if starts-with "text/" or contains "+xml" */
if (strncmp(ctype, "text/", 5) && !strstr(ctype, "+xml")) {
/* Extract the media type, ignoring parameters in content-type. */
mtype = apr_pstrdup(f->r->pool, f->r->content_type);
if ((p = ap_strchr(mtype, ';')) != NULL) *p = '\0;
ap_str_tolower(mtype);

/* Accept any XML media type per RFC 7303. */
if (!(strcmp(mtype, "text/xml") == 0
|| strcmp(mtype, "application/xml") == 0
|| (strlen(mtype) > 7 /* minimum 'a/b+xml' length */
&& (p = strstr(mtype, "+xml")) != NULL
&& strlen(p) == 4 /* ensures +xml is a suffix */))) {
ap_remove_output_filter(f);
return ap_pass_brigade(f->next, bb) ;
}
Expand Down

0 comments on commit b76b4ab

Please sign in to comment.