40 lines
1.4 KiB
Diff
40 lines
1.4 KiB
Diff
|
# ./pullrev.sh 1884505 1915625
|
||
|
http://svn.apache.org/viewvc?view=revision&revision=1884505
|
||
|
http://svn.apache.org/viewvc?view=revision&revision=1915625
|
||
|
|
||
|
--- httpd-2.4.57/modules/filters/mod_xml2enc.c
|
||
|
+++ httpd-2.4.57/modules/filters/mod_xml2enc.c
|
||
|
@@ -329,7 +329,7 @@
|
||
|
apr_bucket* bstart;
|
||
|
apr_size_t insz = 0;
|
||
|
int pending_meta = 0;
|
||
|
- char *ctype;
|
||
|
+ char *mtype;
|
||
|
char *p;
|
||
|
|
||
|
if (!ctx || !f->r->content_type) {
|
||
|
@@ -338,13 +338,17 @@
|
||
|
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);
|
||
|
+ /* 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);
|
||
|
|
||
|
- /* only act if starts-with "text/" or contains "xml" */
|
||
|
- if (strncmp(ctype, "text/", 5) && !strstr(ctype, "xml")) {
|
||
|
+ /* Accept text/ types, plus any XML media type per RFC 7303. */
|
||
|
+ if (!(strncmp(mtype, "text/", 5) == 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) ;
|
||
|
}
|