author | Petr Sumbera <petr.sumbera@oracle.com> |
Thu, 14 Aug 2014 07:20:57 -0700 | |
branch | s11u2-sru |
changeset 3268 | 17a417ef54a5 |
permissions | -rw-r--r-- |
3268
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
1 |
Patch origin: upstream |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
2 |
Patch status: will be part of next version |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
3 |
|
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
4 |
http://svn.apache.org/viewvc?view=revision&revision=1611426 |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
5 |
|
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
6 |
--- modules/filters/mod_deflate.c 2014/07/17 18:19:00 1611425 |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
7 |
+++ modules/filters/mod_deflate.c 2014/07/17 18:20:46 1611426 |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
8 |
@@ -37,6 +37,7 @@ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
9 |
#include "httpd.h" |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
10 |
#include "http_config.h" |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
11 |
#include "http_log.h" |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
12 |
+#include "http_core.h" |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
13 |
#include "apr_lib.h" |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
14 |
#include "apr_strings.h" |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
15 |
#include "apr_general.h" |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
16 |
@@ -51,6 +52,9 @@ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
17 |
static const char deflateFilterName[] = "DEFLATE"; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
18 |
module AP_MODULE_DECLARE_DATA deflate_module; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
19 |
|
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
20 |
+#define AP_INFLATE_RATIO_LIMIT 200 |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
21 |
+#define AP_INFLATE_RATIO_BURST 3 |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
22 |
+ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
23 |
typedef struct deflate_filter_config_t |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
24 |
{ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
25 |
int windowSize; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
26 |
@@ -62,6 +66,12 @@ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
27 |
char *note_output_name; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
28 |
} deflate_filter_config; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
29 |
|
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
30 |
+typedef struct deflate_dirconf_t { |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
31 |
+ apr_off_t inflate_limit; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
32 |
+ int ratio_limit, |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
33 |
+ ratio_burst; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
34 |
+} deflate_dirconf_t; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
35 |
+ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
36 |
/* RFC 1952 Section 2.3 defines the gzip header: |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
37 |
* |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
38 |
* +---+---+---+---+---+---+---+---+---+---+ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
39 |
@@ -193,6 +203,14 @@ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
40 |
return c; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
41 |
} |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
42 |
|
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
43 |
+static void *create_deflate_dirconf(apr_pool_t *p, char *dummy) |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
44 |
+{ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
45 |
+ deflate_dirconf_t *dc = apr_pcalloc(p, sizeof(*dc)); |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
46 |
+ dc->ratio_limit = AP_INFLATE_RATIO_LIMIT; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
47 |
+ dc->ratio_burst = AP_INFLATE_RATIO_BURST; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
48 |
+ return dc; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
49 |
+} |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
50 |
+ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
51 |
static const char *deflate_set_window_size(cmd_parms *cmd, void *dummy, |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
52 |
const char *arg) |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
53 |
{ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
54 |
@@ -284,6 +302,55 @@ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
55 |
return NULL; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
56 |
} |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
57 |
|
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
58 |
+ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
59 |
+static const char *deflate_set_inflate_limit(cmd_parms *cmd, void *dirconf, |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
60 |
+ const char *arg) |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
61 |
+{ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
62 |
+ deflate_dirconf_t *dc = (deflate_dirconf_t*) dirconf; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
63 |
+ char *errp; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
64 |
+ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
65 |
+ if (APR_SUCCESS != apr_strtoff(&dc->inflate_limit, arg, &errp, 10)) { |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
66 |
+ return "DeflateInflateLimitRequestBody is not parsable."; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
67 |
+ } |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
68 |
+ if (*errp || dc->inflate_limit < 0) { |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
69 |
+ return "DeflateInflateLimitRequestBody requires a non-negative integer."; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
70 |
+ } |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
71 |
+ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
72 |
+ return NULL; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
73 |
+} |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
74 |
+ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
75 |
+static const char *deflate_set_inflate_ratio_limit(cmd_parms *cmd, |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
76 |
+ void *dirconf, |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
77 |
+ const char *arg) |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
78 |
+{ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
79 |
+ deflate_dirconf_t *dc = (deflate_dirconf_t*) dirconf; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
80 |
+ int i; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
81 |
+ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
82 |
+ i = atoi(arg); |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
83 |
+ if (i <= 0) |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
84 |
+ return "DeflateInflateRatioLimit must be positive"; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
85 |
+ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
86 |
+ dc->ratio_limit = i; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
87 |
+ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
88 |
+ return NULL; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
89 |
+} |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
90 |
+ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
91 |
+static const char *deflate_set_inflate_ratio_burst(cmd_parms *cmd, |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
92 |
+ void *dirconf, |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
93 |
+ const char *arg) |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
94 |
+{ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
95 |
+ deflate_dirconf_t *dc = (deflate_dirconf_t*) dirconf; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
96 |
+ int i; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
97 |
+ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
98 |
+ i = atoi(arg); |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
99 |
+ if (i <= 0) |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
100 |
+ return "DeflateInflateRatioBurst must be positive"; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
101 |
+ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
102 |
+ dc->ratio_burst = i; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
103 |
+ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
104 |
+ return NULL; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
105 |
+} |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
106 |
+ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
107 |
typedef struct deflate_ctx_t |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
108 |
{ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
109 |
z_stream stream; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
110 |
@@ -294,8 +361,26 @@ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
111 |
unsigned char *validation_buffer; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
112 |
apr_size_t validation_buffer_length; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
113 |
int inflate_init; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
114 |
+ int ratio_hits; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
115 |
+ apr_off_t inflate_total; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
116 |
} deflate_ctx; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
117 |
|
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
118 |
+/* Check whether the (inflate) ratio exceeds the configured limit/burst. */ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
119 |
+static int check_ratio(request_rec *r, deflate_ctx *ctx, |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
120 |
+ const deflate_dirconf_t *dc) |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
121 |
+{ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
122 |
+ if (ctx->stream.total_in) { |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
123 |
+ int ratio = ctx->stream.total_out / ctx->stream.total_in; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
124 |
+ if (ratio < dc->ratio_limit) { |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
125 |
+ ctx->ratio_hits = 0; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
126 |
+ } |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
127 |
+ else if (++ctx->ratio_hits > dc->ratio_burst) { |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
128 |
+ return 0; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
129 |
+ } |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
130 |
+ } |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
131 |
+ return 1; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
132 |
+} |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
133 |
+ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
134 |
/* Number of validation bytes (CRC and length) after the compressed data */ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
135 |
#define VALIDATION_SIZE 8 |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
136 |
/* Do not update ctx->crc, see comment in flush_libz_buffer */ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
137 |
@@ -744,6 +829,8 @@ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
138 |
int zRC; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
139 |
apr_status_t rv; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
140 |
deflate_filter_config *c; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
141 |
+ deflate_dirconf_t *dc; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
142 |
+ apr_off_t inflate_limit; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
143 |
|
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
144 |
/* just get out of the way of things we don't want. */ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
145 |
if (mode != AP_MODE_READBYTES) { |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
146 |
@@ -751,6 +838,7 @@ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
147 |
} |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
148 |
|
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
149 |
c = ap_get_module_config(r->server->module_config, &deflate_module); |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
150 |
+ dc = ap_get_module_config(r->per_dir_config, &deflate_module); |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
151 |
|
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
152 |
if (!ctx) { |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
153 |
char deflate_hdr[10]; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
154 |
@@ -803,11 +891,13 @@ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
155 |
if (len != 10 || |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
156 |
deflate_hdr[0] != deflate_magic[0] || |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
157 |
deflate_hdr[1] != deflate_magic[1]) { |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
158 |
+ ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, "Failed to inflate input: wrong/partial magic bytes"); |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
159 |
return APR_EGENERAL; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
160 |
} |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
161 |
|
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
162 |
/* We can't handle flags for now. */ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
163 |
if (deflate_hdr[3] != 0) { |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
164 |
+ ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, "Failed to inflate input: cannot handle deflate flags"); |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
165 |
return APR_EGENERAL; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
166 |
} |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
167 |
|
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
168 |
@@ -831,6 +921,12 @@ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
169 |
apr_brigade_cleanup(ctx->bb); |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
170 |
} |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
171 |
|
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
172 |
+ inflate_limit = dc->inflate_limit; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
173 |
+ if (inflate_limit == 0) { |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
174 |
+ /* The core is checking the deflated body, we'll check the inflated */ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
175 |
+ inflate_limit = ap_get_limit_req_body(f->r); |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
176 |
+ } |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
177 |
+ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
178 |
if (APR_BRIGADE_EMPTY(ctx->proc_bb)) { |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
179 |
rv = ap_get_brigade(f->next, ctx->bb, mode, block, readbytes); |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
180 |
|
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
181 |
@@ -863,6 +959,17 @@ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
182 |
|
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
183 |
ctx->stream.next_out = ctx->buffer; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
184 |
len = c->bufferSize - ctx->stream.avail_out; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
185 |
+ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
186 |
+ ctx->inflate_total += len; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
187 |
+ if (inflate_limit && ctx->inflate_total > inflate_limit) { |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
188 |
+ inflateEnd(&ctx->stream); |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
189 |
+ ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r, |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
190 |
+ "Inflated content length of %" APR_OFF_T_FMT |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
191 |
+ " is larger than the configured limit" |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
192 |
+ " of %" APR_OFF_T_FMT, |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
193 |
+ ctx->inflate_total, inflate_limit); |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
194 |
+ return APR_ENOSPC; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
195 |
+ } |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
196 |
|
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
197 |
ctx->crc = crc32(ctx->crc, (const Bytef *)ctx->buffer, len); |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
198 |
tmp_heap = apr_bucket_heap_create((char *)ctx->buffer, len, |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
199 |
@@ -891,6 +998,26 @@ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
200 |
ctx->stream.next_out = ctx->buffer; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
201 |
len = c->bufferSize - ctx->stream.avail_out; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
202 |
|
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
203 |
+ ctx->inflate_total += len; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
204 |
+ if (inflate_limit && ctx->inflate_total > inflate_limit) { |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
205 |
+ inflateEnd(&ctx->stream); |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
206 |
+ ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r, |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
207 |
+ "Inflated content length of %" APR_OFF_T_FMT |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
208 |
+ " is larger than the configured limit" |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
209 |
+ " of %" APR_OFF_T_FMT, |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
210 |
+ ctx->inflate_total, inflate_limit); |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
211 |
+ return APR_ENOSPC; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
212 |
+ } |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
213 |
+ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
214 |
+ if (!check_ratio(r, ctx, dc)) { |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
215 |
+ inflateEnd(&ctx->stream); |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
216 |
+ ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r, |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
217 |
+ "Inflated content ratio is larger than the " |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
218 |
+ "configured limit %i by %i time(s)", |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
219 |
+ dc->ratio_limit, dc->ratio_burst); |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
220 |
+ return APR_EINVAL; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
221 |
+ } |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
222 |
+ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
223 |
ctx->crc = crc32(ctx->crc, (const Bytef *)ctx->buffer, len); |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
224 |
tmp_heap = apr_bucket_heap_create((char *)ctx->buffer, len, |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
225 |
NULL, f->c->bucket_alloc); |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
226 |
@@ -1003,6 +1130,7 @@ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
227 |
int zRC; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
228 |
apr_status_t rv; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
229 |
deflate_filter_config *c; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
230 |
+ deflate_dirconf_t *dc; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
231 |
|
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
232 |
/* Do nothing if asked to filter nothing. */ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
233 |
if (APR_BRIGADE_EMPTY(bb)) { |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
234 |
@@ -1010,6 +1138,7 @@ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
235 |
} |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
236 |
|
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
237 |
c = ap_get_module_config(r->server->module_config, &deflate_module); |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
238 |
+ dc = ap_get_module_config(r->per_dir_config, &deflate_module); |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
239 |
|
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
240 |
if (!ctx) { |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
241 |
|
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
242 |
@@ -1272,6 +1401,14 @@ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
243 |
while (ctx->stream.avail_in != 0) { |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
244 |
if (ctx->stream.avail_out == 0) { |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
245 |
|
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
246 |
+ if (!check_ratio(r, ctx, dc)) { |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
247 |
+ ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r, |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
248 |
+ "Inflated content ratio is larger than the " |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
249 |
+ "configured limit %i by %i time(s)", |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
250 |
+ dc->ratio_limit, dc->ratio_burst); |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
251 |
+ return APR_EINVAL; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
252 |
+ } |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
253 |
+ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
254 |
ctx->stream.next_out = ctx->buffer; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
255 |
len = c->bufferSize - ctx->stream.avail_out; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
256 |
|
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
257 |
@@ -1346,12 +1483,20 @@ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
258 |
"Set the Deflate Memory Level (1-9)"), |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
259 |
AP_INIT_TAKE1("DeflateCompressionLevel", deflate_set_compressionlevel, NULL, RSRC_CONF, |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
260 |
"Set the Deflate Compression Level (1-9)"), |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
261 |
+ AP_INIT_TAKE1("DeflateInflateLimitRequestBody", deflate_set_inflate_limit, NULL, OR_ALL, |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
262 |
+ "Set a limit on size of inflated input"), |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
263 |
+ AP_INIT_TAKE1("DeflateInflateRatioLimit", deflate_set_inflate_ratio_limit, NULL, OR_ALL, |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
264 |
+ "Set the inflate ratio limit above which inflation is " |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
265 |
+ "aborted (default: " APR_STRINGIFY(AP_INFLATE_RATIO_LIMIT) ")"), |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
266 |
+ AP_INIT_TAKE1("DeflateInflateRatioBurst", deflate_set_inflate_ratio_burst, NULL, OR_ALL, |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
267 |
+ "Set the maximum number of following inflate ratios above limit " |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
268 |
+ "(default: " APR_STRINGIFY(AP_INFLATE_RATIO_BURST) ")"), |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
269 |
{NULL} |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
270 |
}; |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
271 |
|
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
272 |
module AP_MODULE_DECLARE_DATA deflate_module = { |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
273 |
STANDARD20_MODULE_STUFF, |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
274 |
- NULL, /* dir config creater */ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
275 |
+ create_deflate_dirconf, /* dir config creater */ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
276 |
NULL, /* dir merger --- default is to override */ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
277 |
create_deflate_server_config, /* server config */ |
17a417ef54a5
19262807 problem in UTILITY/APACHE
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
278 |
NULL, /* merge server config */ |